【PHP】 Smarty 隔離スレ 【テンプレート】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/02/02(土) 00:21:09ID:6cKcKeTp0521nobodyさん
2009/07/25(土) 01:34:19ID:???更新したらキャッシュ切らないとだめなの?
0522519
2009/07/25(土) 05:09:32ID:???Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。
519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。
DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。
0523nobodyさん
2009/07/25(土) 11:35:37ID:???テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな
0524nobodyさん
2009/07/26(日) 02:40:29ID:???ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?
俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!
0525nobodyさん
2009/07/26(日) 03:26:35ID:???その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?
0526nobodyさん
2009/07/26(日) 04:04:17ID:???毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。
コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。
0527nobodyさん
2009/07/27(月) 11:12:36ID:???0528nobodyさん
2009/07/27(月) 11:30:56ID:???0529nobodyさん
2009/07/27(月) 12:48:51ID:???0530nobodyさん
2009/07/27(月) 17:40:06ID:???キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。
上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?
0531nobodyさん
2009/07/27(月) 22:41:03ID:???0532nobodyさん
2009/07/28(火) 10:37:13ID:???できるならすごい便利なんだが
0534nobodyさん
2009/07/28(火) 15:09:38ID:???Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。
0535nobodyさん
2009/07/28(火) 16:09:45ID:???いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?
0537nobodyさん
2009/07/28(火) 20:41:09ID:???CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。
制作の手間暇考えたら、メリットは薄いと思うけど。
0538nobodyさん
2009/07/29(水) 22:00:38ID:???ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。
0539nobodyさん
2009/07/30(木) 00:20:18ID:???0541nobodyさん
2009/07/30(木) 12:13:33ID:???0542nobodyさん
2009/07/30(木) 12:16:56ID:???0543nobodyさん
2009/07/30(木) 16:35:27ID:???デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。
0544nobodyさん
2009/07/30(木) 16:40:57ID:???0545nobodyさん
2009/07/30(木) 17:12:18ID:???0546nobodyさん
2009/07/30(木) 18:40:48ID:???0547nobodyさん
2009/07/30(木) 18:50:56ID:???0548nobodyさん
2009/07/30(木) 18:58:17ID:???ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。
0551nobodyさん
2009/07/30(木) 23:54:04ID:???DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。
そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。
0552nobodyさん
2009/07/31(金) 00:03:20ID:???0553nobodyさん
2009/07/31(金) 01:55:56ID:???って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど
0554nobodyさん
2009/07/31(金) 02:04:43ID:???制作、運用、実行コスト、全てが大きく変わるわw
検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。
0555nobodyさん
2009/07/31(金) 02:43:31ID:???ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし
0556nobodyさん
2009/07/31(金) 03:11:10ID:???DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない
むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック
0557nobodyさん
2009/07/31(金) 03:49:06ID:???だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。
>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。
0559nobodyさん
2009/07/31(金) 04:42:31ID:???FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。
・DBコネクション等の負荷が無い
・当然PHP側のコードもシンプル
・SVN等のバージョン管理システムが使える
・使い慣れたエディタで直接編集が可能
・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
・当然複雑な管理画面も不要になる為実装コストは激減
これらはFSなら特別な実装は不要。
君はDBで実装出来るか?
検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。
逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。
0560nobodyさん
2009/07/31(金) 05:22:21ID:???0562nobodyさん
2009/07/31(金) 10:54:30ID:???第三者からみたら、有益な討論してるように感じるんだから。
0566nobodyさん
2009/07/31(金) 15:05:22ID:???0567nobodyさん
2009/07/31(金) 16:10:10ID:???0568nobodyさん
2009/07/31(金) 18:56:10ID:???答えられない質問には煽る…典型的な厨ですね。
定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。
0569nobodyさん
2009/07/31(金) 19:46:53ID:???俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた
> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
> ・当然PHP側のコードもシンプル
プラグインで済むから同じ
> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ
> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと
> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで
> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん
> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分
テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。
0570nobodyさん
2009/07/31(金) 19:49:07ID:???DB操作用のSQLでは、後者の方が自由度高いと思うけどな
0572nobodyさん
2009/07/31(金) 20:58:48ID:???0574nobodyさん
2009/07/31(金) 23:21:12ID:???> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。
> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。
> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。
> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?
> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?
> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。
> phpMyAdminで十分
上に同じ。
> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。
>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。
0575nobodyさん
2009/08/01(土) 01:20:41ID:???お前がせっかく書いたレスも陳腐な物になるぞ
0577nobodyさん
2009/08/02(日) 01:41:46ID:???0579nobodyさん
2009/08/02(日) 03:05:41ID:???DB憶えたての頃は俺も無闇にDB化したがったものだ
0580nobodyさん
2009/08/03(月) 01:13:56ID:???テンプレートをDBに入れずにファイルで読み書きしてるのかな?
0581nobodyさん
2009/08/03(月) 03:29:39ID:???使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)
要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。
0584nobodyさん
2009/08/03(月) 17:52:34ID:???最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw
揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。
0585nobodyさん
2009/08/03(月) 18:04:36ID:???0586nobodyさん
2009/08/03(月) 18:24:53ID:???どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。
0587nobodyさん
2009/08/03(月) 18:59:14ID:???DB厨がファビョっているだけだ。
0588nobodyさん
2009/08/03(月) 20:12:30ID:???0589nobodyさん
2009/08/03(月) 21:44:15ID:???とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?
(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!
0590nobodyさん
2009/08/03(月) 22:23:10ID:???丸く納まってよかった。
0591nobodyさん
2009/08/03(月) 22:34:30ID:???開発ペース遅すぎるよね。
0592nobodyさん
2009/08/04(火) 00:10:08ID:???0595nobodyさん
2009/08/04(火) 01:51:48ID:???基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。
0597nobodyさん
2009/08/04(火) 09:05:44ID:???0599nobodyさん
2009/08/04(火) 11:24:56ID:???0600nobodyさん
2009/08/10(月) 18:05:18ID:euq/7Zv+テンプレートファイル内で、{php}〜{/php}って形で、phpのプログラムを実行出来ますが、
この「〜」の部分で、assignされた変数を操作することは出来ないでしょうか
{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}
私の名前は{$name}です
こんな感じで…
よろしくお願いします。
0601nobodyさん
2009/08/10(月) 18:19:27ID:???やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc
0602nobodyさん
2009/08/10(月) 18:26:43ID:euq/7Zv+ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ
0603nobodyさん
2009/08/10(月) 18:35:23ID:???もしかしてこんな感じで解決しない?
if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);
0604nobodyさん
2009/08/10(月) 18:43:35ID:euq/7Zv+ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!
0606nobodyさん
2009/08/10(月) 19:21:31ID:???テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw
アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。
0607nobodyさん
2009/08/10(月) 19:38:15ID:???例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…
でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。
0608nobodyさん
2009/08/10(月) 20:32:12ID:???if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";
って書いて、$ary変数だけassignすればいいんじゃない?
その程度の表示分岐処理なら、テンプレート側でもOKかと思う。
{$ary.faxNum|default:"-"}
でいけない?
0609nobodyさん
2009/08/10(月) 20:50:18ID:???ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。
0611nobodyさん
2009/08/10(月) 23:13:31ID:???{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…
0612nobodyさん
2009/08/10(月) 23:15:44ID:???0614nobodyさん
2009/08/11(火) 01:09:27ID:???0616nobodyさん
2009/08/11(火) 03:33:31ID:???assignタグすら知らんかったのか。
0617nobodyさん
2009/08/11(火) 12:14:27ID:???0618nobodyさん
2009/08/12(水) 05:56:44ID:???[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が出力されます
0619nobodyさん
2009/08/12(水) 06:23:13ID:???0620nobodyさん
2009/08/12(水) 08:01:33ID:???{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}
で中身表示テストしてみ。
0621nobodyさん
2009/08/12(水) 10:23:00ID:u9+iooGY0=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);
■ このスレッドは過去ログ倉庫に格納されています