【Smarty】PHPのテンプレートエンジン【Flexy】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/06/15(水) 10:35:52ID:???PHPのテンプレートエンジンを語るスレです。
Smarty:本家(英語)
http://smarty.php.net/
Smarty:日本語マニュアルとか
http://sunset.freespace.jp/smarty/
pear の HTML_Template たち
http://pear.php.net/package/HTML_Template_Flexy
http://pear.php.net/package/HTML_Template_IT
http://pear.php.net/package/HTML_Template_Sigma
http://pear.php.net/package/HTML_Template_Xipe
http://pear.php.net/package/HTML_Template_PHPLIB
patTemplate
http://www.php-tools.de/
http://www.php-j.com/tutorial/php/template.php
前スレ(現在dat落ち)【PHP】Smarty【Template】
http://pc8.2ch.net/test/read.cgi/php/1047225437/
0220nobodyさん
2006/01/08(日) 17:34:47ID:???テンプレートエンジンのメリットが薄れると思う
Perl の Template::Toolkit とかも
0221nobodyさん
2006/01/08(日) 17:53:55ID:???0222nobodyさん
2006/01/08(日) 18:08:33ID:???俺の場合はテンプレートにロジックは書けたとしても書かないようにしてる。
テンプレート内に書くのはHTMLを生成すること自体に必要な条件分岐とループと変数の表示以外には基本的に何もしない。
その他必要なロジック(例えばリンクのURLを文字列操作とか)は全てViewでやってる。
0223nobodyさん
2006/01/08(日) 18:46:09ID:???それが普通だし、そうじゃないとテンプレートエンジン使ってる意味ないしなぁ。
>>220はゴリゴリ書いたりしてるの?
0224nobodyさん
2006/01/08(日) 19:22:36ID:???これが枯れたら最強じゃね?
テンプレートエンジンはそんなに内部をいじるものでもないから
extensionと親和性が高いと思う。
0225nobodyさん
2006/01/08(日) 20:05:02ID:???なるほど。基本的にコンパイラ(というかコードジェネレータ)だからFlex+Bison使ってCで実装したほうが賢いってわけか。
Smartyの字句解析+構文解析ってムチャクチャだもんなw
0226nobodyさん
2006/01/09(月) 12:18:38ID:???0227nobodyさん
2006/01/09(月) 13:02:31ID:m48rbPvoあれ、俺Smarty+SJISテンプレートで使ってるけど、今のところ何の問題もないみたい
(たしかに一昔前のバージョンまではSJISダメだったけど)
この文字が入ってたらエラーになる、みたいなのがあるのかな?
どんな制限があるのか詳しい人いたら教えて
0228nobodyさん
2006/01/09(月) 13:48:28ID:???開始タグと終了タグを変更すりゃ大丈夫そうだけど。
0229nobodyさん
2006/01/09(月) 15:50:33ID:0a34r5jX<td>{$san.$k.0.TITLE}</td>
<td>{$san.$k.0.DESCRIPTION}</td>
<td>{$san.$k.1.DC:DATE}</td>
のように書いてみた。
TITLEやDESCRIPTIONは読めるけどDC:DATEは読めない
syntax error: unrecognized tag: $san.$k.1.DC:DATE
ほぼ間違いなく「:」を誤読されてるみたいだけど解決できませんか?
0230nobodyさん
2006/01/09(月) 17:26:41ID:???{assign var="date" valud="DC:DATE"}
<td>{$san.$k.1.$date}</td>
もしくは$smarty->assign()するときにDC:DATEの方をいじるとか。
0231nobodyさん
2006/01/10(火) 11:23:45ID:???アリガ�d
やっぱストレートには行かないですねー
PHP側で$sanを作るときにkeyを変更しました(汎用性が・・ ;_;)
0232227
2006/01/11(水) 00:22:37ID:62rgCa7x「閲」とかがあるとダメらしい
ttp://ns1.php.gr.jp/pipermail/php-users/2003-February/013595.html
この辺で無事解決しました
0233nobodyさん
2006/01/11(水) 13:26:36ID:???携帯端末向けのときだけSJISにしたかったので。
0234nobodyさん
2006/01/11(水) 13:38:59ID:???JavaScriptとかStyleSheetのために{literal}使うのはまずそれ自体面倒臭いし、JavaScriptやStyleSheetの中にSmartyの変数を入れたい時とかもっと面倒臭い。
<? ?>にしたらエディタの色分けがPHPのままでもある程度ちょうど良かったってのもあるし、SJIS問題も一気に解消。
問題はXHTMLくらいだろうけど、今のとこ使う予定なし。
0235nobodyさん
2006/01/11(水) 17:37:21ID:???XMLだね
0236nobodyさん
2006/01/11(水) 18:23:19ID:???人それぞれなので別に止めないけど。
漏れ的にはcssとjsは外部ファイルなので問題茄子。
リンク先書くとき基準ディレクトリがphpファイル側にあるのは若干辛いものがある。
0237nobodyさん
2006/01/12(木) 00:14:14ID:???んで、テンプレートをごりごりSJISで書いてます・・
そのうち問題起きるんだろうなぁ
0238nobodyさん
2006/01/12(木) 00:57:03ID:F7HO2NXcjavascript の所 {literal} で囲まないとすぐエラーになるし。
0239nobodyさん
2006/01/12(木) 00:58:04ID:???load_filterでEUC<>SJIS変換すると、絵文字が化けるんだよなぁ
&xxxx;形式だと、開発PC上で表示(i絵文字インストール済み)できないから不便だし。。。
今はこのあたりを参考に変換掛けて使ってるけどなんかいい方法ないのかなぁ
http://ke-tai.org/index.php?cmd=read&page=DoCoMo%2F%A5%B5%A5%A4%A5%C8%C0%A9%BA%EE#content_1_7
あとmb_convert_kanaも、同様に絵文字が化けちゃうのも困りもの
0241nobodyさん
2006/01/12(木) 15:27:23ID:???0242nobodyさん
2006/01/12(木) 22:09:37ID:F7HO2NXcxops?
0243nobodyさん
2006/01/13(金) 00:13:16ID:???0244nobodyさん
2006/01/13(金) 12:29:11ID:???]]></php:PHPCode>
これならどうだ!
0245nobodyさん
2006/01/13(金) 15:42:28ID:???0246nobodyさん
2006/01/13(金) 23:04:51ID:???単純なforループでたいがい何とかなるのに
sectionのキモい仕様は何なんだよ。氏ね。
0247nobodyさん
2006/01/13(金) 23:50:14ID:???あと定数への参照機能な。
0248nobodyさん
2006/01/14(土) 00:28:32ID:???0249nobodyさん
2006/01/14(土) 00:34:49ID:???$hoge[1] = 'one';
$hoge[0] = 'zero';
$hoge[2] = 'two';
てなってるとforeachとsection動作違うと思われ。
0251nobodyさん
2006/01/14(土) 00:43:38ID:???0252nobodyさん
2006/01/14(土) 02:42:28ID:YyEEFPbbsection の使い方覚えるのめんどうなのでforeachしか使った事ありません。
0253nobodyさん
2006/01/14(土) 03:06:05ID:???0254nobodyさん
2006/01/14(土) 10:50:17ID:???0255247
2006/01/14(土) 13:35:15ID:???最初に section を使い始めて、foreach 使ったことないや。
逆に聞くけど foreach を使う理由ってなに?
俺はレコード内容を行番号と列名の連想配列に格納して色々な形で出力するのに section のネストを使ってる。
データベースから取り出した通りに並んでるから別に他の命令にする理由がないだけなんだが・・・。
0256nobodyさん
2006/01/14(土) 14:33:27ID:???テンプレートとロジックを別の人間が作った場合、ソートされてることを保障させるより
単純にsectionで処理した方が安全だと思うんだが。
そこまでsectionを嫌う理由を聞きたい。
>>255
キーが未知の連想配列をキーとともに出力するとき。
0257nobodyさん
2006/01/14(土) 14:43:49ID:???やっぱりそうですか。
個人的に気持ち悪いんで、そういう配列はつくらないんですよ。
テスト仕様書書くとき期待値を設定できないし。
0258nobodyさん
2006/01/14(土) 14:46:19ID:???{section name=col loop=$table[row]}
{$table[row][col]}
{/section}
{/section}
{foreach from=$table item=row}
{foreach from=$row item=col}
{$col}
{/foreach}
{/foreach}
キー名を出力しなければこんなもんか
漏れはforeach派だが、単に統一してた方が分かりやすいからという理由だな
sectionはぱっと見で処理が分かりづらいというのもある
0259nobodyさん
2006/01/14(土) 14:47:04ID:???0261nobodyさん
2006/01/14(土) 15:04:40ID:???0262nobodyさん
2006/01/14(土) 15:05:04ID:???$array2 (a,b,c)
とか別の配列に入ってるのを同時に回したいときに便利なのがsectionでしょ
$array (array(1,a),array(2,b),array(3,b))
とかだったらforeachでいいかと。
0263nobodyさん
2006/01/14(土) 15:37:17ID:???そうすると全部 section でいいのでは・・・。
foreach 使ってる人は無理して転向しなくていいけど。
>>260
テンプレートエンジンは使ったほうがいいぞ。
圧倒的に管理しやすくなる。
0264nobodyさん
2006/01/14(土) 16:36:11ID:???0265nobodyさん
2006/01/14(土) 16:40:58ID:???0266265
2006/01/14(土) 16:41:58ID:???0267nobodyさん
2006/01/14(土) 16:43:49ID:???効率だけを考えるならC, PHP, Java, その他スクリプトで一番手っ取り早いのを適宜使うしなぁ。
0268nobodyさん
2006/01/14(土) 18:17:14ID:???foreach を使うのは簡単だから。
配列まわすならforeachってのは直感的にわかりやすいと思うんだけど
section を使ったほうがシンプルに書ける場合があるってことですね。
0269nobodyさん
2006/01/14(土) 18:21:16ID:???好みの問題かもしれないですがソートはロジックで保障すべきだと思うけど。
そこをテンプレートでってのがsectionを嫌う理由かもしれません。
単なる好みですね。
0270nobodyさん
2006/01/14(土) 18:21:47ID:???0272nobodyさん
2006/01/14(土) 20:14:03ID:???逆じゃない?
ほかのjava,rubyなどと違ってもともとhtml埋め込み型言語なのだから、
webprogでのテンプレートエンジンの重要さはほかの言語より重要度では劣るのでは?
php自体が独自タグによるテンプレートエンジンであるという主張ならわかるが。
0273nobodyさん
2006/01/14(土) 20:48:50ID:???PHP 生書きでテンプレートもどきってのはあんまり感心しない
ただ、Smarty でロジック書きまくってるのは PHP そのままで
いいじゃんと思うこともあるな、確かに
言語増えただけじゃん、みたいなね
0275nobodyさん
2006/01/14(土) 21:41:07ID:???htmlを生成するための道具としてのテンプレートエンジンの重要性ってそれなりに低い気もするが。
どちらも使ってるけど、どっちかっていったら無くなって困るのはフレームワークかな。
いざとなれば生書きにもそれなりのメリットはあるし。
というか、2つは矛盾しないし、目的も違うから比べること自体アレだけど。
0276nobodyさん
2006/01/14(土) 22:37:27ID:???自分がプログラム書くにせよ、他人に流すにせよ、プロトタイプコードをそのまま渡せるから。
Smarty より手軽なものがあればそっちを使うけど。
0278nobodyさん
2006/01/16(月) 00:49:42ID:???xmlcとまでは行かなくても、amritaかkwartzライクなテンプレートエンジンがphpにも欲しいな。
kwartzも期待してたけど開発停止状態のうえphpコンパイラはobsoleteみたいだしなぁ...
0280nobodyさん
2006/01/17(火) 01:42:35ID:ZnOPSUo70281nobodyさん
2006/01/17(火) 02:31:48ID:ZnOPSUo7{include file=$includeFile}
のようにして include に変数を渡せるのですが、
これと同じようなことをFlexyでも可能でしょうか?
0282nobodyさん
2006/01/17(火) 09:48:32ID:???$hoge1[n]->hoge2[n]->xxx
みたいな変数でも
二重にして回せるよ
sectionはそれができないから使わない
0283nobodyさん
2006/01/18(水) 20:15:38ID:???0284nobodyさん
2006/01/19(木) 00:09:19ID:???0287nobodyさん
2006/01/19(木) 00:38:24ID:qu6lGv13自身があるなら、どーんと構えとけ。
0288nobodyさん
2006/01/22(日) 14:18:24ID:???0289nobodyさん
2006/01/22(日) 20:05:05ID:???globalfunctionsオプションをtrueにして
{GLOBALS.constant(#CONSTANT_NAME#)}
で参照はできる。
if文の中に使ったり複雑なことしようと思うと難しいけど。
0290nobodyさん
2006/01/22(日) 20:39:07ID:???もうテンプレートエンジン使わなくても、PHPでいいやんって思ったりするね。
0291nobodyさん
2006/01/22(日) 21:47:39ID:???0292nobodyさん
2006/01/22(日) 23:16:09ID:???index.php に画面遷移先に必要な定数だけ書いて、後は画面単位で大雑把なスケルトンコードを書けばいい。
逆にいえばそれ以外にはメリットがない・・・。
んまー、コードはすっきりするけどね。
0293nobodyさん
2006/01/23(月) 00:19:55ID:???{$form.radio2.label}
...
...
みたいにカウンターでraidoの値を増やしていきたいのですができますか?
{counter start=1}
{$form.radio$counter.label}
とかforeach使ってみましたがダメでした。
0295nobodyさん
2006/01/23(月) 01:48:37ID:???mojavi, HTML_QuickForm + Smartyを利用していて addElementするとそうなるからです。
0296293
2006/01/23(月) 03:07:43ID:???みたいにして無理やり解決してみました。
0297nobodyさん
2006/01/23(月) 13:03:47ID:???0298nobodyさん
2006/01/23(月) 15:09:54ID:???addGroup使っても同じかと思って気にしていなかったんですけど…
どうやるんですか?というかどう違うのですか?
0299nobodyさん
2006/01/23(月) 16:23:36ID:???http://pear.php.net/manual/ja/package.html.html-quickform.html-quickform.addgroup.php
0300nobodyさん
2006/01/23(月) 23:34:04ID:???0304nobodyさん
2006/01/24(火) 17:55:41ID:???単純に構造が分かりにくいから。
同じ [n] で回すなら、別の変数に分けた方がいい。
優れたプログラマなら自分の死んだ後のことも考えとけ。
0306nobodyさん
2006/01/24(火) 21:53:48ID:H58eWtwf( ,_ノ` )y━・~~~
0308nobodyさん
2006/01/24(火) 22:15:47ID:H58eWtwf( ,_ノ` )y━・~~~
0309nobodyさん
2006/01/25(水) 00:57:06ID:???乗らなくてよかった
0311nobodyさん
2006/01/25(水) 07:32:48ID:???0312nobodyさん
2006/01/25(水) 08:13:34ID:???加えてシンタックスの限界にも不満を感じていた。
そんなわけで、メンテも開発も止める。
http://www.paullockaby.com/faq/#0015
0313nobodyさん
2006/01/26(木) 11:25:03ID:7udzlJtlfor ($i=0;$i<10;$i++){
echo "<br>"
}
みたいな単純なループをしたい場合どうしたらいいですか?
配列の要素数のループは出来るのですが
このような単純なループの書き方が分かりません。
0314nobodyさん
2006/01/26(木) 11:29:05ID:???<br>
{/section}
で出来ました。
0315nobodyさん
2006/01/27(金) 00:56:53ID:???radioエレメントへsetValueして動いた方いますか?
0316nobodyさん
2006/01/27(金) 10:46:07ID:???どう動かないのか良く分からないけど…
radioに対するsetValueは、
同じnameを持つ全てのElement全てに対して実行しないと
以前のチェックが解除されない。
<input type="radio" name="foo" id="foo1" value="1" checked="checked">
<input type="radio" name="foo" id="foo2" value="2">
があったとして、foo2だけにチェックを入れるには、
foo1, foo2両方にsetValue(2)を実行しないと駄目。
0317nobodyさん
2006/01/29(日) 04:26:53ID:???escape:html
でおけ?
0318nobodyさん
2006/01/31(火) 11:29:21ID:RWHeKAHi>全てのselect/inputタグにさらなる属性を追加
とあるんですけど、html_select_dateのyear_emptyみたいな使い方ができるのでしょうか?
ちなみに「all_extra=""」と記述してみたりしたのですが何も変化がありません。
0319nobodyさん
2006/02/01(水) 23:35:59ID:BABJfEVvSmartyでキャッシュファイルを出力していますけど、ファイルがこのメッセージのように見つからないと出ます。どなたかご教示願います。
0320nobodyさん
2006/02/01(水) 23:37:58ID:BABJfEVv補足ですが、実際このファイルは存在しています。
■ このスレッドは過去ログ倉庫に格納されています