【PHP】 Smarty 隔離スレ 【テンプレート】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/02(土) 00:21:09ID:6cKcKeTp0633nobodyさん
2009/08/21(金) 22:16:33ID:???0634nobodyさん
2009/08/21(金) 22:16:56ID:???0635nobodyさん
2009/08/22(土) 00:43:33ID:qs0RE9DR{$num}というsmarty変数に対して、
function smarty_modifier_NUMtoTEXT($num,$aryName){
return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。
0636nobodyさん
2009/08/22(土) 00:59:28ID:???http://www.smarty.net/manual/ja/language.modifiers.php
0640nobodyさん
2009/08/25(火) 00:15:56ID:???php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな
0643nobodyさん
2009/08/26(水) 12:19:29ID:???検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">
として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。
0644nobodyさん
2009/08/26(水) 13:37:23ID:???insertタグで出来るんじゃね?
あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。
0645nobodyさん
2009/08/26(水) 14:37:50ID:???0646nobodyさん
2009/08/26(水) 23:01:41ID:???ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。
やっぱり、設計に問題あるかも・・。
0647nobodyさん
2009/08/28(金) 14:54:05ID:45fY5t7Edbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…
部分的にデザインパターンを読み込むなど、他の解決方法はないですか?
0648nobodyさん
2009/08/28(金) 15:03:05ID:???0649nobodyさん
2009/08/28(金) 15:25:18ID:???0650nobodyさん
2009/08/28(金) 16:29:28ID:45fY5t7Eそうですね、それがいいですね
ありがとうございました
0651nobodyさん
2009/08/28(金) 16:30:15ID:45fY5t7Eありがとう
0652nobodyさん
2009/08/28(金) 17:53:20ID:MIAE9vSw呼び出すことはできないのでしょうか?
0653nobodyさん
2009/08/28(金) 19:07:18ID:???0654nobodyさん
2009/09/02(水) 05:34:35ID:55UeyG/q{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。
0655nobodyさん
2009/09/02(水) 09:19:59ID:???0658nobodyさん
2009/09/06(日) 21:25:22ID:???1000アクセスある場合を想定してテストしたんだが、
約10〜15%ほどページの読み込みが早かった
0659nobodyさん
2009/09/07(月) 08:07:01ID:???0661nobodyさん
2009/09/07(月) 23:17:57ID:K7GASBY+Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
http://questionbox.jp.msn.com/qa4209668.html
http://pcmemorogu.blog14.fc2.com/blog-entry-20.html など
が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません
0662nobodyさん
2009/09/07(月) 23:25:11ID:???つか二次元配列を出力しなければならない例が思いつかないけど
0663nobodyさん
2009/09/07(月) 23:49:42ID:K7GASBY+ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。
if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました
お騒がせしました。ありがとうございました
0664nobodyさん
2009/09/08(火) 00:19:32ID:???0665nobodyさん
2009/09/08(火) 00:25:48ID:qSoCHGpfどう修正したらいいのやら、、と、調べたらありました。
http://blog.asial.co.jp/309
-----
# function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
# {
# // 配列が渡ってきたら何もせずにreturn
# if (is_array($string)) return $string;
# switch ($esc_type) {
# case 'html':
たしかにこれでよさそう。
664さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…
0666nobodyさん
2009/09/08(火) 00:43:09ID:???if (is_array($string)) return $string;
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。
plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。
0667nobodyさん
2009/09/08(火) 00:47:00ID:qSoCHGpf詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。
0668nobodyさん
2009/09/20(日) 18:33:32ID:???クソ公式落ちまくっててDLできないんだけど
http://www.smarty.net/
だれかソースくらいは分散しとけって忠告してやれよ
0669nobodyさん
2009/09/20(日) 18:55:26ID:???0670nobodyさん
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:???■ このスレッドは過去ログ倉庫に格納されています