元スレ【PHP】 Smarty 【テンプレートエンジン】 第2章
php覧 / PC版 /みんなの評価 :
101 = :
>>69-70を実装したいなら、フィルタを使え(>>79)
>>81再帰処理が必要?なら、フィルタやfetchで自前で再帰処理実装しろ(>>83)
単純にリンク先を置換したいだけなら、outputfilterなり{capture}使え(>>80 >>84)
という具合に結論とアドバイスが出てると思うんだが、何処に「出来ない」なんて書いてあるんだろう
>>97が素人過ぎてアドバイスの意味すら理解出来なかったんだろうけど
102 = :
僕に理解できるアドバイスが無い!
まともにアドバイスも出来ない低脳ばかりで、ほんっとSmartyって使えない!!って事だろ
>>97
この動画でも見ておちつけよ。お前が映ってるぞ。
http://www.youtube.com/watch?v=ph-qKLyJbkE
103 = :
実用的かはともかく不可能じゃ無いよね
まぁ、誰も実装はしないだろうけど
104 = :
>>100
なんだ。84「まで」って84も含むのか。明日までといった普通明日になる前を指すんだけどな。
俺が「結果はできない」って言ったのが81なのに、84を引き合いに出すあたりもなぁ・・・
105 = :
あー、わかったわかった
81の「結果はできない」という言葉を
81「俺は、Smartyにそのような機能はない。できないと知っている」
と解釈したのか
単に
81「全然まともなアドバイスでないじゃんw 思想的におかしいとか逃げてるってことはできないってことかよw
思想は別にあってるだろw 69さん残念だね、できないみたいだよw Smartyしょぼいw」
というだけのレスだったんだが
106 = :
別にいいじゃねーか。
とりあえず1人はcaptureタグを挙げられる人間がいたし、そのアドバイスに従って解決したんだから。
わざわざ荒らす必要ないだろ。
カスタムブロックタグなんてマイナーな機能だから、ほとんどの人間は使ったことないだけだよ。
Smartyの凄さはそういうことだけじゃない。
107 = :
必死なのはわかるが、
>>81
>>思想としてはありだから、できないのか質問に来たわけだろ?
>> 結果は「できない」 自身の定義タグを再帰的に処理できないとか、Smartyのしょぼさがうかがえるわ
この文章を
>>81「全然まともなアドバイスでないじゃんw 思想的におかしいとか逃げてるってことはできないってことかよw
>>思想は別にあってるだろw 69さん残念だね、できないみたいだよw Smartyしょぼいw」
と解釈するのは無理がある。君はまず日本語の勉強からしたほうがいいな。
伝える力が無いとどんなコミュニティでも認めては貰えないよ。
仮にこの文章を君がそのような意図で書いたのであれば、
やはり「できない」と言っているのは君だけであり、このスレの住人は優秀。
108 = :
>>104
少なくとも >>69-70 の要件であれば >>79 で完結している。
無駄に再帰が云々と要件を膨らますから>>84まで話が拡大したんだろ。
「明日」の話なぞしていないし「まで」の例えも間違えているよ。
君は「84まで読め」と言われて、83までしか読まないのかい?
やはり日本語から再度勉強し直したほうが良いだろう。
109 = :
>>107
伝える気があると期待してたの?
単に言い捨ててただけだから気にしなくていいよ
Smartyか、もしくは使っている人間がしょぼいんだろうなって思っただけだから
>>108
質問者の意図からはずれていたようだがな>>79
84まで読めなんて書いてないだろ
84は質問者への正答だから、俺は「84さんは優秀で返答できた。84以外バカばっかりじゃん」と思った
それに対して「84さん以外でもちゃんと答え出せてたもん!84に至るまでにもう応えてたもん!」というあがきに見えたから「84に至るまでの間に、何も答えなんてだせてなかったじゃん」と煽った
OK?
「思想が間違ってる」だの「再帰処理は無限ループになっちゃう」だの、的外れなバカばかりがSmarty使ってるんですねって言ってるの
OK?
110 = :
Smartyはすごい
Smartyは使いこなせばすばらしい
って色々な奴が言ってたけど、使いこなせてねーってのが露見したねー
まともに使えるのはほとんどいないのね
ってだけの話なのに、いつまでいいわけこいてるんだか
結局変数の埋め込み程度でしか使えない
というか「Smartyタグの埋め込みという下働き作業をさせられている側の人間」ばかりがこのスレにいるってことだろ?
111 = :
一応Smarty使いこなしているつもりの人間として意見。
>>69の質問に対して、ブロック関数プラグイン作れって意見が即座に出ないのは確かにしょぼいと思う。
だが、だからといって煽っていいもんじゃない。
むしろPHP側で処理しろとか、再帰的にテンプレートとして実行しろとか、フィルタで解析しろとかは、むしろアンチの自演レスじゃないかと思える。
112 = :
>>109
君がそう思うんならそうなんだろう・・・君のなかでな。
もう見苦しいからあきらめろ、な?
君がどんなに取り繕っても >>79は>>69-70への返答としては的を得ているし、
君が質問者の意図とは違う再帰等の要件を盛り込んでイチャモンつけただけにすぎない。
(それすら>>84で返されちゃってるがww)
悔しいのはわかったが、君自身Smartyの知識が無いんだから、何言ったって負け犬の遠吠えだよ。
{capture}使ってどう実装するか君には理解できたかい?w
113 = :
>>112
俺は111だが、>>79が的を得ているは無い
質問者を混乱させただけだと思う
115 = :
<a href={urlchange}"test{$hoge}test"{/urlchange}>
これで一瞬で終わる話題を、なぜテンプレートの再帰処理だの{capture}だの出すのか理解に苦しむ
少なくとも>>79も、>>84も、その他何もアドバイスできなかった連中も、Smartyを自慢げに語るのは恥ずかしいと思うぞ
俺の友達は世界的に有名なんだぜ!みたいな誇り方だと思う
116 = :
俺はこの騒動でブロック関数の有効な使い方学べたからありがたかったよw
>112は煽りを煽ってる場合じゃないと思う
capture使ってどう実装するか理解できたかい?wって、capture使うのはどう考えても遠周りなのになんで誇ってるのw
117 = :
>>115
ごめん、俺フィルタで考えてたw
outputfilterで<a href="">を一括置換すればいいかなとか思っていた
質問主はprefilter内で<a href="">を検索して{urlchange}というブロックタグに置換してるって事でOK?
118 :
あのね、
Smartyを使うということは
PHP自体を否定してるのと同義なのね。
そこら辺分かっててつかってるのかなぁ~
この雑魚共はぁああああああああああああああ!!!!!!!!!
119 = :
>>117
outputfilterはコスト高いから、なるべくキャッシュに残る前の処理であるprefilterとかで済ませたほうがいい
嫌ないい方かもしれないけど、処理コストを考えてない人がテンプレートを再帰処理とかそういう妙な発想になるんだと思うな
良くも悪くも便利なせいで、内部的な動きを知らないで激重にしている人も多いのかも
ブロック関数すら、展開された後の書式を見ればかなりすごいことやってるし
ob_start系のバリバリ使ってるんだけど、あれってコスト軽いと考えていいのかなぁ?
120 = :
このスレの住民は相手を問わず喧嘩するのが大好きなんだなw
121 = :
かなり進んでいるので来てみたら・・・子供のケンカかよ。
自分の主張も良いけど、相手の主張も飲めよ。
じゃないと、論理的思考なんて無理だろ。PGに向いてない。
122 = :
ここまで俺のお婆ちゃんに同意なし。
123 = :
2つのキャッシュ機能って、どれとどれ指してるの?
124 = :
>>122
joinの嵐サイトってなに?
126 = :
そのカスライブラリのスレで煽ってるお前もカスでFA?
127 = :
>>126
まぁそんなに自分を卑下するなよ。
カスなりに頑張れ。応援してるよ。
128 = :
Smartyを単体で使ってもそりゃカスだよ
直接PHP埋め込んだほうが手っ取り早い
Smartyが威力を発揮するのは、他の解析エンジンと組み合わせた時。
それこそ>>69みたいな使い方した時だよ
PHPで書くと自由度が高すぎて、解析がうまくいかなくなるからね
129 = :
てか、デザインとプログラムを分離するためなんじゃねーの?
130 = :
>>119
出力結果の文字列置換を行う場合、
outputfilterならpreg_replace一度の実行で済むと思うけどそんなにコスト違う?
書いてるようにブロックタグ自体、展開後の書式が無駄に重い気がするが・・・
ブロックタグで処理する場合、置換箇所が増えれば増えるほどオーバーヘッドでかくならね?
それともテンプレート全体をブロックタグで囲って疑似フィルタ的に扱うのかな?
131 = :
[Smarty信者の主張]
・デザインとプログラムを分離を容易にできます。
→PHPでもデザインとプログラムは分離できます。
・デザイナーとプログラマーとの分業がしやすいです。
→デザイナーはテンプレートの元になるHTMLを作り
テンプレート自体はプログラマが作りますので
Smartyなんか無くても生PHPで十分分業可能ですね。
何か反論ありまでしょうか?
132 = :
>>131
素晴らしいです。全く反論出来ません。
貴方が絶対的に全てにおいて正しく、
貴方のように聡明な方がこんな糞スレを読む時間は、
全人類にとって損失でしかありません。
しかし残念な事に、高尚な貴方の思考は、Smarty信者のような低俗な連中には理解できないのが現状です。
Smartyを駆逐する為に、比較実証コードを作成して公の場で発表するべきです。
それがSmartyワクチンとなり、PHP界のイノベーションとなる事でしょう。
期待しています。
133 = :
>>131
デザイナーがもっとも使っているソフトはDreamweaverである
→PHPをそのまま埋め込んでプレビューすると、エラーになる
→エラーを出さないようにする為には、サーバが必要
→SmartyタグならPHPと認識されないので、エラーにならない
(ただし、デザインの崩れ等は発生するが
こういう反論はどうかな?
135 = :
>>130
preg_replace でも str_replaceでもなんでもいいが、正規表現を使った全文チェックが軽いと思えるのが凄い
136 = :
>>135
あれ・・・上の例だと、prefilterで全文検索して、部分的にブロックタグに置換してるんだよね?
だったら出力時に一括の方が早いんじゃないかなと思っただけだよ。
137 = :
prefilterは、キャッシュに残す前にやるから多少重くても問題ない
出力時は毎回アクセスでコスト発生するだろ
138 = :
でも、ブロックタグの中身自体が文字列置換処理だよね?
ブロックタグが10個あれば内部的に10回置換処理が走ると思うけど、全文検索1回と比べてそんなに軽いもんなの?
139 = :
置換処理の意味わかってるのか?
ブロックタグは、タグの間の文章を(通常と同じコストで)バッファに書き出し、それを引数として関数を動作させる。
置換処理なんて発生しない。
ob_stsrt(); 処理 $_tmp = ob_contents(); ob_clean();
ブロックの中身はこんな感じで取得する。通常の出力処理とコストは変わらん
それに比べ、str_replace系はHTML全文を”正規表現で”検索し、置換処理を行う。
正規表現がべらぼうに重いのは分かってるだろ?
また、一部のAタグだけ適用という方法を誤爆無くやるためには、色々細かい処理が必要。
prefilterならじっくり検証しても構わないが、outputfilterではじっくりやると毎アクセスでのレスポンスに響く。
140 = :
>> ob_stsrt(); 処理 $_tmp = ob_contents(); ob_clean();
「処理」の部分で、引数に対して置換処理を行っているんじゃないの?
該当タグが増えただけ、上記処理を繰り返してしまうので結構なコストがかかる気がする。
またprefilterだとSmartyで動的に生成されるリンク(pagerとか)に対応できなくない?
ブロック関数内で正規表現かまして該当箇所を置換するとかになりそうな気がするけど・・・
141 = :
Smartyの関数出力を「置換」と表現したら、Smartyで行うあらゆることが「置換」になって「置換」という言葉が意味をなさなくなるだろ…
言葉遊びしたいのか、ちゃんとした質問なのかはっきりしてくれ
>上記処理を繰り返してしまうので結構なコストがかかる気がする。
はい、ソースだしてね。obへの出力と、からの取得のコストがヘビーだっていうソースをね
>またprefilterだとSmartyで動的に生成されるリンク(pagerとか)に対応できなくない?
後付け条件出しすれば何にだって文句つけられるわ。あほくさい
142 = :
質問です
バージョンは2.6.25です。
Smartyは、テンプレートを解釈した後キャッシュを生成してくれるようですが、
排他処理を行っていないように見えます
・tempnamで作ったテンポラリ名のファイルに解釈内容を出力
・キャッシュ名のファイルを削除
・テンポラリ名のファイルを、キャッシュ名にリネーム
とやっているようですが、キャッシュ名を削除した瞬間と、他プロセスでキャッシュを読んでいる瞬間が重なった場合に問題を引き起こすような気がするのですが…
143 = :
気にするな
144 = :
>>141
ごめん、言葉遊びじゃなくて
prefilter内で、
preg_replace('/xxxx/', '{urlchange}xxxx{/urlchange}', $source);
と変換した後にブロック関数内で
function smarty_block_urlchange($params, $content, &$smarty) {
return preg_replace("/xxxxxxx/", "xxxxx", $content);
}
という具合に何らかの文字列処理(置換)が行われるわけだよね?
preg_replaceを使うかは別として、ブロック数に比例してob_start含めたオーバーヘッドが発生するわけだが
一括処理と比較してどれだけコストが違うんだい?
>後付け条件出しすれば何にだって文句つけられるわ。あほくさい
後付けは申し訳なかったが、Aタグを書き換えたいって内容的に十分想定しうる事だと思うが・・・。
146 = :
>>144
その後付けにも対応したくなれば、また質問しにくる。その時また考えればいい
ob_startを含めたオーバーヘッドってのがわからん。
アウトプットストリーム。
もっといえば単に文字列バッファをスタックに積むことがそんな重い処理だとはどうしても思えないな
147 = :
>>146
>ob_startを含めたオーバーヘッドってのがわからん。
実際の処理では、ob_startのみじゃなくてブロック関数も実行されるでしょう?
ob_start();
smarty_block_urlchange();
$_tmp = ob_contents();
ob_clean();
仮に20カ所ブロックタグがあったら、20回上記一連の処理が実行されるわけで、
関数呼び出しのオーバーヘッドはタグ数に比例して拡大してしまう。
一括処理にすれば、1処理こそ重いものの実行コストはほぼ一定に保てる。
>もっといえば単に文字列バッファをスタックに積むことがそんな重い処理だとはどうしても思えないな
バッファ文字列に対してブロックタグ関数が実行される事を忘れてませんか?
148 = :
はぁ
まぁ処理の回数の予想とかして、負荷の少ないほう選択すりゃーいいんじゃねーのー?
なんかもう、ブロック関数の呼び出しオーバーヘッドがどうのーとかまで言われ始めると
そんなレベルのオーバーヘッド気にするならPHP使うのやめたらー?とか思っちゃうんですけどー
Smartyも関数呼び出してんこもりだしさー?
149 = :
>>133
本当にあなたの会社ではデザイナーにテンプレートを触らせるの?
俺の感覚ではテンプレートはプログラムの一部なので
デザイナーには絶対触らせたくないんだけど。
ちなみに今まで俺が参画してきたプロジェクトでは
最初に紙芝居のHTMLが作成されて、
その後プログラマがHTMLをテンプレートに変換しつつ実装
という流れしか無かったんだけど。
それはJavaでもPHPでも共通で。
150 = :
>>149
>その後プログラマがHTMLをテンプレートに変換しつつ実装
>という流れしか無かったんだけど。
そしてシステムを納品した後に「デザイン変更して」と言われたらどうしてるの?
或いは、画像を追加してと言われたら?
CMSで構築しているサイトなら別だが、すべてそんな案件ばかりじゃないだろ。
みんなの評価 :
類似してるかもしれないスレッド
- 【PHP】 Smarty 隔離スレ 【テンプレート】 (1001) - [48%] - 2010/3/28 11:16 ○
- 【PHP】Laravel【フレームワーク】 Part.11 (870) - [43%] - 2022/8/28 15:45
- 【PHP】Laravel【フレームワーク】 Part.2 (917) - [43%] - 2019/9/10 9:15
- 【PHP】Laravel【フレームワーク】 Part.3 (983) - [43%] - 2021/2/12 4:00
- 【PHP】Laravel【フレームワーク】 Part.12 (314) - [43%] - 2023/1/30 18:45
- 【PHP】Laravel【フレームワーク】 Part.4 (460) - [43%] - 2021/4/4 4:00
トップメニューへ / →のくす牧場書庫について