spanstyle::monologでタグ「Smarty」が付けられているもの

考えてみたらもそっといじれそうだったので、またいじってみました。前回以上にお気軽かつ確実な二重送信・多重送信の防止が期待できそうなヨカーン。

フナエさんから「最近更新してないねー。忙しい?」といわれたので更新します。

たぶん、国内でも2人くらいしか欲してなさそうなSmarty Tips。

smartyカスタム関数のhtml_optionsを使うと、htmlのドロップダウンリスト(プルダウンメニュー)を作成することができる。じゃあこれを拡張して、リストボックス表示や複数選択を可能にするにはどうするか。

rapidsite障害発生中?

|

昨日の昼過ぎから、会社で借りてるrapidsiteのVPSサーバがヘンだ。

先週土曜日、PHPのテンプレートシステムSmartyの勉強会で講師をしてきました。どうもお疲れ様でした。


皆様、ピザ3枚とも美味しゅうございました。発泡酒、ビールもおいしゅうございました。

資料4枚目くらいで笑いがとれたのは美味しゅうございました。PCが遅くてキャッシュのベンチマーク結果がすごいことになったのも美味しゅうございました。

でも30分以上迷って遅れたのは美味しゅうございませんでした。ボウズが被りまくってたのも美味しゅうございませんでした。男性率100%だったのはとても美味しゅうございませんでした。長尾様、何度もナビ代わりになって戴き有難うございました。


ということで、当日の発表資料とかを放流します。家庭円満によく効きます。

(08/23 修正)
全部zipで固めないでpdfだけは別に分けました。単なる検索エンジン対策です。

SmartyテンプレートがDBに保存されてるとして、それをPHP変数に取り込んだ後、どうやって表示しようかと思ったんです。

例えば、

$tmpl =<<<EOF

<html>
<body>
ここはテンプレの中身です。渡されたテンプレート変数$dataの値は{$data}です。
</body>
</html>

EOF;

みたいな感じでSmartyのテンプレートデータが$tmplの中にあるとする。で、ロジックの中にはすでに$tmpl(テンプレート)も$data(テンプレート変数)も存在しているとする。

さて、ここからが問題。このテンプレートおよびテンプレート変数は、どうやったら表示できるんだ?display()やfetch()は、引数にテンプレートファイル名を指定できるけど変数名は指定できないし。

ひょっとしたらdisplay()やfetch()で読み込むためのテンプレートリソースプラグインを作る必要があるのかも?とマニュアルを読んでみたものの、なんだか意味がわからず。で、暫し考えた後に力技で解決できた。

前回はHTML_QuickFormの基礎を勉強したので、今回は応用。Smartyとの連携ってのをやってみる。


********************************************************************************
大きな流れ
********************************************************************************
addElement:オブジェクト設定

addRule:検証ルール設定

applyFilter:フィルタ設定。trimしたりとか

(やっぱここでやるんでしょ?)
setDefaults:デフォルト値設定
setConstants:定数設定(上書きできない値。使いどころがイメージできない...)

validate:検証実施

freeze:凍結実施(検証がOKだったら)

Smartyにデータを渡して表示

HTML_QuickForm利用の手引き
http://www.is.titech.ac.jp/~yanagis0/kei/quickform.html

を参考に、まずはPEARについているサンプルソースを見てみる。場所はPEARディレクトリ内の「doc/HTML_QuickForm/docs/renderers/SmartyStatic_example.php」。SmartyDynamic_example.phpもある。スタティックとダイナミックでどう違うかはよくわからんが、まずはスタティックの方のソースを追ってみることに。非Smartyとの違いは、99行目「// setup a template object」以降の処理だけっぽい。

validate&freeze以降の流れはこんな感じ。

Smartyオブジェクト生成

生成したSmartyを渡しながらrendererオブジェクト生成

初期設定(必須とかエラーとか。なんかよくわからん)

HTML_QuickFormオブジェクトにrendererオブジェクトを渡す(accept())

