【PHP】 Smarty 隔離スレ 【テンプレート】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/02(土) 00:21:09ID:6cKcKeTp0670nobodyさん
2009/09/20(日) 19:52:57ID:???0671nobodyさん
2009/09/24(木) 18:00:24ID:???JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?
また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1〜数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?
0672nobodyさん
2009/09/24(木) 18:07:40ID:???0673nobodyさん
2009/09/25(金) 14:31:20ID:???何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った
0674nobodyさん
2009/09/25(金) 14:34:03ID:???0675nobodyさん
2009/09/25(金) 15:24:47ID:???それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。
0676nobodyさん
2009/09/25(金) 15:39:52ID:???0677nobodyさん
2009/09/25(金) 21:46:51ID:???0678nobodyさん
2009/09/25(金) 21:47:21ID:???0679nobodyさん
2009/09/25(金) 22:57:18ID:???0680nobodyさん
2009/09/25(金) 22:59:20ID:???0681nobodyさん
2009/09/25(金) 23:47:30ID:???0682nobodyさん
2009/09/26(土) 02:10:40ID:???[24-Sep-2009] Yes, yes I know. The Smarty 3 beta is taking much longer than expected, but we wanted to be sure we had everything right.
Our preliminary performance tests are already showing us very promising speed improvements over Smarty 2 (2-5x on average), and we're not done! To recap,
Smarty 3 is a 100% rewrite from the ground up, and it is PHP 5 only. We will be getting a feature list up with the Beta, but let me give a quick summary:
0683nobodyさん
2009/09/26(土) 04:04:41ID:???0684nobodyさん
2009/09/26(土) 09:50:48ID:???むしろ直結するのはバグ率。
0685nobodyさん
2009/09/26(土) 15:22:15ID:???まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。
0687nobodyさん
2009/09/28(月) 17:38:33ID:???0689nobodyさん
2009/09/29(火) 19:25:53ID:???http://www.j-tsugawa.com/jt-020621-EB3101-G.jpg
0690nobodyさん
2009/09/29(火) 19:36:34ID:???0691nobodyさん
2009/10/01(木) 12:03:22ID:???0692nobodyさん
2009/10/01(木) 18:28:48ID:KASc2bqu$list[0]["text"] = '{ImageBox file="test.jpg"}';
//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}
独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。
指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。
0693nobodyさん
2009/10/01(木) 20:50:56ID:???0694nobodyさん
2009/10/01(木) 21:02:54ID:???phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。
0695692
2009/10/02(金) 00:20:33ID:???foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。
プラグインで実装させるとか、難しそうだ・・・
0696nobodyさん
2009/10/02(金) 00:35:40ID:???0697柏アラフォーパパン& ◆.d6LNJ2fbM.9
2009/10/02(金) 15:06:34ID:bCUcRsfE0698nobodyさん
2009/10/03(土) 17:55:56ID:???$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');
0699nobodyさん
2009/10/03(土) 17:57:12ID:???{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}
じゃ駄目なのか?
0700nobodyさん
2009/10/03(土) 18:51:58ID:???まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。
0701692
2009/10/04(日) 00:06:35ID:???その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。
それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました
0702692
2009/10/04(日) 00:08:43ID:???ttp://d.hatena.ne.jp/lapis25/20080908/1220861488
>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。
0703nobodyさん
2009/10/11(日) 13:15:33ID:gYB28ahJsmartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?
0704nobodyさん
2009/10/11(日) 14:25:24ID:???で囲うべし。
0706nobodyさん
2009/10/11(日) 15:43:55ID:???おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。
0707nobodyさん
2009/10/11(日) 16:11:57ID:???<textarea>の中身とか
0708nobodyさん
2009/10/11(日) 17:59:26ID:???おおー、そうだそれがありました
ありがとうございました
>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?
0709nobodyさん
2009/10/11(日) 18:22:54ID:???逆にliteralで囲う。
0710nobodyさん
2009/10/12(月) 00:52:20ID:???0711nobodyさん
2009/10/13(火) 01:13:00ID:???そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>
0712nobodyさん
2009/10/13(火) 23:52:48ID:B+0jNtpm0713nobodyさん
2009/10/14(水) 00:10:46ID:k/3ZY/k4↓の、アンパサンドって何の意味があるのでしょうか?
$smarty =& new Smarty;
0714nobodyさん
2009/10/14(水) 00:27:06ID:???0715nobodyさん
2009/10/14(水) 00:36:04ID:???ないよ。
PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。
0717nobodyさん
2009/10/14(水) 01:06:18ID:???0718nobodyさん
2009/10/14(水) 01:30:24ID:???つ ttp://jp2.php.net/manual/ja/language.oop.newref.php
どこでそんな嘘をきいたん?
ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)
0719nobodyさん
2009/10/14(水) 03:14:45ID:???俺面倒だからパスね
0720nobodyさん
2009/10/15(木) 18:15:01ID:???俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。
0721nobodyさん
2009/10/16(金) 11:58:47ID:???使い道が思いつかんでもないが実際に
使う場面ってそうそうなさそうな。
0722nobodyさん
2009/10/20(火) 06:10:16ID:???0723nobodyさん
2009/10/20(火) 10:43:32ID:???0724nobodyさん
2009/10/21(水) 00:53:52ID:???extendリソースがあるんだけど、使い方解る人いる?
0725nobodyさん
2009/10/21(水) 10:25:55ID:???というかコレが核だと思う
後は必要に応じて・・・って感じで十分だし
0726nobodyさん
2009/10/21(水) 10:59:25ID:???どこら変がPHP5 OOPなんだよ
0727nobodyさん
2009/10/21(水) 22:34:20ID:???一方、__callでメソッドの外部化をしてる
extendリソースってどれ??
0728nobodyさん
2009/10/22(木) 01:31:12ID:???sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw
getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ
0730nobodyさん
2009/10/24(土) 20:08:39ID:???0732nobodyさん
2009/10/25(日) 08:28:37ID:???別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。
0733nobodyさん
2009/10/27(火) 00:14:32ID:???<%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない
大体は自前でやってるか、MovableTypeの改造版じゃないかな
0736nobodyさん
2009/10/27(火) 20:55:46ID:???ttp://shop-pro.jp/
ブログじゃなくてネットショップだけど、テンプレートにsmarty使ってるね
EC CUBEの改造版なんだろうけど
0737nobodyさん
2009/10/27(火) 21:04:25ID:???ユーザー大量にいたらキャッシュ効かせても厳しい気がする
0738nobodyさん
2009/10/28(水) 05:06:51ID:???0739nobodyさん
2009/10/28(水) 11:11:33ID:???0740nobodyさん
2009/10/28(水) 13:46:19ID:???0742nobodyさん
2009/10/29(木) 11:06:44ID:???0743nobodyさん
2009/10/29(木) 21:54:28ID:???{include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"}
パスにSmarty入ってますがな
0744nobodyさん
2009/10/30(金) 22:56:36ID:???0745nobodyさん
2009/11/01(日) 07:20:38ID:ZF01kyEW0746nobodyさん
2009/11/01(日) 10:57:23ID:???確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745
モノリンガルの俺には厳しいようだ
0748nobodyさん
2009/11/09(月) 13:54:09ID:jgJG5jObSmarty errorが表示されます。
このエラーを表示しない方法はないのでしょうか?
PHPのエラー表示をしない事で対処するしかないのでしょうか?
0749nobodyさん
2009/11/09(月) 14:06:20ID:???0750nobodyさん
2009/11/09(月) 20:59:58ID:I33d9sv+↑これ?
0751nobodyさん
2009/11/11(水) 19:01:43ID:0BFUpwQjある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど
変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね
外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?
0752nobodyさん
2009/11/12(木) 03:03:02ID:???0753nobodyさん
2009/11/12(木) 07:44:56ID:dv0ticwo0754nobodyさん
2009/11/12(木) 11:31:04ID:???おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね
0755nobodyさん
2009/11/12(木) 12:04:54ID:???0756754
2009/11/12(木) 19:22:51ID:SoSJwGM8hoge.tplに
{insert name="hogeAction" title="テスト" script="hoge_action.inc.php"}
って書いて、
同じディレクトリにあるhoge_action.inc.php に
<?php
function smarty_hogeAction($param, $smarty){
return 'あいうえお';
}
?>
って書いたんだけど「あいうえお」の出力がされない。
($param, $smarty)の引数を消して function smarty_hogeAction(){… とやってもダメだ。
何が問題かな? ご意見よろしくお願いします
0757nobodyさん
2009/11/12(木) 19:58:44ID:???× smarty_hogeAction
○ insert_hogeAction
でやってます
0758756
2009/11/12(木) 22:52:47ID:???お騒がせしました
0759nobodyさん
2009/11/13(金) 13:18:08ID:???0760756
2009/11/13(金) 14:36:48ID:???要するに
.tplでの記述は {insert name="hogeAction"}
スクリプトファイルは insert.hogeAction.php
ファイルの格納場所は /pluginsディレクトリ
として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。
insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、
関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて
変なことやりまくってたよ。恥。
0761nobodyさん
2009/11/13(金) 14:58:34ID:???0762756
2009/11/13(金) 15:11:57ID:???うん、公式がイマイチわからなくて他のサイトみてたらハマっちゃって。
今また公式見返してるけどやっぱりよくわからない
http://www.smarty.net/manual/ja/language.function.insert.php
「{insert} 関数の名前は、 ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。」
ってあるけど、それじゃ上手くいかなくて
smarty_insert_hogeAction() って形でやっと上手くいったからなぁ…
こっちの方が公式よりわかりやすかった、俺が物わかり悪いんだろうけど
http://www.y2sunlight.com/ground/?PHP5.0%2F8.Smarty%A4%F2%CD%FD%B2%F2%A4%B9%A4%EB
0763nobodyさん
2009/11/13(金) 15:22:56ID:???http://www.smarty.net/manual/ja/plugins.naming.conventions.php
>PHP ファイル内で定義する プラグイン関数 は次のように指定します。
>smarty_type_name()
0764756
2009/11/13(金) 16:02:41ID:???そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ
0765nobodyさん
2009/11/13(金) 16:19:30ID:???0766nobodyさん
2009/11/13(金) 20:01:32ID:???0767nobodyさん
2009/11/14(土) 14:51:09ID:???0768nobodyさん
2009/11/14(土) 19:37:58ID:???みなさんは、どこまで、どんな方法でテンプレートを利用していますか?
<p class="error">※必須項目です。記入してください。</p>
<p><input type="text" name="mail" value=""></p>
1. エラーメッセージは最初からpでマークアップ済み、そのままassign、smartyには{}のみ
{$errors.mail}
2. エラーメッセージはテキスト、assign時に空欄かどうか判定してpでマークアップ、smartyには{}のみ
{$errors.mail}
3. $errorsにはテキスト、そのままassign、smartyで{if}処理
{if $errors.mail}<p class="error">{$errors.mail}</p>{/if}
4. $errorsにはテキスト、そのままassign、smartyで関数処理
{$errors.mail|markupFunction}
デザイナさんと分業する場合、
プログラム側がマークアップに関わらない3.が一番いい気がしているのですが、
少しテンプレートファイルが煩雑になるのが気になったりもします。
エラーメッセージマークアップ用の小さなテンプレートファイルを作っておいて、
4.のmarkupFunctionから読み出して利用すると比較的キレイな気もしますが、
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。
0769nobodyさん
2009/11/15(日) 03:44:59ID:???Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2〜3倍速くなる程度だけど。
>>768
ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。
0770nobodyさん
2009/11/15(日) 07:22:36ID:???エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。
div p{ display:none }
div.error p{ display:block }
これでエラー時のテキストもデザイナー側で書ける。
親要素は
<div class='{$error.title}'>
って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。
■ このスレッドは過去ログ倉庫に格納されています