memo-space
CakePHP日記:Smaryテンプレート内での配列生成
- 2007-03-29
- php
CakePHPからSmartyを使うのは一見いいとこどりのようで、実際結構大変かもしれない。
- How to use Smarty with Cake (SmartyView) | The Bakery, Everything CakePHP : Articles
- MOONGIFT ブログ ≫ cakePHP覚書 (1)
素の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ヘルパーの属性を指定する
- WriteBacks: 2
それ、yuiで
- 2007-03-27
- programming
なかなか興味深いなあと思っていたら、Yahoo UI Libraryでできるらしい。
- 404 Blog Not Found:CSS - スクロール可能なテーブル w/o JavaScript
- Sybianの日記 - tbodyをスクロール可能に
- hxxk.jp - CSS で tbody 要素を一定の高さにして、 overflow: auto でスクロール表示にする tips
どういう仕組みになっているかは誰かが調べてくれるはず。
- WriteBacks: 0
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>
- WriteBacks: 1
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にエラーハンドラを作った方が良いのかな。
- WriteBacks: 0
CakePHP日記:commit()は空のarrayを返す
- 2007-03-21
- php
Modelのcommit()は空のarrayを返すので、 if ($this->Model->commit()) { /* 成功 */ } とか書くと常に失敗する。
というか、他のRDBMSは知らないけど、PostgreSQLってトランザクション内でエラーが出 てる状態でcommitすると成功を返してrollbackするのか。
これは、select以外のSQLをexecute()した場合も、成功の場合は空のarrayを返す。 失敗した場合はfalseを返す。
- WriteBacks: 0
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');
してやるべきじゃなかろうか。
- WriteBacks: 0
tbodyとrowspan
- 2007-03-19
- programming
tbodyで思い出した。JOINの結果みたいなグループ化されたのを表にしたい時に、tdにrowspanを付けるのがけっこうめんどい。 なぜなら、上から走査していくのの、そのグループの要素が何個あるかを最初に知っていなければならないからだ(適当な説明だけどピンとこない人はスルーして下さい)。
で、楽する方法としてtbodyとrowspan="0"を使うという方法を思いついたんだけど、IEだと表示できなった。以上。
| 111 | aaa |
| bbb | |
| ccc | |
| 222 | aaa |
| bbb | |
| ccc |
- WriteBacks: 0
PostgreSQLドキュメントの閲覧用ブックマークレット
- 2007-03-07
- pgsql
PostgreSQL日本語ドキュメントを見ていて、あれ?これって原文どうなってるのかな?とか思った時に、原文の同じページに移動するためのブックマークレットを作ってみた。
下のリンクをブックマークツールバーか何かにドラック&ドロップして下さい。
バージョンが上がった場合は直さなきゃだめだけど。
- WriteBacks: 0
- Search
- Feeds
- Profile
- 石田@苫小牧市と名乗りつつ札幌の某社に勤務するプログラマ
- 書いた本
- Links