Smartyオブジェクトにテンプレート変数を登録

Smarty->display();

なのだそうな。

テンプレート変数については、例えば

$form->addElement('header', 'MyHeader', 'QuickFormのテスト');
$form->addElement('text', 'name', 'あなたのお名前は?');
$form->addElement('submit', 'btnSubmit', '送信');
//(略)
$tmpl->assign('form', $renderer->toArray());

と登録すれば、テンプレートの方からは{$form.header.MyHeader}で「QuickFormのテスト」にアクセスできる。ただしこれはヘッダに限った話で、その他のフォームオブジェクトへのアクセス方法としては{$form.name.label}で「あなたのお名前は?」に、{$form.name.html}でフォームオブジェクトのHTMLにアクセスできる模様。

ただしsubmitボタンについては、{$form.btnSubmit.label}とやっても「送信」とは表示されない。resetボタンも同様({$form.btnSubmit.value}か?)。

一番重要な<form>タグへ設定する属性値へは{$form.attributes}でアクセスできる。つまり<form {$form.attributes}>と書けばいいみたい。まあとにかくやってみる。

HTML_QuickForm からの脱却」とか「QF Haters」とかを読む限りでは、MojaviやMapleなどのMVCフレームワークを使いこなせる人にとって、HTML_QuickFormはもはや使い勝手の悪いモノでしかないそうです(Mapleって初めて知りますた。デザイナさんもプロジェクトに参加してるってすばらしい)。

でも、僕は最近ようやっとSmartyが使えるようになった程度だし、PEARもDBとAuthとPagerくらいしか使ったことないし、第一フレームワークがちんぷんかんぷんなので(決定打)、ある意味上級者になるための踏み絵と思いながらHTML_QuickFormをベンキョしてみようと思いますです。最終目標はHTML_Quickform+Smartyの独自レンダリング。入力→確認→完了の遷移ってHTML_Quickform_Controller使わないとムリかしら?

で、とりあえず「html_quickform」のググり一覧をかたっぱしから見ながらやってみました。以下、テストコードにづらづら書いた自分用コメントもまとめて載せます。

最近、気になってること。

Smartyを使う一番大きな利点って「デザイン(HTML)とロジック(PHP)の分離」だと思う(キャッシュ機能もあるけどここでは割愛)。けれどもここでいう「デザイン」とは、おそらく<table>でゴリゴリ組まれたグリッドデザインの話。

一方で、最近流行の「適切にマークアップされたHTML+CSSでデザインされたサイト」を構築するとなると、ゆくゆくは「デザイン(CSS)とHTMLとロジック(PHP)の分離」になる。このとき、HTMLはプログラマとデザイナのどっちが書くことになるんだろう?

HTMLには意味情報を書くのだから、ひょっとしてプログラマ側のさらなる負担に?それともCSSとHTMLをデザイナ側に丸投げ?それとも「タグ打ち職人」とのトライアングル開発なのか?

「適切にマークアップしてくれ」っていう依頼は今後緩やかに増えていくとは思うんだけど、謎は深まるばかり。

今年の抱負

|

忘れないように書いておこう。

  • smarty(PHPのテンプレート)を身につける
  • Perlを身につける
  • デザインパターンを身につける
  • Javaをちょこっとかじる
  • 自宅サーバを早く入れ替える
  • 情報サイトを4~5くらい立ち上げてみる
  • 簿記を勉強する
  • 水泳を日常に取り込む
  • 筋肉をつけて60Kg台に持ち込む
  • 友達を作る

がんがるぞー。エイエイオー。

このサイトについて

自分用リンク

Powered by Movable Type 4.22-ja

PR

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

アイテム

  • swfobject.png
  • symfony.png
  • doclean.png
  • clean.png
  • twitterui.png
  • php5.2.8-warning.png
  • pagesaver.png
  • analytics.png
  • Munsell Hue Test.png
  • Munsell Hue Test0.png