[cakePHP] floatのフィールドが指数表記になっちゃう

cakePHPでfloatのフィールドを使った場合、7桁を超える数値を入れたらフォームで指数表記されちゃうのが困る。

これが

こうなる

仕方ないのでviewで

$this->data["Article"]["point"] = sprintf('%.2f', $this->data["Article"]["point"]);

って書いたらいけるかと思ったらいけなかった。
よくよく考えたらviewをレンダリングする前にformが出来上がってんじゃなかったっけ?w
ってことに気付いて素直にcontrollerに書いたら期待通りに動いた。

function edit($id = null) {
if (!$id && empty($this->data)) {
$this->Session->setFlash(__('Invalid article', true));
$this->redirect(array('action' => 'index'));
}
if (!empty($this->data)) {
if ($this->Article->save($this->data)) {
$this->Session->setFlash(__('The article has been saved', true));
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The article could not be saved. Please, try again.', true));
}
}
if (empty($this->data)) {
$this->data = $this->Article->read(null, $id);
$this->data["Article"]["point"] = sprintf('%.2f', $this->data["Article"]["point"]);
}
}


何かイマイチすっきりしないのですが、他の解決策ないのかねぇ?

Filed under: cakePHP,PHP,Programming — maesan 5:17 PM

[cakePHP] 1.3でForm->selectのパラメータ変わったのか

今までだと、formヘルパーを使って空白を出さないselectは以下の様に書いてました

echo $this->Form->select('hoge_id', $hoges, null, null, false);

で1.3でこれやるとダメで、ソース見たらこうやるのが正しいっぽい

echo $this->Form->select('hoge_id', $hoges, null, array('empty' => false));

だれかCookbookのフォームヘルパーのselectのページを修正してください><
http://book.cakephp.org/ja#!/ja/view/1430/select
↑英語版を見るとそっちは正しいみたいだった!

Filed under: cakePHP,PHP,Programming — maesan 11:31 PM

[Python] メール送信

Pythonでメールを送信したかったのでやってみた

基本的には以下のページのコピペなのですが、1点引っかかったのでメモ
Pythonでメールを送信したい人のためのサンプル集

#!/usr/bin/env python
# encoding: utf-8

import smtplib
from email.MIMEText import MIMEText
from email.Utils import formatdate

def SendMail(to_addr, subject, body, from_addr=None):
if from_addr is None:
from_addr = "hoge@maesan.jp"
msg = MIMEText(body)
msg["Subject"] = subject
msg["From"] = from_addr
msg["To"] = to_addr
msg["Date"] = formatdate()

s = smtplib.SMTP()
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()

if __name__ == '__main__':
from_addr = 'hoge@maesan.jp'
to_addr = 'foo@maesan.jp'
subject = 'test mail'
body = 'test'
SendMail(to_addr, subject, body, from_addr)

これでおkだと思ってたのですが、実行すると

AttributeError: SMTP instance has no attribute ‘sock’

ってエラーがでた。

多分メールサーバーとの接続に失敗したのかなと思い、明示的にサーバーとポートを指定したら動いた。

# s = smtplib.SMTP() # ↓こんな感じに変更
s = smtplib.SMTP("localhost", 25)

参考ページ

Pythonでメールを送信したい人のためのサンプル集
[ mailman-Bugs-1315417 ] SMTP problem

Filed under: Programming,Python — maesan 11:29 AM
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)