09/08/04 02:01:18
すまん
結局>>581が結論でいいんじゃないかと言いたかった。
597:nobodyさん
09/08/04 09:05:44
OK
598:nobodyさん
09/08/04 11:09:38
>>591
ぜひ参画してくださいよ
599:nobodyさん
09/08/04 11:24:56
大規模案件にはJAVAという逆説。
600:nobodyさん
09/08/10 18:05:18 euq/7Zv+
すみません、質問です
テンプレートファイル内で、{php}~{/php}って形で、phpのプログラムを実行出来ますが、
この「~」の部分で、assignされた変数を操作することは出来ないでしょうか
{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}
私の名前は{$name}です
こんな感じで…
よろしくお願いします。
601:nobodyさん
09/08/10 18:19:27
そのロジックはテンプレートじゃなくて、呼び出し元に書くべきでは・・・
やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc
602:nobodyさん
09/08/10 18:26:43 euq/7Zv+
>>601
ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ
603:nobodyさん
09/08/10 18:35:23
>>602
もしかしてこんな感じで解決しない?
if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);
604:nobodyさん
09/08/10 18:43:35 euq/7Zv+
>>603
ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!
605:nobodyさん
09/08/10 19:16:08
>>604
条件分岐やるとassignが増えるってどういうこと?
配列をそのまま使えば?
606:nobodyさん
09/08/10 19:21:31
>テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw
アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。
607:nobodyさん
09/08/10 19:38:15
>>605
例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…
でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。
608:nobodyさん
09/08/10 20:32:12
>>607
if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";
って書いて、$ary変数だけassignすればいいんじゃない?
その程度の表示分岐処理なら、テンプレート側でもOKかと思う。
{$ary.faxNum|default:"-"}
でいけない?
609:nobodyさん
09/08/10 20:50:18
値未入力であることを示すのに、何を表示するのかはview側の仕様だわな。
ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。
610:nobodyさん
09/08/10 22:51:30
>>608-609
うーん、そうか。
ケースバイケースでどうやるべきかじっくり考えてやってみるね
ありがとう
611:nobodyさん
09/08/10 23:13:31
度々申し訳ない
{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…
612:nobodyさん
09/08/10 23:15:44
assignでなんでだめなの?
613:nobodyさん
09/08/10 23:42:39
>>612
assignはphp側の処理ですよね、テンプレ側で値を割り当てたいので。。
614:nobodyさん
09/08/11 01:09:27
{assign} タグ使えば?
615:nobodyさん
09/08/11 03:32:24
>>614
ありがとう! こんなのがあったのか。助かりました!
616:nobodyさん
09/08/11 03:33:31
assignassign言うから当然テンプレート側のこと言ってると思ったら
assignタグすら知らんかったのか。
617:nobodyさん
09/08/11 12:14:27
だからphpタグなんぞで処理したかったのか・・・。
618:nobodyさん
09/08/12 05:56:44
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)
という配列があります。
これのphotoNameを引き出したくて以下のものを実行してますがうまくいきません。何が原因でしょうか?
{foreach from=$hogeAry item=varAry}
名前は:{$varAry.photoName}<br />
{/foreach}
{$hogeAry.0.photoName} なら、ちゃんとgalleryPic7が出力されます
619:nobodyさん
09/08/12 06:23:13
varAryの中を見てみたら?
620:nobodyさん
09/08/12 08:01:33
ループは回ってる?「名前は:」って文字は出力されてる?
{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}
で中身表示テストしてみ。
621:nobodyさん
09/08/12 10:23:00 u9+iooGY
>>620
0=z
0=z
0=z
とだけ出力して終わってます。。ループ自体はしてるってことですよね?
なんでだろ? 配列じゃないのかな。
上で書いた配列は、以下の実行結果です。(zendFWを使った、クエリの結果)
function gallery($uType,$uId){
$table = $this->_config->table->gallery;
$stt = $this->_db->fetchAll("SELECT * FROM {$table} WHERE `uType`=? AND `uId`=? AND `photo_on`=1 ORDER BY `id` LIMIT 10", array($uType,$uId));
return $stt;
}
$this->view->hogeAry = $this->_db->gallery('spot',$uId);
622:nobodyさん
09/08/12 10:32:56
>>621
Smarty側に正常にassign出来てない可能性大。
1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);
2. hogeAryがSmartyにassignされてるか確認。
623:nobodyさん
09/08/12 11:18:13 u9+iooGY
>>622
var_dump($this->view->hogeAry); の結果は
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)
.tplでの
{$hogeAry|@var_dump} の結果は
Array ( [0] => [1] => [2] => ) 1
{$hogeAry.0.photoName} の結果は
galleryPic7
ちゃんとテンプレートまでassignされてきてるってことですよね?
foreachだけがうまくいかないってことかなー
624:nobodyさん
09/08/12 11:41:14
619はシカトですかそうですか
625:nobodyさん
09/08/12 12:16:00 u9+iooGY
>>624
すみません、varAryの中身のチェックの方法がわからなかったもので。。
{foreach item=varAry from=$hogeAry}
{$varAry|@var_dump}<br />
{/foreach}
とりあえず思いつく限りで上記をやったら
string(0) ""
string(0) ""
string(0) ""
が返ってきます
{foreach item=varAry from=$hogeAry}
{$varAry.photoName}<br />
{/foreach}
だと何も返ってきません(改行3つだけです)
ほんとに済みませんでした
626:nobodyさん
09/08/12 12:34:49
原因切り分けてみたら?
本当にDBから値は取れてるのか、違う関数コールしてないか、
ただの配列なら表示できるのか、などなど。
可能だったら再現するコードも貼って。
627:nobodyさん
09/08/12 13:54:35
{debug} タグでassignされてる変数確認してみ。
628:nobodyさん
09/08/12 17:19:17 u9+iooGY
>>626-627
どうもありがとうございます
普通の配列なら大丈夫です。同じDBから同様の手続きで取得してるクエリ結果(通常の配列)があるんですが、
それはforeachで解析できています。
{debug}はdisplay形式じゃないとダメみたいで、僕のやり方がそうじゃないので動きませんでした。
それで、今ループ処理をsection形式で試してみたんですが、section なら二次元配列の処理大丈夫でした。(以下が動きました。)
{section name=varAry loop=$hogeAry}
{$smarty.section.counter.total}<br> (このカウンターは動きませんでした)
要素: {$hogeAry[varAry].id}<br>
要素: {$hogeAry[varAry].photoName}<br>
要素: {$hogeAry[varAry].photo_text}<br>
{/section}
とりあえず、お騒がせして申し訳なかったですが、foreachは諦めてこっちで極力対応したいです。
629:nobodyさん
09/08/13 16:40:28
結局原因は何なの?
630:nobodyさん
09/08/21 13:05:34 WhelcFIU
質問させてください。
テンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか?
これまでは、php中で
$hoge=$instance->method($hoge1,引数1,引数2);
として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。
{$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は
見つけられませんでした。無理なんでしょうか?
assign 前に実行すべき?
631:nobodyさん
09/08/21 14:42:48
修飾子プラグインの中でメソッド呼べばよいのでは
632:nobodyさん
09/08/21 18:37:07
>>631
どうもありがとうございます
修飾子プラグイン、知りませんでした! 勉強になります、ありがとう
633:nobodyさん
09/08/21 22:16:33
プラグインの中で他のプラグインの機能を呼び出すことってできますか?
634:nobodyさん
09/08/21 22:16:56
できるよ
635:nobodyさん
09/08/22 00:43:33 qs0RE9DR
修飾子プラグインの勉強始めたんですが、引数を2つもたせる方法がわかりません。
{$num}というsmarty変数に対して、
function smarty_modifier_NUMtoTEXT($num,$aryName){
return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。
636:nobodyさん
09/08/22 00:59:28
>>635
URLリンク(www.smarty.net)
637:nobodyさん
09/08/22 05:08:49
>>634
kwsk
638:nobodyさん
09/08/22 12:26:11
>>637
ggrks
639:nobodyさん
09/08/22 23:19:02
>>636
返事遅れました。うまくいきました、ありがとう
640:nobodyさん
09/08/25 00:15:56
foreach だの sectionだのって、なんで素直にfor文用意してくれないんだろね
php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな
641:nobodyさん
09/08/25 06:09:04
>>640
Smarty3で追加される
642:nobodyさん
09/08/25 13:55:26
>>641
ほんとに? 情報ありがとう、気分が楽になったよw
そういう情報を仕入れる前向きさがないとイカンなぁ
643:nobodyさん
09/08/26 12:19:29
キャッシュしてできたファイルの中にSmartyタグって入れられないよね?
検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">
として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。
644:nobodyさん
09/08/26 13:37:23
>>643
insertタグで出来るんじゃね?
あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。
645:nobodyさん
09/08/26 14:37:50
そのキーワード毎にキャッシュしたいのならば、それをキャッシュIDにすれば。
646:nobodyさん
09/08/26 23:01:41
>>644-645
ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。
やっぱり、設計に問題あるかも・・。
647:nobodyさん
09/08/28 14:54:05 45fY5t7E
サイドバーの質問が出てるので聞きます
dbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…
部分的にデザインパターンを読み込むなど、他の解決方法はないですか?
648:nobodyさん
09/08/28 15:03:05
コントローラ側で制御すれば?
649:nobodyさん
09/08/28 15:25:18
テンプレートを数パターン用意すれば?
650:nobodyさん
09/08/28 16:29:28 45fY5t7E
>>648-648
そうですね、それがいいですね
ありがとうございました
651:nobodyさん
09/08/28 16:30:15 45fY5t7E
>>648-649でした
ありがとう
652:nobodyさん
09/08/28 17:53:20 MIAE9vSw
Smartyテンプレif文条件式で、自作のSmartyプラグイン関数を
呼び出すことはできないのでしょうか?
653:nobodyさん
09/08/28 19:07:18
できるんじゃね?
654:nobodyさん
09/09/02 05:34:35 55UeyG/q
{assign}の中で、修飾子プラグインをvalueにもたせることできますか?
{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。
655:nobodyさん
09/09/02 09:19:59
タグがモロ出し の意味がわからない。
656:nobodyさん
09/09/02 09:35:13
>>654
capture
657:nobodyさん
09/09/03 08:24:48
>>655,656
ありがとうございました
658:nobodyさん
09/09/06 21:25:22
負荷テストで調べたんだが、キャッシュって結構効いてるな
1000アクセスある場合を想定してテストしたんだが、
約10~15%ほどページの読み込みが早かった
659:nobodyさん
09/09/07 08:07:01
なにをいまさら・・
660:nobodyさん
09/09/07 22:10:32
>>659
まあ、実感するのはなかなか難しいからな。
661:nobodyさん
09/09/07 23:17:57 K7GASBY+
二次元配列を出力しようとすると、
Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
URLリンク(questionbox.jp.msn.com)
URLリンク(pcmemorogu.blog14.fc2.com) など
が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません
662:nobodyさん
09/09/07 23:25:11
アウトプットフィルタにhtmlspecialcharsが指定されてるんじゃないの?
つか二次元配列を出力しなければならない例が思いつかないけど
663:nobodyさん
09/09/07 23:49:42 K7GASBY+
>>662
ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。
if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました
お騒がせしました。ありがとうございました
664:nobodyさん
09/09/08 00:19:32
modifier.escape.phpを修正する方が早いよ
665:nobodyさん
09/09/08 00:25:48 qSoCHGpf
>>664さんはそうしてますか?
どう修正したらいいのやら、、と、調べたらありました。
URLリンク(blog.asial.co.jp)
-----
# 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さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…
666:nobodyさん
09/09/08 00:43:09
>>665
if (is_array($string)) return $string;
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。
plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。
667:nobodyさん
09/09/08 00:47:00 qSoCHGpf
>>666
詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。
668:nobodyさん
09/09/20 18:33:32
だれか公式以外でsmartyダウンロードできるところ知らない?
クソ公式落ちまくっててDLできないんだけど
URLリンク(www.smarty.net)
だれかソースくらいは分散しとけって忠告してやれよ
669:nobodyさん
09/09/20 18:55:26
落とせるじゃん
670:nobodyさん
09/09/20 19:52:57
復旧した
671:nobodyさん
09/09/24 18:00:24
初心者なのであまり良く分からないのですが、テンプレートエンジンはSmarty以外に別のテンプレートも同時使用出来るのでしょうか?
JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?
また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1~数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?
672:nobodyさん
09/09/24 18:07:40
まずテンプレート抜きでPHPを身に付けたほうがいいかと
673:nobodyさん
09/09/25 14:31:20
SmartyってPHP習得した後にやろうとするとハッキリ言って困惑するよな
何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った
674:nobodyさん
09/09/25 14:34:03
PHP習得した後にやらないでいつやるんだよ
675:nobodyさん
09/09/25 15:24:47
誰もが通る道さ・・・
それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。
676:nobodyさん
09/09/25 15:39:52
いや普通につくればphpのforeachもsmartyのforeachも必要だろ。
677:nobodyさん
09/09/25 21:46:51
そういう事言ってるんじゃないだろ。
678:nobodyさん
09/09/25 21:47:21
じゃどういうことよ
679:nobodyさん
09/09/25 22:57:18
同じforeachでも書き方が違って、最初戸惑うってことだろ?
680:nobodyさん
09/09/25 22:59:20
えっ
681:nobodyさん
09/09/25 23:47:30
ちゅう
682:nobodyさん
09/09/26 02:10:40
Smarty 3 is almost here!
[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:
683:nobodyさん
09/09/26 04:04:41
早くなるのはいいな。でも、100%書き直したとなると、いろいろ仕様変わってるのかな。
684:nobodyさん
09/09/26 09:50:48
100パー書き直したのと、仕様が変わるかどうかは直結しない話でしょう。
むしろ直結するのはバグ率。
685:nobodyさん
09/09/26 15:22:15
3触ったけどまだ重くて使い物にならないよ。パーサがまともになったせいだろうけど、レンダリングがかなり遅い。
まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。
686:nobodyさん
09/09/28 02:57:25
>>684
直結はしないがPHP周辺ではよくある話だな。
関数を修正してみたら引数の書き方が変わったでござるの巻
687:nobodyさん
09/09/28 17:38:33
Smarty以外で他にいいテンプレートって何?
688:nobodyさん
09/09/28 19:12:27
>>687
URLリンク(www.mimoi.com)
689:nobodyさん
09/09/29 19:25:53
一応技術板なんだしせめてこのぐらいは・・・
URLリンク(www.j-tsugawa.com)
690:nobodyさん
09/09/29 19:36:34
プラスチックが乾いてて、持ち上げようとしただけで割れてしまいそうだ・・・
691:nobodyさん
09/10/01 12:03:22
流れ図記号は全部○を使っているのは俺だけだろうか。
692:nobodyさん
09/10/01 18:28:48 KASc2bqu
//PHP側
$list[0]["text"] = '{ImageBox file="test.jpg"}';
//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}
独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。
指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。
693:nobodyさん
09/10/01 20:50:56
PHP側では展開されません。
694:nobodyさん
09/10/01 21:02:54
そりゃ$list[0]["text"]の内容を書き出してるだけだからな。
phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。
695:692
09/10/02 00:20:33
>>694
foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。
プラグインで実装させるとか、難しそうだ・・・
696:nobodyさん
09/10/02 00:35:40
そのImageBOXで出力されるものを$out_ImageBOXとか変数に入れ込んでおけば?
697:柏アラフォーパパン& ◆.d6LNJ2fbM.9
09/10/02 15:06:34 bCUcRsfE
dsd
698:nobodyさん
09/10/03 17:55:56
文字列をテンプレート処理出来るメソッドでも作ればいいんじゃないかね。
$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');
699:nobodyさん
09/10/03 17:57:12
$list[0]["text"] = 'test.jp';
{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}
じゃ駄目なのか?
700:nobodyさん
09/10/03 18:51:58
よほど特殊な処理をさせたいのでなければ>>699に落ち着くと思う。
まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。
701:692
09/10/04 00:06:35
>>699-700
その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。
それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました
702:692
09/10/04 00:08:43
ちなみに以下のサイトを参考にしました。
URLリンク(d.hatena.ne.jp)
>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。
703:nobodyさん
09/10/11 13:15:33 gYB28ahJ
すみません、質問です
smartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?
704:nobodyさん
09/10/11 14:25:24
{strip}{/strip}
で囲うべし。
705:nobodyさん
09/10/11 15:23:00
>>704
かっこわるいです。次の方お願いします。
706:nobodyさん
09/10/11 15:43:55
反論ではないけど、
おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。
707:nobodyさん
09/10/11 16:11:57
意図した改行を入れたい場合はどうしてるん?
<textarea>の中身とか
708:nobodyさん
09/10/11 17:59:26
>>704
おおー、そうだそれがありました
ありがとうございました
>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?
709:nobodyさん
09/10/11 18:22:54
改行を残したい箇所を
逆にliteralで囲う。
710:nobodyさん
09/10/12 00:52:20
JavaScriptとか、改行に意味を持つ言語が混在する可能性を考えると一括して{strip}するのは得策じゃない気がする。
711:nobodyさん
09/10/13 01:13:00
>>703
そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>
712:nobodyさん
09/10/13 23:52:48 B+0jNtpm
Smarty3期待アゲ
713:nobodyさん
09/10/14 00:10:46 k/3ZY/k4
質問です。
↓の、アンパサンドって何の意味があるのでしょうか?
$smarty =& new Smarty;
714:nobodyさん
09/10/14 00:27:06
参照代入
715:nobodyさん
09/10/14 00:36:04
>>713
ないよ。
PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。
716:nobodyさん
09/10/14 00:47:30
>>715
ほんとに? 俺も参照代入だよって説明どこかで読んだなぁ
あの解説ウソついたのかしら?
717:nobodyさん
09/10/14 01:06:18
4なら意味あると思うが
718:nobodyさん
09/10/14 01:30:24
>>715
つ URLリンク(jp2.php.net)
どこでそんな嘘をきいたん?
ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)
719:nobodyさん
09/10/14 03:14:45
ちょっとコード書いて実験すればわかるだろ
俺面倒だからパスね
720:nobodyさん
09/10/15 18:15:01
みんなこんな曖昧なままに済ましてきたってことはあまり使ってない機能ってことかな
俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。
721:nobodyさん
09/10/16 11:58:47
オブジェクトのリファレンスか。
使い道が思いつかんでもないが実際に
使う場面ってそうそうなさそうな。
722:nobodyさん
09/10/20 06:10:16
Smarty 3だれか使ってみた??
723:nobodyさん
09/10/20 10:43:32
使ってみた
724:nobodyさん
09/10/21 00:53:52
Smarty3微妙だなぁ・・・相変わらず癖の強いコーディングで読むの疲れる。
extendリソースがあるんだけど、使い方解る人いる?
725:nobodyさん
09/10/21 10:25:55
結局Smartyなんてassign、display、{if}、{foreach}だけで十分じゃん
というかコレが核だと思う
後は必要に応じて・・・って感じで十分だし
726:nobodyさん
09/10/21 10:59:25
Smarty3のプラグインは何故グローバル関数なんだろ?
どこら変がPHP5 OOPなんだよ
727:nobodyさん
09/10/21 22:34:20
プロパティもメソッドも全部publicは鬼だ
一方、__callでメソッドの外部化をしてる
extendリソースってどれ??
728:nobodyさん
09/10/22 01:31:12
>>727
sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw
getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ
729:nobodyさん
09/10/22 11:33:30
>>725
そんなこといったらPHPだって
730:nobodyさん
09/10/24 20:08:39
smarty使ってるレンタルブログサイトとかないの?
731:nobodyさん
09/10/25 04:49:32
>>730
あるとしてもユーザにSmartyフォーマットでのカスタマイズを許可するとは考えにくいな。
732:nobodyさん
09/10/25 08:28:37
>>730
別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。
733:nobodyさん
09/10/27 00:14:32
中身はsmartyだけど、smartyフォーマットは使わせないようにして
<%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない
大体は自前でやってるか、MovableTypeの改造版じゃないかな
734:nobodyさん
09/10/27 12:20:20
>>725
それだけしか使わないならもっと速いテンプレートエンジンあるんじゃない?
735:nobodyさん
09/10/27 12:23:42
>>734
それなんてPHP?
736:nobodyさん
09/10/27 20:55:46
カラーミーショップ プロ
URLリンク(shop-pro.jp)
ブログじゃなくてネットショップだけど、テンプレートにsmarty使ってるね
EC CUBEの改造版なんだろうけど
737:nobodyさん
09/10/27 21:04:25
Smartyでレンタルブログ運営したら重くてしかたないんじゃない?
ユーザー大量にいたらキャッシュ効かせても厳しい気がする
738:nobodyさん
09/10/28 05:06:51
それは設計の問題であり、Smatyが原因にはなり得ない。
739:nobodyさん
09/10/28 11:11:33
Smartyの設計の問題ってことですね
740:nobodyさん
09/10/28 13:46:19
おしい。Smartyを使う人の設計の問題。
741:nobodyさん
09/10/28 15:26:33
>>737
気のせい
742:nobodyさん
09/10/29 11:06:44
いい話題がありませんねー
743:nobodyさん
09/10/29 21:54:28
gooブログの有料版の説明のとこにこんな記述がある
{include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"}
パスにSmarty入ってますがな
744:nobodyさん
09/10/30 22:56:36
実際にロジックとテンプレート合わせないとテンプレート側の文法の間違い分からないの?
745:nobodyさん
09/11/01 07:20:38 ZF01kyEW
Smarty 3.0 Beta 1 Released
746:nobodyさん
09/11/01 10:57:23
>>744
確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745
モノリンガルの俺には厳しいようだ
747:nobodyさん
09/11/01 11:05:45
>>745
突撃してみるか
748:nobodyさん
09/11/09 13:54:09 jgJG5jOb
テンプレートに定義していないコード(例えば{test}など)がある場合、
Smarty errorが表示されます。
このエラーを表示しない方法はないのでしょうか?
PHPのエラー表示をしない事で対処するしかないのでしょうか?
749:nobodyさん
09/11/09 14:06:20
trigger_errorしてるところをスキップしちゃえば?
750:nobodyさん
09/11/09 20:59:58 I33d9sv+
$error_reporting
↑これ?
751:nobodyさん
09/11/11 19:01:43 0BFUpwQj
Smartyって、テンプレートの中にテンプレートを読み込むようなことできる?
ある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど
変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね
外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?
752:nobodyさん
09/11/12 03:03:02
そのレベルも調べられないお前には無理だ。
753:nobodyさん
09/11/12 07:44:56 dv0ticwo
Smarty 3.0 Beta 2 Released
754:nobodyさん
09/11/12 11:31:04
>>752
おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね
755:nobodyさん
09/11/12 12:04:54
test
756:754
09/11/12 19:22:51 SoSJwGM8
ごめん、相談させて欲しい
hoge.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(){… とやってもダメだ。
何が問題かな? ご意見よろしくお願いします
757:nobodyさん
09/11/12 19:58:44
書き間違えた
× smarty_hogeAction
○ insert_hogeAction
でやってます
758:756
09/11/12 22:52:47
どうも、自己解決しました。
お騒がせしました
759:nobodyさん
09/11/13 13:18:08
どういう解決方法?
760:756
09/11/13 14:36:48
勘違いしてたというか参考にしてたページがわかりにくかったというか、
要するに
.tplでの記述は {insert name="hogeAction"}
スクリプトファイルは insert.hogeAction.php
ファイルの格納場所は /pluginsディレクトリ
として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。
insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、
関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて
変なことやりまくってたよ。恥。
761:nobodyさん
09/11/13 14:58:34
公式マニュアル見ればよかったのにね
762:756
09/11/13 15:11:57
>>761
うん、公式がイマイチわからなくて他のサイトみてたらハマっちゃって。
今また公式見返してるけどやっぱりよくわからない
URLリンク(www.smarty.net)
「{insert} 関数の名前は、 ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。」
ってあるけど、それじゃ上手くいかなくて
smarty_insert_hogeAction() って形でやっと上手くいったからなぁ…
こっちの方が公式よりわかりやすかった、俺が物わかり悪いんだろうけど
URLリンク(www.y2sunlight.com)
763:nobodyさん
09/11/13 15:22:56
そりゃプラグインとしてファイルを自動読み込みさせてるからだ
URLリンク(www.smarty.net)
>PHP ファイル内で定義する プラグイン関数 は次のように指定します。
>smarty_type_name()
764:756
09/11/13 16:02:41
>>763
そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ
765:nobodyさん
09/11/13 16:19:30
偉そうなので教えん
766:nobodyさん
09/11/13 20:01:32
自分で試せばいいのに。
767:nobodyさん
09/11/14 14:51:09
キャッシュ効かせても速度あんまり変わらなくね?なんなのこれ
768:nobodyさん
09/11/14 19:37:58
下記のように、フォームでエラーがあればp要素を表示、なければ何も表示しない場合、
みなさんは、どこまで、どんな方法でテンプレートを利用していますか?
<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から読み出して利用すると比較的キレイな気もしますが、
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。
769:nobodyさん
09/11/15 03:44:59
>>767
Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2~3倍速くなる程度だけど。
>>768
ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。
770:nobodyさん
09/11/15 07:22:36
自分はクラスだけでやってる。
エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。
div p{ display:none }
div.error p{ display:block }
これでエラー時のテキストもデザイナー側で書ける。
親要素は
<div class='{$error.title}'>
って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。
771:潔癖プログラマ
09/11/15 10:24:50
>>769
やはり3.ですか。
ただその場合
$errors.mailに値があればいいんですけど、
値がなくifがfalseになると、その行末の改行が無視されて
次の行のインデントが崩れちゃうのが気になります。
{/if}のあとに空白1文字入れとくと回避できますが、
「よろしくないテクニック」っぽくて好きになれません。
>>703でも話題にでていたようですが、
このsmartyの仕様は気に入りません(苦笑)。
{if $errors.mail}
<p class="error">{$errors.mail}</p>
{/if}
こんな感じで3行使うのがいまのところ最善か。
テンプレートファイルがますます煩雑に…(苦笑)。
>>770
CSSのdisplayだけで制御するのは、
自分も一瞬頭をよぎったことはありますが、
やはり気持ちが悪いですごめんなさい。
あとエラー時のテキストが「入力内容をご確認ください」程度ならいいけど、
「メールアドレスが正しくありません」
「必須入力項目です」
「文字数が多すぎます」
とか丁寧に表示してあげる場合に対応しにくい気がします。
772:nobodyさん
09/11/15 21:24:49
>>770
CSS切っている環境とか携帯対応を考えた場合は向かない仕様だな
773:nobodyさん
09/11/15 22:48:09
んなもん、{$err} にしといて、
errに <p class="error">エラーメッセージ</p> ぶち込みだわ。
774:nobodyさん
09/11/16 00:55:30
>>768
汎用性やら考えると3じゃないかな。
他の方法だと、特定箇所だけ見た目を変えたい時にデザイナ側で対応しにくい気がする。
テンプレートを関数もどきとして使うような方法もありかもしれない。
// エラー表示箇所
{include file="error.tpl" error=$errors.mail}
// エラー表示テンプレート error.tpl
{if $error}
<p class="error">{$error}</p>
{/if}
775:潔癖プログラマ
09/11/16 09:18:08
>>774
なるほど。4.の別解のような感じですが、
それだとincludeするテンプレファイルまでデザイナさんに任せられるので、
複数パターンのテンプレファイルが用意できたり汎用性が高そうですね。
図らずも(?)、{if}による改行問題も、
別ファイルに追い出すことで解決できてるし、
なかなか良いかもしれません。
776:nobodyさん
09/11/16 12:51:37 tubifOLG
Smartyは遅いって意見ありますが、体感レベルで明らかに遅いですか?
1秒2秒遅くなった経験がある人いるんでしょうか?
777:nobodyさん
09/11/16 23:39:48
そんなに遅くないよ。
「遅い」って感じるのは鯖が悪いんだろ
778:nobodyさん
09/11/17 02:12:17
>>776
古いサーバPC上でキャッシュを無効にして使っても、0.001秒の処理が0.002秒になる程度。
数値的には2倍だが、体感的にはまずわからない。
素のPHPコードに比べたら遅いと言えるが、
個人的にはメリットの方が桁違いに上かな。
779:nobodyさん
09/11/17 02:16:05
>>777,778
よかったー。いかにもノロノロしてるような状態になるのかと思いました。
安心して作れます、ありがとう
780:nobodyさん
09/11/17 03:18:29
じゃキャッシュのメリットって何?って感じだな
781:nobodyさん
09/11/17 06:08:10
Smarty 3.0 Beta 3 Released
ペース早いな
782:nobodyさん
09/11/17 13:05:14
>>780
更新が少ないもしくは、更新タイミングが決っている場合にキャッシュ有効にすればいい。
大規模サイト用のチューニング項目だと思えばいいんじゃないかね。
783:nobodyさん
09/11/17 15:47:08
>>780
769にも書いたけど、負荷テストした時は効果合ったよ。
同時アクセス100とか1000の場合に。
784:nobodyさん
09/11/19 15:56:07
多数の他人に更新させる場合はキャッシュオフ?
掲示板とかね
有効にしといて書き込まれたタイミングでキャッシュ削除するのかな
785:nobodyさん
09/11/20 13:27:52
ぴーえちぴー5.3.0
りなくす
Smartyでテンプレートが無い場合に白い画面になっちゃうんで、エラーをハンドリングしたいんですけど出来ないでしょうか?
テンプレートがあるか判定なんてめんどーなことしないといけないんですかね?
786:nobodyさん
09/11/20 13:53:02
できるでしょ
そもそもfatal errorなり出るはず
787:nobodyさん
09/11/20 13:55:42
PHPのerror_reportingが0になってるとかじゃね?
788:nobodyさん
09/11/20 14:07:49 L1RHfQMx
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
みたいにやりたいです。
エラーレポ調べてみます。
789:nobodyさん
09/11/20 14:24:17 L1RHfQMx
error_reportingはnullのようです。ログに出して確認。
3に設定して見ましたが例外はキャッチできませんでした。3が間違いなんでしょうか?
>>786
それは戻り値として出るということですか?
790:nobodyさん
09/11/20 14:27:34
>>789
error_reporting(E_ALL);
791:nobodyさん
09/11/20 14:30:40
>>789
もしかしてxampp?
792:nobodyさん
09/11/20 14:32:43 L1RHfQMx
displayのソース見ましたが、エクセプションはスローされないようですね…
素直にtemplate_exist使いたいとおもいます。
>>786
voidですね。
793:nobodyさん
09/11/20 15:02:58
fatal error出るでしょに対する返答がvoidですとか謎い
794:nobodyさん
09/11/20 15:05:46 L1RHfQMx
display_errors = Off
↓
display_errors = On
httpd restart
error_reporting(E_ALL);
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
>>791
XAMPPじゃないです。それぞれソースからいれました。
795:nobodyさん
09/11/20 15:09:05 L1RHfQMx
あ、794の結果はダメでした。同じ結果で白い画面になります。
>>793
789への自己レスです。
796:nobodyさん
09/11/20 15:12:27
ちょろっとググってみたらこんなんもあった
(2)Smartyのファイルを調べてみる
画面が真っ白になった原因として、Smartyのファイルが壊れていることがあるのです。
URLリンク(xoops-manual.net)
797:nobodyさん
09/11/20 15:14:35
>>794
テンプレートファイルが無かった場合に出るエラーは
Smarty.class.phpの1591行目くらいにある
$this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"');
でしょ?
で、例外をスローさせるための案
1.当該箇所を書き換える
2.Smartyクラスを継承したMySmartyクラスを作って_fetch_resource_infoメソッドをオーバライドする
3.set_error_handler関数でwarningが発生した時に例外投げるようにする
xamppじゃないとのことなので真面目に答えてみました
798:nobodyさん
09/11/20 15:25:36 L1RHfQMx
>>797
おぉ、まさに欲しかった回答です。
ありがとうございます。
そのワーニングで間違いないです。
1…書き換えるのは好きじゃないです。
2…うーん、処理に悩みそうです。
3…これが簡単そうです。
ちょっとがんばってみます。
たすかります。
799:nobodyさん
09/11/21 10:25:34
fetchってどういうとき使うの?
800:nobodyさん
09/11/21 11:47:09
自動送信・返信メールの文面とか。
801:nobodyさん
09/11/21 13:04:20
>>800
ありがと、メールのテンプレか
就活してたときの毎ナビか何かの企業からメールに
『こんにちわ寒くなりましたね、{$username}さん』
とか、書いてあったのを思い出した
802:nobodyさん
09/11/21 15:18:41
>>798
普通は三番
サンプルは沢山見つかる
803:nobodyさん
09/11/26 11:34:27 tP8Fcb0C
しつもんです
parent.tpl中で、includeを使ってテンプレート化したヘッダを読み込ませたいと思ってるんですが
テンプレート(header.tpl)をページの種類に応じて動的に変更させたいときの手順がよくわからないです。
たとえば、動物の紹介ページでは動物の一覧を、自動車の紹介ページでは自動車の一覧をヘッダに表示したい時、
表示対象の画像や情報(動物写真/自動車写真、それぞれの名前情報など)は、includeタグの中に変数として
持ち込むしかないのでしょうか?
自分のイメージでは{include file='header.tpl' pageType='animal'}として、
変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが。
(なるべく一カ所で取得プロセスを管理したいので)
そんなのは無理で、あらかじめ親のparent.tpl=parent.phpで必要データを取得して、
それをincludeに変数で渡すしかないという結論でいいのでしょうか?
今思いついた方法は、incudeタグ中の変数でpageType='animal'と渡して、それをheader.tplで
自前のmodifierに譲渡しそこから必要データ取得→出力の流れです。
もっとスマートなやり方ないでしょうか? アドバイスお願いします
804:nobodyさん
09/11/26 15:51:29
>>803
何を言ってるのか良く分からないけど
>変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが
すればいいのでは?
805:nobodyさん
09/11/26 15:52:24
補足、テンプレートファイルで解釈するのではなくPHP側でという意味で。
806:nobodyさん
09/11/26 16:04:59
余計意味がわからない。
なぜmodifier?function作れば?
807:803
09/11/26 23:09:48 tP8Fcb0C
皆さんありがとうございます
>>804
header.tplって、単独のページとしては存在しないあくまでパーツのテンプレートなので、
index.tplに対するindex.phpの様なコントローラ(?)のファイルってheader.tplにはないのではと
考えたのですが…(header.phpにアクセスすることはないと思うので)
思い違いなのでしょうか?
>>806
勉強不足なのかもしれません、functionについて調べてみます。ありがとうございます。
808:nobodyさん
09/11/26 23:58:18
>>807
includeするんだからindex.phpでやればよいのでは?
809:803
09/11/27 01:09:41
>>808
あ、親のページでってことですか、、なるほど!
1)ページのテーマ(animalとか)を引き渡されてDBに働きかけるphpを外部化し、
2)それをheader.tplの親のanimal.php, car.phpなどに読み込んで、
3)結果をincludeタグ渡す
って感じでいいかな。
これならデータの取得部分が複数にばらけることもないのか。。
これのデータ取得の順番を変えたものがfunctionでやるってパターンかもしれない
ありがとうございます。チャレンジしてみます
810:nobodyさん
09/11/29 07:42:11 wdDHDadn
テンプレート関数プラグインのfunction(smarty.hogefunc.php)を作ったんですが、
<?php
$var = "abc";
function smarty_function_hogefunc($params, &$smarty){
global $var;
return $var;
}
?>
上記の内容で <div>text</div>{hogefunc} としてもabcを出力しません、なぜでしょうか?
パスが通ってることは確認済みで、 $var="abc"; を echo "abc" とした場合、
abc<div>text</div>の形で出力するようです。
変数のスコープのチョンボをしてるのかなと考えてはみたんですが…
function …{~} の外に書かれたものは正常に処理されないという仕様なんでしょうか?
申し訳ありませんが、ご意見宜しくお願いします
811:nobodyさん
09/11/29 13:22:28
お前は何を言ってるんだ
812:nobodyさん
09/11/29 14:16:45
return "abc";
してみればいいじゃない。
813:810
09/11/29 23:16:09
>>812
functionの中でreturn "abc"; すると、それは返すんです。
なんでかなぁ
>>811
わかりにくかったみたいですみません
814:nobodyさん
09/11/30 09:19:43
functionの中で
・print_r($_GLOBALS)してみる
・echo $varしてみる
815:nobodyさん
09/12/02 14:25:43 1PNbu+TX
URLリンク(www.youtube.com)
URLリンク(www.youtube.com)
URLリンク(www.myspace.com)
URLリンク(www.youtube.com)
URLリンク(www.myspace.com)
(URLリンク(www.apple.com))
URLリンク(www.jimbeard.com)
URLリンク(www.jimbeard.com)
URLリンク(www.jimbeard.com)
URLリンク(www.jimbeard.com)
URLリンク(www.jimbeard.com)
816:nobodyさん
09/12/04 17:16:31
smartyのキャッシュを有効にするとサイドバーにinsertしておいたプラグインが上のほうに来てしまうんだけど、何か原因わかりませんか?
ブラウザで見るソースとcacheフォルダのキャッシュを見ると、DOCTYPEタグより上にプラグインの中身が出てしまってるんです
817:816
09/12/05 18:55:21
あー、すげー馬鹿なことやってた
insertプラグインって中でechoしちゃダメなのかreturnしないとイケないのか
キャッシュオフのときは正常に見えるから気付かなかった
818:nobodyさん
09/12/07 16:47:15
だからいったじゃん
819:nobodyさん
09/12/09 10:32:51 AWY/enbH
一部キャッシュして欲しくない部分があるんですが、そこだけ{insert}にして外に出すしかないんでしょうか?
820:819
09/12/10 15:56:47
なさそうですね
821:nobodyさん
09/12/13 22:00:00
>>820
これだとだめなん?
URLリンク(www.smarty.net)
822:nobodyさん
09/12/13 23:07:04
>>821
ありがとうございました
823:nobodyさん
09/12/15 15:00:29
Warning: Smarty error: unable to read resource:
のエラーが出る際に、
自分で作った404エラーページ(のテンプレ)を読み込むことはできますでしょうか?
824:nobodyさん
09/12/15 15:56:24
とりあえずそれは404じゃない。
$error_reportingを参照したらいいとおもう。
825:823
09/12/15 16:39:30
自己解決しました。
826:nobodyさん
09/12/25 18:27:23
SmartyってWebで検索してもマニュアルかその複製しか全然情報が出てこないけど、どっかいいサイトないですか?
マニュアルはサンプルとか説明が簡単すぎて知りたい情報が出てこないのですが・・・
例えばdefault_resource_typeプロパティで、デフォルトのfile以外の値を知りたいのに、それどころかサンプルすら書かれていなかったり困ります
リソースプラグインの事ももっと知りたいんですが見つかりません
PEARでも感じましたが、なんでこう情報が少ないんでしょうかね?
マニュアルとそのコピー以外の情報が出てきません
827:nobodyさん
09/12/25 19:02:01
PEARもSmartyも情報は溢れてるよ。
無いのは君の理解力だろう。
Smartyに至ってはマニュアルあれば大抵は事足りる。
リソースプラグインに関しても、マニュアル読んでわからん人には無縁なんじゃねぇかな。
あれ以上丁寧な解説求めるなら金払ってスクールにでも通えばいい。
828:nobodyさん
09/12/25 21:36:44
ソースも結構シンプルだから
謎があったら追い掛けてみたら?
829:nobodyさん
09/12/26 18:39:45
>>827
溢れているとまではいかないんじゃないかと俺は思う
830:nobodyさん
09/12/27 00:20:26
具体的にどんな情報が欲しいの?
「俺の知りたい情報が無い」ってだけじゃ、教える側もわからんだろう
default_resource_typeにしたって、リファレンスのテンプレートリソースとリソースプラグインの項目に十二分な情報載ってると思うしなぁ
ここまで枯れた技術なのに、情報が足りないってのは調べる力か理解力が無いとしか思えないんだが
831:nobodyさん
09/12/27 11:58:44
もし情報がなかったとしたらこのスレがもっと賑わってると思うんだ
832:nobodyさん
09/12/27 13:02:13
いやそもそもSmarty使いの絶対数がすくなうわなにをするやめ
833:nobodyさん
09/12/27 19:56:19
>>831
「もし情報があったとしたら~」なら同意できるんだけどな。
ブログなんかでちょこっと取り上げているサイトはあっても
ユーザー同士で語り合うようなコミュニティは無い。
マニュアル見ろよってのは当たり前の行為で、
Smartyはそれ以上の使い方(サイト構築のテンプレ利用など)があるから
使い方やアイディアをまとめたサイトがあれば良いとは思う。
834:nobodyさん
09/12/27 21:01:57
コンパイルせず使う方法ないのかな
835:nobodyさん
09/12/29 11:19:04
>>833
コミュニティか・・・
たとえば2chにSmartyスレたてたらいいんじゃないかな
836:nobodyさん
09/12/29 11:34:24
名案だな。
837:nobodyさん
10/01/06 21:51:18
俺もSmartyのしっかりとしたサイトってないなとは思ってた
マニュアルって簡潔にまとめられてるからね
>>833の言ってるようなことは俺は分かるね
Webだけじゃなく、他にも構築する時にここどうすればいいんだっけ?って時に調べられないからね
情報が少なすぎて
838:nobodyさん
10/01/07 09:11:46
書籍は?
日本語で複数出版されてるのは恵まれてる方だと思う。
まとめサイトは自分で立ち上げて、ある程度充実させられれば
他の人も情報を集めてくれるようになるかもよ。
839:nobodyさん
10/01/07 15:20:10
Smartyの本ってある?
Smarty入門しか知らないけれど・・・?
840:nobodyさん
10/01/07 16:37:46
PHPのウェブアプリの本だとSmarty出てきたりするな
841:nobodyさん
10/01/07 23:58:21
Smartyのキャッシュ機能ってなにをキャッシュしてるん?
$smarty->assignで割り当てるのは変数だからキャッシュじゃないし
842:nobodyさん
10/01/08 00:03:40
すまんアホなこと書いた
843:nobodyさん
10/01/08 09:13:25
だから具体的にどんな情報が欲しいんだよw
WEBに溢れている情報を漁るだけで、大抵の事は答え一歩手前まで調べられるだろ・・・
844:nobodyさん
10/01/08 10:58:43
Smartyをカッコよく使いこなす方法
845:nobodyさん
10/01/08 11:57:09
2chで教えて君をしてる時点でかっこわるい
846:nobodyさん
10/01/08 12:11:21
もっとSmartyをスマートに使う方法
847:nobodyさん
10/01/09 17:17:11
使いこなし方まではWebで出てこないな、確かに
848:nobodyさん
10/01/17 19:36:43
Smarty使う場合はdisplay()以降に処理は記述しない方が吉?
849:nobodyさん
10/01/18 03:14:17
凶
850:nobodyさん
10/01/18 11:28:14
別にそんなことはないかと思うが
2枚以上のテンプレートをdisplay()する場合もあるし
851:nobodyさん
10/01/18 14:06:09 AGLkXiCO
smarty2では
$smarty->assign('pref', array('01' => '北海道', '02' => '青森'));
{$pref.01}
で北海道が取れていたのだけど、
Smarty3Beta板では
{$pref['01']}
としないと取れなくなったのは仕様変更ですか?
852:nobodyさん
10/01/18 14:06:25 YiIR+7Mx
質問です。
$hoge = array(
array("name" => "aaaaa", "value" => 1),
array("name" => "bb", "value" => 2),
array("name" => "ccc", "value" => 3),
array("name" => "dddddd", "value" => 4)
);
$fuga = array(
array("value" => 2), array("value" => 4)
);
上記二つのような配列変数があります。
Smartyを使って、$hogeの内容をチェックボックスとして表示しようと思っています。
また、$fugaの内容と一致するvalueの部分を選択状態にしておきたいです。
(例)
□aaaaa ■bb □ccc
■dddddd
テンプレート側でどのように指定すれば、上記方法を実現できるでしょうか。
{foreach}を使おうと思ってるんですが・・・
853:nobodyさん
10/01/18 14:25:16
>>852
html_checkboxes使うの?それとも手動でやるの?
854:nobodyさん
10/01/18 15:07:42
>>853
手動です
html_checkboxesのほうがやりやすいのでしょうか?
855:nobodyさん
10/01/18 15:59:06
>>854
foreachでやるなら普通にループさせて
要素を出すところでifで比較してchecked入れればいいんじゃない?
$fugaのデータ構造がそのまま使えなくてちょい面倒だけど
予め使いやすいように変換するか、更にループさせて全件比較すればいいかと
856:nobodyさん
10/01/20 22:11:47 q80CCbb+
以下のようにinterfaceによる拡張を試しています。
interface iSmarty { const MY_NAME = "foo"; }
class MySmarty extends Smarty implements iSmarty {/*設定*/}
{$smarty.const.MY_NAME}
値fooが表示されることを期待したのですが、MY_NAME(定数名)が表示されてしまいます。
マニュアルの{$smarty.const}の項を見ると、defineによる例が掲載されていて
確かにdefineで定義されていれば正しく値が表示されます。
バージョン2.1なのでちょっと古いのかなとも思うんですが、
php5のコードを追加するのは無理でしょうか。
857:856
10/01/20 23:35:47
すみません、しばらく考えていたのですが、断念することにしました。
拡張も考えてみたのですが、もとがphp4ですから、こちらのPHP環境と合わせて考えると
サブクラスで定義した"クラス定数"をテンプレートから呼び出すことは
おそらく無理と判断しましたm(_ _)m
確かなことは言えませんが、クラスを変数で参照できるphp5.3以降でなら
プラグイン等で機能追加できるような気がします。
858:nobodyさん
10/01/21 04:40:11
php4だから無理ってどういうこっちゃ?どこに書いてあるん?
マニュアルの例はもうちょっと落ち着いて見直してみたほうがいいと思うけど
859:nobodyさん
10/01/29 18:46:34
インサートプラグインの中でもテンプレート指定してキャッシュさせてるけど
インサートプラグインが1ページに5、6個あるとかなり速度低下してきてしまう
860:nobodyさん
10/01/30 00:48:00
>>859
そんな、あなたにsmarty3の出番ですよ。
プラグインを書く必要ないぞ。
861:859
10/01/30 10:34:45
え、そうなの?プラグイン書かなくていいってどういうことですか?
今はindex.tplに{insert name="hoge"}って書いて
[insert.hoge.php]
function smarty_insert_hoge($params, &$smarty) {
if(!$smarty->is_cached('plugin_hoge.tpl', "plugin|hoge")) {
DBからデータを取ってきてassign
}
return $smarty->fetch('plugin_hoge.tpl', "plugin|hoge");
}
DBに更新を加える時にclear_cacheという感じでやってるんですが、作り方としておかしいですか?
こういうインサートプラグインが増えてくると、is_cachedとfetchをその分しなきゃいけないんで遅くなってると思うんですが
smarty3だと改善されてるんでしょうか?
862:nobodyさん
10/01/30 11:59:30
Smarty3だと{nocache}で囲むだけでいいらしいよ。だから、インサートプラグインいらず。
863:nobodyさん
10/01/30 12:29:50
nocacheなら↓で実現できたヤツですね、最初からあるのとないのでは大違いでしょうが。
URLリンク(www.smarty.net)
864:nobodyさん
10/01/30 14:12:57
Smarty2より遅いSmarty3なんてゴミにしかなりえない
865:859
10/01/30 14:45:10
>>862
キャッシュしたいのでnocacheは用途が違う気がします
866:nobodyさん
10/01/30 15:09:07
あらかじめオブジェクトをシリアライズしておいて、それをアンシリアライズして読めば早いよってことなんだけど
方法がよく分からない。
結局require_once "Smarty.class.php"しなきゃいけないんだよね?
意味分かる人教えてください
Smartyの読み込みコスト(時間)を削減する
URLリンク(code.xenophy.com)
867:nobodyさん
10/01/30 16:02:16
意味わかんない記事ですね
効果も0.01秒だし
868:nobodyさん
10/01/30 16:56:45
0.01秒って結構大きいんじゃね?
869:nobodyさん
10/01/30 16:57:37
なんで?
870:nobodyさん
10/01/30 17:23:46
あれ?デカくね?
871:nobodyさん
10/01/30 17:31:09
なんでと聞いているんだ
872:nobodyさん
10/01/30 18:09:30
1回表示するたびに0.01秒だろ
うちのサイトだと0.01秒早くなったら速度2倍だぜ
873:nobodyさん
10/01/30 18:11:35
感じられねーだろw
874:nobodyさん
10/01/30 21:26:36
>>873
濡れ濡れよ
875:nobodyさん
10/01/31 16:37:31 tjv1ZgGA
compile_dirのディレクトリがなかったり、書き込み権がない場合
コンパイルエラーになりますが、たまにパーミッション設定を忘れたりして
こういう現状が度々あります。
忘れず確認すれば良い事ですが、なにか効率の良い方法はないでしょうか?
876:nobodyさん
10/01/31 16:53:46
どんな風にできたらいいの?
877:nobodyさん
10/01/31 17:59:24 tjv1ZgGA
・コンパイルエラーを出さない
・コンパイル用のディレクトリがない場合、自動的に作成
と言うぐらいしか思いつきません
後者はis_dirでチェックすればいいと思うのですが、前者は方法自体わかりません・・・
878:nobodyさん
10/01/31 18:01:14
>>877
エラーメッセージでファイルを検索→当該行をコメントアウト
879:nobodyさん
10/02/01 13:24:00
>>878
そんな凄い事が出来るんですか?
当該行をコメントアウトって、文字列の置換とは違うんですよね?
880:nobodyさん
10/02/02 14:53:16
Smarty2.6からSmarty3への移行ってlibsの中身変えるだけでいいんですか?
881:nobodyさん
10/02/02 14:54:00
えっ?
882:nobodyさん
10/02/02 16:28:53
string:リソースとforが欲しいだけなんだが、Smarty2に入れてくれ
883:nobodyさん
10/02/03 00:29:48
>>880
互換性はあるとかないとか、
廃止される構文もあるとかないとか
884:nobodyさん
10/02/03 01:26:14
stringリソースは自分で作れ。
PHPっぽく数学処理出来るのはいいよね。Smarty3。
開発に時間かけ過ぎてて、既に腐り始めている気がするけど。
extend欲しいな。
885:nobodyさん
10/02/05 12:00:27 1wZyvV1Q
default_modifiersでescape:htmlやってたらforeachでエラー出るとか{debug}ができないとか
そういうのは最新版では治ってるの?
886:nobodyさん
10/02/05 16:09:07
debugとescapeプラグインを数行書き換えるだけで治る。
887:nobodyさん
10/02/05 18:17:12
Smarty3のstringリソースってキャッシュしてくれないのか、ファイルの更新日時とか取得できないから当たり前か・・・
888:nobodyさん
10/02/06 16:55:05
smartyとquickformの組み合わせでdefault_modifiers escapeするとフォームが全部エスケープされてしまうね
じゃ、nodefaultsにすりゃいいかというと、フォームのユーザが追加できるようにしている場合、
デフォルトの値(フォームのセレクトとか)にエスケープしたい文字があると途端に無理が出る
結局ロジック側でh()するしかなくなる
889:nobodyさん
10/02/09 13:31:36 Af+mgrun
Smartyで画像の出力ってできる?
"Content-Type: image/jpeg"的な意味で。
890:nobodyさん
10/02/10 09:26:09
プラグイン作れば?
891:nobodyさん
10/02/10 11:02:43
>>889つーか、ここは正攻法でMLに投げるんだ!
892:nobodyさん
10/02/12 16:19:32
>>889
テンプレートファイルの内容を画像データにすればいいんじゃないかな・・・
893:nobodyさん
10/02/12 21:11:24
パーサーが変なの拾って壊しちゃうかと
displayやfetchしてる所でget_file_contentするだけだろ
しょーもな
894:nobodyさん
10/02/12 21:12:15
関数名違うかも
895:nobodyさん
10/02/17 16:31:45
file_get_contents()だな。
確かにSmartyが有用なケースが思いつかない。
896:nobodyさん
10/02/20 12:34:03
MTってSmarty使ってるのか
897:nobodyさん
10/02/20 12:44:55
気のせいか
898:nobodyさん
10/02/20 17:16:25 0jUjLrgq
ファイルではなく
変数に格納されたテンプレートを使うために
変数用のリソースプラグインを使って試行錯誤してるのですが
相談させてください。
このリソースプラグインに変数(テンプレートの内容)を渡す方法ですが
2つ思いつきました。
1つは
$hoge = "ここにテンプレートの内容";
$smarty->fetch("var:hoge");
のように変数名を渡して
プラグイン側で グローバル変数の$hogeの内容を取得。
しかしグローバル変数を使うというのがちょっと気になります。
もう1つの案は
$smarty->fetch("var:{$hoge}");
としてテンプレートの内容自体を渡す方法。
しかしこれだと長い名前の中間ファイル(template_cにできるファイル)
が作られてなんだか気持ちが悪いです。
毎回コンパイルでいいので中間ファイルは作られないほうがいいのですが
それもできない感じ。
みなさんはどうしてますか?
899:nobodyさん
10/02/20 22:01:34
リソースプラグイン側で
グローバル変数じゃなくてSmartyにassignされた変数を見るようにすればいいんじゃねーの?
900:898
10/02/24 09:57:22
>>899
規制でかけなかった・・・
結局Smartyを拡張してプロパティを追加したら
プラグイン側で普通に見れました
>>899
ありがとうございます
なるほど、それは気づきませんでした
そのほうが手軽ですね
901:nobodyさん
10/03/03 01:14:47
Tenjin使い始めた。smartyより3倍早いらしい。
フレームワークをやったことなかったけど、比較的わかり易い。
902:nobodyさん
10/03/03 16:18:29
URLリンク(www.kuwata-lab.com)
14-15ページを見た感じだと制御はPHPそのままで
PHPタグ外部分はわざわざechoするのか・・・
903:nobodyさん
10/03/04 15:15:33 jG8+9EsN
Smarty3はいつになったら出るんだよ。
904:nobodyさん
10/03/05 09:36:42
遅い3はいらない
905:nobodyさん
10/03/06 00:22:27 3cIJcZyy
Smartyのoutputfilterで文字コードをUTF-8からSJISに変換する処理を入れています。
こんな風に
$smarty->register_outputfilter("filterSjis");
function filterSjis($buff, &$smarty) {
return mb_convert_encoding($buff,"SJIS-win","UTF-8");
}
ブラウザで表示させると頭に「?」が入ってるんだけどこれはなぜでしょうか?
Smarty 2.6.26 PHP 5.3.2 です
906:nobodyさん
10/03/06 01:54:29
UTF-8テンプレートにBOMが入ってんじゃねーの?
907:nobodyさん
10/03/06 08:38:23
ありがとう
その通りでした
908:nobodyさん
10/03/06 10:16:09
自己中マルチはシネよ
909:nobodyさん
10/03/06 11:56:50
すまんね PHPはあんまり慣れてないんだ
普段はGAEでjavaなんだよ
これあげるからシネとかいわないで
URLリンク(mix-tube.appspot.com)
910:nobodyさん
10/03/06 12:20:22
そういう問題じゃないけど許す
911:nobodyさん
10/03/06 13:54:43
さらに宣伝かよ
912:nobodyさん
10/03/07 07:30:25
β8はfinal betaらしいので、次はRC版か
913:nobodyさん
10/03/11 09:30:07
俺の勉強不足かも知れないんだけど、
cache_lifetimeって以下の仕様じゃないんだね
10秒に設定→10秒経ってるキャッシュファイルは全て削除
914:nobodyさん
10/03/11 17:23:06 TZPJnNmb
削除されるわけないだろ。
915:nobodyさん
10/03/12 13:20:51
じゃ、キャッシュ溜まりまくるけど
どの段階でclear_all_cacheするの?
916:nobodyさん
10/03/12 15:48:13
>>913
同じく削除されると思うのが普通な気がする
セッション管理みたいに
>>915
必要なら好きなときにどうぞ
917:nobodyさん
10/03/12 17:14:35
削除というよりは、要求されたページのキャッシュがlife timeより古かったら
再生成(上書き)されると思ってる。
つまり、要求されなきゃそのまま放っておかれる(わざわざ消さない)と。
918:nobodyさん
10/03/12 21:49:30
マニュアル良く読めw
919:nobodyさん
10/03/13 05:31:12
>>918
ん?
920:nobodyさん
10/03/13 13:02:36
cache_lifetime = -1;にしてるオレには関係のない話だな
921:nobodyさん
10/03/13 15:04:04
負荷だいじょうぶか?
922:nobodyさん
10/03/13 16:11:14
-1は無期限でキャッシュし続ける
0が毎回作成
CMSみたいに管理画面から更新するなら、
そのタイミングで必要な分だけキャッシュを削除すればいいしね
923:nobodyさん
10/03/13 16:11:51
×キャッシュし続ける
○キャッシュを使い続ける
でした