Home

memo-space

CakePHP日記:Smaryテンプレート内での配列生成

  • 2007-03-29
  • php

CakePHPからSmartyを使うのは一見いいとこどりのようで、実際結構大変かもしれない。

素のCakePHPだと

<p>Title: <?php echo $html->input('Post/title', array('size'=>40, 'class'=>'classname'))}</p>

みたいな感じのものを、Smartyテンプレート内では配列を生成できないので、

{assign_assoc var='ArrayName' value='size=>40,class=>classname'}
<p>Title: {$html->input('Post/title', $ArrayName)}</p>

と書こうという話。そんなassignは個人的に許せないわけですよ。 CakePHPのbasic.phpにはaとかaaとかhとかprとか色々便利な関数があるのと、 Smartyテンプレート内では関数を自由に呼び出すことはできないけど、 テンプレート変数のメソッドなら治外法権という性質を利用して、 SmartyViewにラッパーメソッドを追加。

function aa() {
    $args = func_get_args();
    return call_user_func_array('aa', $args);
}

SmartyViewのインスタンスは$viewとしてテンプレート内から参照できるので、

<p>Title: {$html->input('Post/title', $view->aa('size', 40, 'class', 'classname'))}</p>

と書くことができる。邪道な気もしますが。あと、同様にprも追加しておいた。

あと、テンプレート変数をヘルパーの引数に渡したい時とかどうしよう(ループカウンタとか)。 $view->Smarty->get_template_vars()かなぁ。どんどん道を外れていく気がする。

2007-04-03 追記:CakePHP日記:SmartyからHTMLヘルパーの属性を指定する

それ、yuiで

CakePHP日記:radioにlabelを付ける

  • 2007-03-27
  • php

デフォルトのHtmlHelper::radio()が出力するラジオボタンにラベルが無いので付けた。 誰もがやりたくなる改造だと思います。

ヘルパーが出力するHTMLタグは、app/config/tags.ini.phpでカスタマイズできますが、 <label for="...">と書くにはヘルパー側に手を入れる必要があるので、 安易にapp/config/tags.ini.phpをこんな感じにしてみました。

radio =  <label><input type="radio" name="data[%s][%s]" id="%s" %s />%s</label>

CakePHP日記:AppErrorで日本語が表示できない

  • 2007-03-21
  • php

単にメッセージを表示するだけのエラーページのために、action毎にviewを作るのはめんどうなので何か無いかと探してみた。

Object::cakeError()あたりが使えそう。

  • app/error.phpというファイルにAppError extends ErrorHandlerを作る。
  • Apperror::foo() jを作る。
  • app/views/errors/foo.thtml を作る

が作法のようだ。詳しくはソース見てね。

なんだけど、日本語のメッセージが表示されない。どうやらErrorHandlerのコンストラクタでSanitize::paranoid()を使っているからみたいだ。

コンストラクタもオーバーライドしないとだめかな。 いや、もういっそcakeError()を使わずにAppControllerにエラーハンドラを作った方が良いのかな。

CakePHP日記:commit()は空のarrayを返す

  • 2007-03-21
  • php

Modelのcommit()は空のarrayを返すので、 if ($this->Model->commit()) { /* 成功 */ } とか書くと常に失敗する。

というか、他のRDBMSは知らないけど、PostgreSQLってトランザクション内でエラーが出 てる状態でcommitすると成功を返してrollbackするのか。

これは、select以外のSQLをexecute()した場合も、成功の場合は空のarrayを返す。 失敗した場合はfalseを返す。

CakePHP日記:sessionとhidden

  • 2007-03-20
  • php

CakePHPをはじめた。

全体的にはよくまとまっていると思うけど、まだググり足りないのか、あれこれ足りないものも見えてきた。

ドキュメントのサンプルコードも微妙。

6.4. アソシエーション:Example 6.9. posts 作成のための /app/views/posts/add.thtml フォーム

<?php echo $html->hidden('Post/user_id',
 array('value'=>$this->controller->Session->read('User.id')))?>

アプリケーションの種類にもよるだろうけど、これはちょっとサンプルコードとしては怖い気がする。user_id詐称しまくりじゃないですか。 これはcontroller側で

$this->data['Post']['user_id'] = $this->Session->read('User.id');

してやるべきじゃなかろうか。

tbodyとrowspan

Sybianの日記 - tbodyをスクロール可能に

tbodyで思い出した。JOINの結果みたいなグループ化されたのを表にしたい時に、tdにrowspanを付けるのがけっこうめんどい。 なぜなら、上から走査していくのの、そのグループの要素が何個あるかを最初に知っていなければならないからだ(適当な説明だけどピンとこない人はスルーして下さい)。

で、楽する方法としてtbodyとrowspan="0"を使うという方法を思いついたんだけど、IEだと表示できなった。以上。

111aaa
bbb
ccc
222aaa
bbb
ccc

PostgreSQLドキュメントの閲覧用ブックマークレット

PostgreSQL日本語ドキュメントを見ていて、あれ?これって原文どうなってるのかな?とか思った時に、原文の同じページに移動するためのブックマークレットを作ってみた。

下のリンクをブックマークツールバーか何かにドラック&ドロップして下さい。

バージョンが上がった場合は直さなきゃだめだけど。

Home

Search
Feeds
Profile
石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
書いた本
Links

Page Top