【PHP】 Smarty 隔離スレ 【テンプレート】
at PHP
[前50を表示]
550:nobodyさん
09/07/30 22:46:24
>>549
それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。
551:nobodyさん
09/07/30 23:54:04
というかDBなんてある意味ファイル管理をラップしたようなもんだから
DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。
そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。
552:nobodyさん
09/07/31 00:03:20
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ
553:nobodyさん
09/07/31 01:55:56
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか?
って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど
554:nobodyさん
09/07/31 02:04:43
>>552
制作、運用、実行コスト、全てが大きく変わるわw
検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。
555:nobodyさん
09/07/31 02:43:31
ナンセンスってほどでも無いっしょ
ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし
556:nobodyさん
09/07/31 03:11:10
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは
DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない
むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック
557:nobodyさん
09/07/31 03:49:06
>>555
だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。
>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。
558:nobodyさん
09/07/31 04:25:59
>>557
ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ
559:nobodyさん
09/07/31 04:42:31
>>558
FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。
・DBコネクション等の負荷が無い
・当然PHP側のコードもシンプル
・SVN等のバージョン管理システムが使える
・使い慣れたエディタで直接編集が可能
・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
・当然複雑な管理画面も不要になる為実装コストは激減
これらはFSなら特別な実装は不要。
君はDBで実装出来るか?
検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。
逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。
560:nobodyさん
09/07/31 05:22:21
定量的の意味知ってるか?
561:nobodyさん
09/07/31 05:56:21
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。
562:nobodyさん
09/07/31 10:54:30
まぁ、喧嘩するなや。
第三者からみたら、有益な討論してるように感じるんだから。
563:nobodyさん
09/07/31 11:13:51
>>561
低学歴乙
564:nobodyさん
09/07/31 11:35:24
>>562
有益かはともかくSmartyの議論ではなさそうだな。
565:nobodyさん
09/07/31 12:20:19
>>564
Smartyの使い方に関する議論だろ
566:nobodyさん
09/07/31 15:05:22
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ
567:nobodyさん
09/07/31 16:10:10
逆だと思うが。PHPを使えるプログラマー用の技術だろ。
568:nobodyさん
09/07/31 18:56:10
>>563
答えられない質問には煽る…典型的な厨ですね。
定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。
569:nobodyさん
09/07/31 19:46:53
>>568
俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた
> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
> ・当然PHP側のコードもシンプル
プラグインで済むから同じ
> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ
> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと
> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで
> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん
> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分
テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。
570:nobodyさん
09/07/31 19:49:07
ファイル操作用のPHPコードと
DB操作用のSQLでは、後者の方が自由度高いと思うけどな
571:nobodyさん
09/07/31 20:49:32
>>568
煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?
572:nobodyさん
09/07/31 20:58:48
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか
573:nobodyさん
09/07/31 21:21:59
>>571
「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?
574:nobodyさん
09/07/31 23:21:12
>>569
> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。
> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。
> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。
> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?
> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?
> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。
> phpMyAdminで十分
上に同じ。
> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。
>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。
575:nobodyさん
09/08/01 01:20:41
だから、いちいち煽り入れるなって
お前がせっかく書いたレスも陳腐な物になるぞ
576:nobodyさん
09/08/01 23:36:43
>>571はどこいっちゃったの?
577:nobodyさん
09/08/02 01:41:46
お前がいい加減にしろ
578:nobodyさん
09/08/02 01:48:38
>>571はどこいっちゃったの?
579:nobodyさん
09/08/02 03:05:41
まぁ普通はDBを使うメリットなんて無いって事さ
DB憶えたての頃は俺も無闇にDB化したがったものだ
580:nobodyさん
09/08/03 01:13:56
じゃ、大手ポータルサイト(ブログとか)って
テンプレートをDBに入れずにファイルで読み書きしてるのかな?
581:nobodyさん
09/08/03 03:29:39
そんな極少数の大規模案件を例えに出されてもなぁ・・・
使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)
要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。
582:nobodyさん
09/08/03 09:46:29
>>581
DB使うメリットないとか言っといて
結局要件しだいかよw
583:nobodyさん
09/08/03 10:57:19
>>581
つまり、結局は「DB化した方が遥かに楽」なケースが”ある”ということですね
584:nobodyさん
09/08/03 17:52:34
>>582-583
最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw
揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。
585:nobodyさん
09/08/03 18:04:36
っていうか大手CMSサイトってPHP+Smartyなの?その時点でその話は破綻している。
586:nobodyさん
09/08/03 18:24:53
どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。
587:nobodyさん
09/08/03 18:59:14
平行線にすらなっていない。
DB厨がファビョっているだけだ。
588:nobodyさん
09/08/03 20:12:30
ファビョってるのはむしろお前だろ?1人で戦っているつもりだろうがw
589:nobodyさん
09/08/03 21:44:15
いちいち煽りに反応しなくていいからw
とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?
(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!
590:nobodyさん
09/08/03 22:23:10
「要件次第でDB使う」でみんな納得。
丸く納まってよかった。
591:nobodyさん
09/08/03 22:34:30
以下Smarty3を語るスレになりました。
開発ペース遅すぎるよね。
592:nobodyさん
09/08/04 00:10:08
htmltemplate.php で十分だしー
593:nobodyさん
09/08/04 00:13:10
>>590
すまんけどどういう要件ならDB、FSを使うべきかまとめてくれないか?
594:nobodyさん
09/08/04 01:04:56
>>593
大規模案件ならDB でいいんじゃないか。
595:nobodyさん
09/08/04 01:51:48
>>593
基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。
596:nobodyさん
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
キャッシュ効かせても速度あんまり変わらなくね?なんなのこれ
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4982日前に更新/245 KB
担当:undef