【PHP】 Smarty 【テンプレートエンジン】 第2章
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/03/29(月) 14:41:04ID:???具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、
これらの役割を違う人間が受け持っている場合に最適だと言えます。
0741nobodyさん
2011/01/27(木) 09:29:51ID:???すまん。FWの打ち間違いだった・・・
ちなみに動的サイトというのは、トップページやサイドバーで
情報が変わるポータルサイトだな。ブログはキャッシュが効くから違うと思う。
>>734
前者はもちろんデバッグして検証した上での意見だよね?
リソースは別にしても実行速度には明らかに違うが出るよ。秒単位で。
そりゃ、多重鯖構造にして負荷分散したら鯖自体の負荷を下げられるだろうけど。
後者は俺が使っているCakePHPの問題なのか、FWに依存した書き方になるんだが。
Cake+Smartyの書き方を覚えなければ行けないから、通常より時間がかかる。
どちらか一方だけの取得では無理。使いこなす・こなせないの問題じゃないだろ。
0742nobodyさん
2011/01/27(木) 09:58:07ID:???0743nobodyさん
2011/01/27(木) 14:03:42ID:???{}
になってるけど、
これって変更できんの?
0744nobodyさん
2011/01/27(木) 14:13:02ID:???0745nobodyさん
2011/01/27(木) 14:17:24ID:???0746nobodyさん
2011/01/27(木) 14:30:44ID:???さんくす!
<smarty />で使ってみたけど見やすくなるね
<smarty $test />とか
sectionしてみたら
<smarty section name=cnt loop=10 />
a
<smarty /section />
閉じタグ変になってワロタwwwww
これって<smarty :section />みたいに変更できないのかな・・・?
0747nobodyさん
2011/01/27(木) 21:14:42ID:???信じられないかもしれないが、実はSmartyはPHPで書かれている。
つまり・・・PHPが書ければ自分の好きなように改造し放題ってことさ!
0748nobodyさん
2011/01/27(木) 21:38:50ID:???>リソースは別にしても実行速度には明らかに違うが出るよ。秒単位で。
Smartyが原因で、秒単位で動作が変わる事はありえない。
そんなサーバでSmartyより大規模なcakeが動くとは思えない。
確実にどこかで設計ミスしてるでしょ。
>後者は俺が使っているCakePHPの問題なのか、FWに依存した書き方になるんだが。
設計ミス。
普通はSmarty側からは、Cakeを意識しないように変数なりをassignしてやる。
0749nobodyさん
2011/01/27(木) 21:47:34ID:???>>FM×Smartyの処理が重なって凄い処理時間になってるぞ。
>>キャッシュ使っても動的なサイトだとあまり意味無いと思うし。
>ちなみに動的サイトというのは、トップページやサイドバーで
>情報が変わるポータルサイトだな。ブログはキャッシュが効くから違うと思う。
トップページやサイドバーが情報変わるからキャッシュ使っても意味ないというのは、
FW使わなくても重さは同じでは?
SmartyのキャッシュはSmarty記法のパース結果をキャッシュしてくれるものだと思うけど。
FW/Smarty関係なくない?
0750nobodyさん
2011/01/27(木) 22:34:43ID:???「ありえない」っていうけど、もちろん実際に試した上での意見だよね?
俺にはあんたが机上の空論で「そんなわけない!」って
現実見ようとしていないだけにしか受け取れないんだけど。
>>749
PHP→Cake→Smarty と PHP→Cake
と、どちらの方が処理が少なくなるかを考えたら、違いが出て当然だと思うけど。
俺が言う事に対して批判する奴は実際に試した事あるのか?
xdebugなり、Apacheのベンチなり試す方法はいくらでもあるだろ。
確かに設計は悪いかも知れないが、自分の作業した範囲・経験でしか話せないし、
他のみんなはどうか?と思ってググれば「重い」と出る。
ならやっぱり重いよなーと思って書いたまでに過ぎない。
別にFWもSmartyも批判するつもりはないよ。
ただ、重くなるよねって言いたいだけで。
0751nobodyさん
2011/01/27(木) 22:40:47ID:???いやだから、
@FW×Smartyは処理が遅い→Aキャッシュを使えば解決する→Bしかし動的な部分についてキャッシュは効果ない
という君の話に対して
C動的な部分はFW使おうが使わまいが毎度動的に生成するんだからFW関係ないんじゃないの?
(FW使わないときに「動的な部分が速くなる」なら話は別だけど)
と疑問に思っただけなんだが、どうなのよ。
俺が何か勘違いしてたら申し訳ないが。
0752nobodyさん
2011/01/28(金) 03:50:06ID:???実際に試した上で>>734の結論なんだが。
xdebugのプロファイラログを検証した事もあるし、
APC切って単純なPHP単体でのベンチもした事ある。
Smarty導入が負荷になる事は認めるが、負荷で言うならCakeの方が数倍高い。
それなのにSmarty導入するだけで「秒単位」で遅くなる、
ってのは他の部分に何らかの欠陥があるとしか・・・
もし本当ならxdebugのプロファイルログ出してみ?
具体的にどのメソッドに時間かかってて、それがシステム全体の何%の負荷になってる?
0753nobodyさん
2011/01/28(金) 04:11:35ID:???とりあえず参考までに俺のベンチ結果あげとくな、
糞みたいなサーバのxdebugプロファイルログを、
WinCacheGrindで閲覧して調べた結果。
・環境
ZendFW(MVC、DB、Session)使用
APCやMemcachedは無効
Smartyでは文字コード変換フィルタかまし、
ヘッダフッタを別ファイルからincludeする。
・結果
トータル処理に846msかかる
その内、Smarty全体の処理が75msを閉めており、
その内、18msがテンプレートコンパイル、12msがinclude処理となっている。
コール数ではassign、modifiler系が多いが、トータルでも5ms以下となっている。
どんなに複雑なコード書いてもSmartyで1000ms越えるのは難しいな・・・
もしかしてテンプレート内にDBに接続してデータ取得するようなコード書いてね?w
0754nobodyさん
2011/01/28(金) 21:38:56ID:???ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい>>750
「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
0755nobodyさん
2011/01/29(土) 12:45:23ID:???他人が『重い』って書いてたからそれを真に受けたの?
その『重い』にもレベルがあるでしょ
『●●っていうケータイ重いよ』というのを聞いて、1kgくらいあると本気で思い込むようなものだよ
それ説明書とか充電器とか合わせた重量測ってるだろwwwそんな感じ
秒単位で遅くなるんなら誰も使ってません、まずそこに気付こうよ
0756nobodyさん
2011/01/29(土) 12:58:04ID:???0757nobodyさん
2011/01/29(土) 20:23:30ID:???今そんな事言ったら逆に笑われそうだよね
0760nobodyさん
2011/01/29(土) 23:04:34ID:???VistaなんてSP1で軽量化に成功したのに重い重い言われてるよ。
SP1で改善されたと言っても笑われるだけ。
0762nobodyさん
2011/01/30(日) 16:53:54ID:???そういう意味なら俺の解釈が間違ってた。すまん。
>>752-753
そりゃ、最小構成でベンチとっても秒単位で差なんて出ないだろ。
俺は例で「ポータルサイト(動的サイト)」って出したけど、
そこまでの規模についての話をしてるんだよ。
>>755
>>750を読んでくれ。自分で「重くね?」って思ってググったら他人の投稿もあった。
だから俺の印象は間違ってなかったなと思ったに過ぎない。
もちろん、お前らの環境と俺の環境は違うから、コード時代に問題があるという
のもわかる。だが、頭ごなしに「FW+Smartyが重いはずはない!」って
解釈するのはいかがな物かと言いたいだけだ。
なぜか自分が大好きな物を批判されるとそれを認めたくない奴がいるが、
俺もSmartyは使ってるし、別に批判したいわけじゃない。
メリット・デメリット理解した上での使い分けが必要だと思ってるだけ。
あと、自分の意見が100%正しいとも思ってない。だから議論してるわけで。
0763nobodyさん
2011/01/30(日) 16:58:36ID:???コード時代に問題が → コード自体に問題が
あと、コードの書き方やサーバの設定(環境)によって重さを感じさせない
ように出来るって意見もあるだろうけど、
チューニングしたら重くないというのはまた別の話な気がするけどな。
ま、俺がCakePHPで書いてる書き方をいくら変えたところで
ビューにSmarty使って重いという印象は変わらないと思うよ。
Zend使えばまた別なのかも知れないけど。
0764nobodyさん
2011/01/30(日) 19:37:19ID:???CakePHPってViewを処理する機構が用意されてるの?
だったらそちらを使った方が親和性が高く、処理は減る→軽くなる可能性はあるね
0.1秒の差でも100回リクエストでトータル10秒だから馬鹿に出来ない
秒単位の差が出ないから問題無いとの判断は違うと思う
最近はモデル部分の肥大化が激しくて、ビューなんざ何使っても関係ねー!って感じ
動的部分を極力JavaScriptにお任せして、ベースのHTMLもキャッシュサーバーに格納される様にしてるw
0765nobodyさん
2011/01/30(日) 20:24:06ID:???意見受け入れてないのはお前じゃね?
「自分が間違った計測の仕方してる」って可能性は一切無視ですか?
>そりゃ、最小構成でベンチとっても秒単位で差なんて出ないだろ。
>俺は例で「ポータルサイト(動的サイト)」って出したけど、
>そこまでの規模についての話をしてるんだよ。
それは無い。
プロジェクトの規模が上がっても、Smartyにかかるコストはほぼ普遍的だから、
全体が重くなればなるほど、相対的にSmartyのコストは下がる。
トータル5000msのページだろうが、10000msのページだろうが、Smartyは100ms以下でしかない。
全体処理とSmartyの処理負荷が比例しているのであれば、
それは上にも書いたようにテンプレートやプラグイン内に、
DB接続等の極端に重い処理が含まれていると考えられる。
それらは本来Smarty内に含めるべきでは無いし、
それをSmartyの実行性能として含めるべきでも無い。
ご自慢の「俺の検証結果」とやらを調べて、どのメソッドが負荷になってるか教えてくれよ。
皆で問題と解決策を見いだそうぜ。
0766nobodyさん
2011/01/30(日) 20:30:04ID:???「それは無い」なんてありえないって言われそうけど、
>>753は君の言うポータルサイトのホーム画面だから。
DB数回叩いて、セッション確立して、Smartyで画面表示する程度だけど、
機能が増えても、DB叩く回数やデータを処理するロジックが複雑になるだけで、
Smartyが重くなる事は無い。
異論は君のベンチマーク結果を提示された時だけ認める。
0767nobodyさん
2011/01/30(日) 22:11:51ID:???俺もまぜてくれ
0768nobodyさん
2011/01/30(日) 23:44:57ID:???0769nobodyさん
2011/01/31(月) 01:28:30ID:???Smartyのコンパイルキャッシュを有効にすれば2回目以降は更に軽くなる。
>>753は全く最適化も行わず、force_compile=trueにしたSmartyでの計測値。
コンパイルキャッシュ有効にして、APC等も導入すれば、
一番重い処理であるテンプレートコンパイルとinclude処理が劇的に軽くなる。
0770nobodyさん
2011/01/31(月) 04:36:16ID:???FW+SmartyがFWのみより重いのは当然だ。
それでも、他の人が言ってるように、全体からみれば、その重さも微々たるもので、
便利なテンプレートエンジン使えるメリットは大きい。
使わないで済むならつかわなくていいし、かといって使ってる人に"重いのによく使うな"っていうのはナンセンスってことだ。
0771nobodyさん
2011/01/31(月) 06:39:47ID:???実行する分だけ遅くなると思うのだが。
それが1秒もかかるってことは・・・template_cディレクトリを
フロッピーディスクに指定してたりして。
0772nobodyさん
2011/01/31(月) 09:37:11ID:???0773nobodyさん
2011/01/31(月) 10:34:01ID:???フレームワークとあわせてつかうものですか?
0774nobodyさん
2011/01/31(月) 11:27:25ID:???え?そういう次元の低い話してたの?
0775nobodyさん
2011/01/31(月) 13:17:00ID:???dwooの時代なの
0776nobodyさん
2011/01/31(月) 16:39:08ID:???マニュアルか何かを日本語に訳した人がいたけど、何か訳がおかしいとか言われてたっけな
導入例がないものを使うのは気が引けるという人もいたし
0777nobodyさん
2011/01/31(月) 18:07:22ID:???なかなかすぐに導入って難しいよね。
0778nobodyさん
2011/01/31(月) 21:01:55ID:???Smarty3を実践導入したんだけど、Smarty2で不満に思っていた点はほぼ全て解消されてたわ。
プラグインも2のをそのまま使えるし、今のところ不具合も見あたらない。
乗り換え推奨したいところ。
0779nobodyさん
2011/01/31(月) 22:21:04ID:???この違いはちょっと気になる。まぁ前者はリンクするだけならオープンにしなくていいけど、後者はほぼ何も考えなくてもいいし。
0780nobodyさん
2011/01/31(月) 23:26:36ID:???spl_autoload_registerしなきゃいけないようだ
0782nobodyさん
2011/02/02(水) 20:09:32ID:???あるのでしょうか?
(Document読みましたが見つかりませんでした・・・)
0783nobodyさん
2011/02/02(水) 20:21:36ID:???0785nobodyさん
2011/02/07(月) 16:26:00ID:???8. カスタム関数のように厳選するなら何番をよく使いますか?
http://www.smarty.net/docs/ja/index.tpl
0786nobodyさん
2011/02/07(月) 16:50:43ID:???そのぶんPHP側でやるわけだが、労力の差し引きがゼロなら
テンプレートがシンプルなほうがエライ(`・ω・´)キリッ
0787nobodyさん
2011/02/07(月) 17:02:14ID:???悪いことは言わないがsmartyでレイアウトなんてやるな
キャッシュを手動で消さないといけないからトラブルの元になるぞ
0788nobodyさん
2011/02/08(火) 10:20:52ID:???今まで細々と{include}で対応していた細かいパーツ群が綺麗に纏まった。
Smarty2
{include file="/include/navigation.tpl" current="top"}
↓
Smarty3
{call show_navigation current="top"}
0789nobodyさん
2011/02/08(火) 11:25:55ID:???0790nobodyさん
2011/02/08(火) 11:48:05ID:???楽になってシンプルになる。
0791nobodyさん
2011/02/08(火) 12:59:02ID:???IDEの色分け(&コード補完)が浸透してくれれば、もう何も文句は無い。
0792nobodyさん
2011/02/08(火) 13:24:09ID:???$array=[1,2,3];
・a.php
$file=file_get_contents('array.php');
eval($file);
0794nobodyさん
2011/02/12(土) 09:59:04ID:???0795nobodyさん
2011/02/12(土) 10:26:10ID:???0796nobodyさん
2011/02/13(日) 19:46:05ID:???こりゃいいわ。
0797nobodyさん
2011/02/14(月) 14:52:52ID:???0798nobodyさん
2011/02/16(水) 16:57:01ID:???今までCakeを勉強していた時間ってなんだったんだろう・・・
0799nobodyさん
2011/02/16(水) 16:59:08ID:???0800nobodyさん
2011/02/16(水) 17:01:36ID:???0802nobodyさん
2011/02/16(水) 17:09:32ID:???0803nobodyさん
2011/02/16(水) 17:10:03ID:???0804nobodyさん
2011/02/16(水) 17:10:45ID:???0806nobodyさん
2011/02/16(水) 17:11:39ID:???テンプレートでフレームワークの代用は効きますよね?
0807nobodyさん
2011/02/16(水) 17:12:22ID:???0809nobodyさん
2011/02/28(月) 21:34:15.77ID:???ポストフィルターを通った後、アウトプットフィルター適用前という認識でいいんだろうか??
0810nobodyさん
2011/03/04(金) 13:23:25.27ID:???まあ俺も聞くことがないんだけども
0811nobodyさん
2011/03/04(金) 15:29:17.45ID:???それにフレームワークと違って、そんな複雑なものでもないし。
でも、初心者が一度は通りそうなものだと思うが、最近の初心者はどうしてんだろ。
0812nobodyさん
2011/03/04(金) 17:57:32.27ID:???1. if for get postなどを覚える
2. 関数を覚える
3. クラスを覚える
4. フレームワークに突入
0813nobodyさん
2011/03/04(金) 20:08:42.87ID:???0814nobodyさん
2011/03/04(金) 20:50:42.48ID:???0815nobodyさん
2011/03/19(土) 08:56:24.20ID:???Smartyのマニュアルが充実していて、質問することが
ないからでは。
>もそもcakephpって時点で終わってるだっよ
>あれは開発現場で実際ただ飯食いを製造するだけ
cakephpに興味ありありなので、「cakephpはただ飯食いを製造する」
という理由を教えてください。
0816nobodyさん
2011/03/22(火) 06:23:02.17ID:8oP+/2xeaaaaa.php
<?php
require_once("*******/Smarty.class.php");
$smarty = new Smarty();
$smarty -> display("tmp_b/index.tpl");
$smarty -> assign("page","aaaaa");
?>
index.tpl
{include file="tmp_b/header.tpl"}
{include file="$page.tpl"}
{include file="tmp_b/footer.tpl"}
$pageの部分に各ページのHTMLが入るんですが、
そのHTMLの量が少ないと、ちゃんと表示されるんですが、
HTMLの量が多いと、そのpage部分全てが表示されなくなります。
何が原因なんでしょうか?
0817nobodyさん
2011/03/22(火) 06:35:40.11ID:???0819nobodyさん
2011/03/23(水) 19:54:59.71ID:???$smarty -> display
$smarty -> assign
の順番が逆。
assignしてからdisplayしてごらん。
0820nobodyさん
2011/03/23(水) 21:51:42.62ID:???$smarty -> display
$smarty -> assign
を逆にしてみましたけど、まったく変化ありません。
疑問なのはHTMLの行数によってassignされたり、されなかったりすることです。
0821nobodyさん
2011/03/23(水) 22:55:08.02ID:???ちゃんとすべてのリクエストで $page に値が入ってるのは確認したのか?
それが問題ないなら提示したソースじゃなく、呼ばれたtpl側の問題じゃね?
0822nobodyさん
2011/03/24(木) 00:31:19.76ID:???0823nobodyさん
2011/03/25(金) 06:14:27.80ID:???全く表示されない状態というのは、表示もされずHTMLソースコードも
白紙ってこと?
または、テンプレ内で{debug}を入れてデバッグ情報を表示するとか、
templates_cの中身を確認してみるとか。
0824nobodyさん
2011/04/21(木) 17:49:23.58ID:EKlJgMf+{$user->getName()|default:''}
上記のような書き方をしているのですが
$userが未定義だったりnullだったりする場合にdefaultで
指定している文字列を表示させるように設定する事は可能でしょうか?
このまま表示させると、このソースの部分でHTMLの表示が
止まって以降、真っ白になってしまいます。
なにか解決策があればご教授ください
0825nobodyさん
2011/04/21(木) 23:32:35.14ID:???defaultは、変数の値がない場合であり、
エラー処理までできんだろ。
自分で関数作るのが早いんじゃね?
そもそもphpエラーで止まって以降真っ白になってんだろ。エラー解決しないとどうしようもねぇ。
ていうか、エラー表示しとらんのか?
0826nobodyさん
2011/04/29(金) 18:31:05.23ID:RGJxTFjkキャッシュされずに毎回動的に実行させるものはないですか?
0827nobodyさん
2011/04/29(金) 18:35:05.75ID:???0828nobodyさん
2011/04/29(金) 21:58:28.37ID:???0829nobodyさん
2011/04/30(土) 18:09:31.66ID:???0830nobodyさん
2011/06/30(木) 23:32:24.71ID:???ぱっとみてこれデザイナー向けじゃないですよね?
すごいプログラマーよりな感じがします。
自前の作るしかないかなぁ・・・
0831nobodyさん
2011/06/30(木) 23:40:19.31ID:???何のためにsmarty使うのかを理解しろよ
0832nobodyさん
2011/06/30(木) 23:49:39.32ID:???むしろそのくらいの設計にできないようじゃプログラマ側がアレだと思ってる。
0833nobodyさん
2011/07/01(金) 00:49:43.59ID:???{foreach from=$data item=value name=loop01}
<li>値は「{$value|escape}」</li>
{foreachelse}
表示させるデータがありません。
{/foreach}
だってこんなんだよ・・・
デザイナー無理だってこれ
0834nobodyさん
2011/07/01(金) 01:32:46.59ID:???さすがにそのくらい理解できるのでは。
0836nobodyさん
2011/07/01(金) 10:44:06.60ID:???デザイナには{}の中は無視しろって言えばおk
{}の中だけSmartyの世界で他はhtmlの世界だ
簡単だろ?
0837nobodyさん
2011/07/01(金) 11:22:32.48ID:???変数オンリーかなー
制御構造は入ったらマズイね
>>833の例だと
{$data}
で
if (!$data) {
echo "表示させるデータがありません";
}
foreach ($data as $key => $value) {
echo "<li>".htmlspecialchars($value,ENT_QUOTES)."</li>"
}
を呼び出すようにしないといけない
問題はタグがliに固定されることだね
{$data orderby=id limit=5}
<tr><td>{$data.key}</td><td>{$data.value}</td></tr>
{/$data}
みたいにできたらいいんだけどね
0838nobodyさん
2011/07/01(金) 11:24:20.73ID:???タグリファレンスみたいな感じで仕様書だけ用意して
デザイナーに書いてもらうつもりだったんだけど
プログラマーが書くものなの?
■ このスレッドは過去ログ倉庫に格納されています