1 名前:nobodyさん [2008/02/02(土) 00:21:09 ID:6cKcKeTp] まぬあるwww.smarty.net/manual/ja/
190 名前:nobodyさん mailto:sage [2008/09/30(火) 23:16:57 ID:???] >>189 自己解決の詳細を報告しる!
191 名前:nobodyさん mailto:sage [2008/10/01(水) 16:25:04 ID:???] >>190 気合で解決!
192 名前:nobodyさん mailto:sage [2008/10/02(木) 16:19:26 ID:???] preFilterでテンプレートの文字コードを内部文字コードに合わせる。 postFilterで元に戻す。 これは基本だろう。
193 名前:nobodyさん mailto:sage [2008/10/03(金) 12:27:37 ID:???] みんななんでSmartyなんて使ってるんだ。意味がわからん。
194 名前:nobodyさん mailto:sage [2008/10/03(金) 19:01:42 ID:???] 名前:<?php echo $name ?> よりも 名前:{$name} のほうが書きやすくて可読性も高いから。
195 名前:nobodyさん mailto:sage [2008/10/03(金) 19:14:40 ID:???] それだけじゃなかんべw それだけしか使ってないならもったいないw
196 名前:nobodyさん mailto:sage [2008/10/03(金) 19:36:59 ID:???] <?=$name?>
197 名前:nobodyさん mailto:sage [2008/10/03(金) 20:29:13 ID:???] short_tagwwww
198 名前:nobodyさん mailto:sage [2008/10/04(土) 01:57:42 ID:???] Smarty(というかテンプレートエンジン)の便利さを解らない奴は、 素人or中級者未満だと自覚した方が良いよ。
199 名前:nobodyさん mailto:sage [2008/10/04(土) 13:26:02 ID:???] >>198 PHPそれ自体がテンプレートじゃん わざわざSmartyを使う意味がわからん
200 名前:nobodyさん mailto:sage [2008/10/05(日) 01:31:28 ID:???] >>199 意味がわからんというのは、君のやってる事のレベルが低いからだと思うよ。 PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。 PHPはテンプレートっぽく使えるだけで、実務的にテンプレート管理を行おうとしたらかなりの量のコーディングが必要になってくる。 結局はテンプレートエンジンを作る必要はあるんだよ。
201 名前:nobodyさん mailto:sage [2008/10/05(日) 01:40:36 ID:???] ・PHP <?php echo strlen($var) ? preg_replace("/[\r\n]/", "<br />", htmlspecialchars($var)) : "hoge";?> ・Smarty {$var|escape|nl2br|default:"hoge"}
202 名前:nobodyさん mailto:sage [2008/10/05(日) 06:55:52 ID:???] なぜphpのほうでnl2br使わんの
203 名前:nobodyさん mailto:sage [2008/10/05(日) 11:15:11 ID:???] modelとviewを分けたいからじゃないの
204 名前:nobodyさん mailto:sage [2008/10/05(日) 18:38:44 ID:???] >>203 どういうこと?
205 名前:nobodyさん mailto:sage [2008/10/06(月) 03:08:54 ID:???] PHP単体で使う人は、 >>201 なりPHPで書いたコードを想定してみれば良い。 「そんなコードを書く状況は100%ねぇよw」って言うなら、Smarty使う意味無いけど。
206 名前:nobodyさん mailto:sage [2008/10/06(月) 08:52:51 ID:???] >>202 >なぜphpのほうでnl2br使わんの 知らなかっただけだろ。 あと preg_replace("/[¥r¥n]/", "<br />") だと "¥r¥n" があったときに <br /><br /> になっちゃうから ここは preg_replace("/¥r?¥n/", "<br />") だよな。旧Macは無視したとして。 nl2br知らないわ、正規表現間違うわじゃ、底がしれる
207 名前:nobodyさん mailto:sage [2008/10/06(月) 08:55:31 ID:???] >>200 >PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。 キャッシュは専用ライブラリを使う ループ処理はPHPのforeachやwhileをそのまま使う エスケープ処理はhtmlspecialchars()を使うか、短い名前で定義する 携帯、PC両対応はSmartyに備わってる機能ではない
208 名前:nobodyさん mailto:sage [2008/10/06(月) 14:44:20 ID:???] >>207 全部Smartyで出来るじゃんw 使わない理由と、他のライブラリを使う理由を述べよ。
209 名前:nobodyさん mailto:sage [2008/10/06(月) 14:59:38 ID:???] >>204 改行が必ずしも<br />とは限らないからだろ。 ViewがHTMLとは限らない。
210 名前:nobodyさん mailto:sage [2008/10/06(月) 15:10:02 ID:???] >>209 上段はHTML以外も想定してるけど 下段はHTMLのみ想定しているってこと?
211 名前:nobodyさん mailto:sage [2008/10/06(月) 17:03:58 ID:???] >>210 Smartyのnl2brは拡張&動作の置換が可能。
212 名前:196 mailto:sage [2008/10/06(月) 19:40:07 ID:???] 全部関数書けばいいじゃん <?=h(e(n($name)))?>
213 名前:nobodyさん mailto:sage [2008/10/06(月) 20:27:56 ID:???] グローバル関数っすかwww そんなの結局は劣化車輪の再発明でしかないし、Smartyを使わない理由を述べよ。
214 名前:nobodyさん mailto:sage [2008/10/07(火) 12:25:11 ID:???] > 車輪の再発明... 実用レベルでは、してはいけない「車輪の再発明」だが、 言語の学習段階ではレベルアップのために、あえて「車輪の再発明」は必要... 論点ずれた。スマゾ
215 名前:nobodyさん mailto:sage [2008/10/07(火) 14:30:17 ID:???] そんな段階では「発明」でも何でもないし、する必要も無い。 物理習うときにニュートン方程式の再発明から始めるのか?
216 名前:nobodyさん mailto:sage [2008/10/07(火) 15:03:12 ID:???] 物理では再発明というか、再発見をおのおのの学生がするものじゃないの? ぶつりほうそくとは発見ではなく自然の理解であるからして。 同様に、対象を理解するために先人の真似をするのは無駄じゃない。 物理の授業でニュートンがやった実験やるのはべつに遊びってわけじゃない。
217 名前:nobodyさん mailto:sage [2008/10/07(火) 15:10:28 ID:???] 初心者の学習段階でよくやるアレは「車輪の再発明」の域にも達してないってことさ。 学習するためにやるものじゃない。
218 名前:nobodyさん mailto:sage [2008/10/07(火) 18:26:45 ID:???] 論点ズレすぎ。 車輪の再発明自体は否定も肯定もしないけど、 >>212 とか、再発明の域にすら達してないだろ。 単にSmartyを勉強するのが面倒だから、批判してるだけに見えてしまうんよ。 実際そうなんだろうけどw
219 名前:nobodyさん mailto:sage [2008/10/07(火) 21:01:42 ID:???] patTemplate ってはやってるの?
220 名前:nobodyさん mailto:sage [2008/10/08(水) 08:35:32 ID:???] >>208 >全部Smartyで出来るじゃんw >使わない理由と、他のライブラリを使う理由を述べよ。 逆だよ。PHPでできるのに、なんでSmartyを使う必要があるのってこと。
221 名前:nobodyさん mailto:sage [2008/10/08(水) 08:44:32 ID:???] >携帯、PC両対応はSmartyに備わってる機能ではない だからなんなん? テンプレートエンジンを利用すれば簡潔に記述できるのは事実だろ
222 名前:nobodyさん mailto:sage [2008/10/08(水) 14:08:02 ID:???] >>220 PHPで関数集なり、テンプレートエンジンもどきを作るくらいなら なんで既存の枯れはてたSmartyを使わないのって事。 まぁ >>212 みたいなのを見ても尚、PHPで同じ事が出来る。 と感じているのであれば、何説明しても無駄だろうけどさ。 テンプレート関数毎回作って、毎回デザイナに説明して、毎回デバッグしてるんだろうねw
223 名前:nobodyさん mailto:sage [2008/10/08(水) 16:35:41 ID:???] ああ、、、 だから毎回デスマーチになるのかw
224 名前:nobodyさん mailto:sage [2008/10/09(木) 09:57:36 ID:???] smartyとかテンプレートエンジンのいいとこは デザイナに渡すときも あとはよろしくねーって言えること。 マニュアルもちゃんとしてるし。
225 名前:nobodyさん mailto:sage [2008/10/09(木) 11:10:47 ID:???] うちの場合ページが先に出来上がってくるから、それを元にtplを作ってるな。 それでもPHPベタ書きよりはよほど楽だしあとで修正しやすい。
226 名前:nobodyさん mailto:sage [2008/10/09(木) 16:09:53 ID:???] デザイナに include と 変数 の使い方覚えて貰うだけでかなり楽になるよね。
227 名前:196 mailto:sage [2008/10/09(木) 23:38:15 ID:???] >>222 > PHPで同じ事が出来る。 逆だよ。Smartyが前提なのではない。 素のPHPに対してSmartyをわざわざ追加する必要が無い、ということ。 しかしほんと、化石みたいなスレだな。 Smarty信者はまだPHP4とか使ってるのかね。
228 名前:nobodyさん mailto:sage [2008/10/10(金) 00:21:33 ID:???] smartyってもうはやってないの?
229 名前:nobodyさん mailto:sage [2008/10/10(金) 01:12:51 ID:???] >>227 必死すぎwww 196のコードなんでPHP4とか以前にPGとしてウンコのレベルだろww 君が無知なのはわかったから PHP単体じゃテンプレートエンジンとして機能しないのに、 「何故、Smartyは必要ないのか」を具体的に答えてくれよな? もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。 初心者スレから出直してこい。 >>228 普通に使われているし、需要も多いよ。 先月にも解説新刊が出た。
230 名前:196 mailto:sage [2008/10/10(金) 09:49:15 ID:???] >>229 答えは196に示してある通りなんだが。 俺もSmartyは仕事で3年くらい使ってたよ。 > 「何故、Smartyは必要ないのか」を具体的に答えてくれよな? > もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。 じゃあ俺はお前さんにとって論外らしいので、議論の余地は無いな。 SmartyじゃないとMVCが守れない開発者は現場では使えない。 もしお前さんがデザイナーなら、PHPの基礎くらい勉強しろと言いたくなるな。 うちのWebデザイナーはみんなPHP触れるよ。 > 初心者スレから出直してこい。 ここよりレベルの低いスレがあるのか。それは恐ろしいな。
231 名前:nobodyさん mailto:sage [2008/10/10(金) 10:34:43 ID:???] >>225 それだとあとでデザイン修正があったときとかめんどくさくない? もらったデザインを前のとdiffかけて 差分をtplに反映とか。 ただプログラマが一元的に管理してたほうが セキュリティ的にはいいよね。 escape忘れただけで大変なことになることもあるし。
232 名前:nobodyさん mailto:sage [2008/10/10(金) 15:47:13 ID:???] 196やら212のコードを記述するぐらいなら俺はSmarty使うよ。
233 名前:nobodyさん mailto:sage [2008/10/10(金) 17:37:52 ID:???] 196が答えか、、、終わってるなw こんな輩が得意げに宣ってるからPHPはウンコだって言われるんだろうな。
234 名前:nobodyさん mailto:sage [2008/10/10(金) 17:44:35 ID:???] 少なくとも俺の現場ではショートタグは使えない
235 名前:196 mailto:sage [2008/10/10(金) 23:28:20 ID:???] 212に不満があるのは理解出来るけど、196は良いと思うんだけどな。 209の要件を満たす方法の一つが212で、それは211と大して変わらない。 だけど196は、MVCさえ理解できれば、209で述べられている要件も、 201よりスマートなコードにする事も、満たすことが出来るんだ。 なんでか知らんけど、Smartyを信じる人は知識があって偉い、 そうじゃない人はみんな素人だ、という反論しか戴けないのは残念だな。 >>234 ストローク数の少なさと可読性は若干損なわれるが、 それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。
236 名前:nobodyさん mailto:sage [2008/10/11(土) 00:30:31 ID:???] >Smartyを信じる人は知識があって偉い、 >そうじゃない人はみんな素人だ 誰もそんな事言ってないから。 君がSmartyを否定するだけの根拠を持ち出さないから素人扱いされちゃうんだよ。 (まぁ、テンプレートエンジンを否定してる時点で底が知れてるけども。) 196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい? それなら、早急にWEB系PGを辞めた方が良い。 212の記法に疑問を持たないのであれば、 やはり、早急にPGを辞めた方が良い。 一応聞いとくけど、OOP&MVC的に開発する時、どんな構成で作ってるの? フレームワークとかライブラリとか教えてよ。 まさかhtdocs以下に.phpファイルを量産してたりしないよね?
237 名前:nobodyさん mailto:sage [2008/10/11(土) 06:53:44 ID:???] >それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。 ほらほらこんな書き方すると単にSmartyを叩いてるようにしかみえないよ 196が同じ人なら、その内容からとてもSmartyを理解してる人には思えないんだよね >196は良いと思うんだけどな。 PHP(web)初心者だよね(笑)
238 名前:nobodyさん mailto:sage [2008/10/11(土) 12:06:19 ID:???] いやだから、PHPで同じことができるのにわざわざSmartyを使う理由ってなに? 今まででたのは、<?php echo $var; ?> が短く書けることぐらい? SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。 >>229 >「何故、Smartyは必要ないのか」を具体的に答えてくれよな? ・SmartyでやろうとしていることはPHPでできる ・Smartyは学習コストがかかる ・Smartyは遅い ・Smartyのテンプレートでエラーがあった場合、その行番号がずれている で、Smarty使う理由って何? >>229 は他人を無知よばわりしてるから、おれの知らないSmartyの利点ってやつを教えてくれ。
239 名前:nobodyさん mailto:sage [2008/10/11(土) 12:07:00 ID:???] まちがえた、Symfonyね。
240 名前:nobodyさん mailto:sage [2008/10/11(土) 22:10:00 ID:???] ・SmartyでやろうとしていることはPHPでできる → PHP単体では出来ない。別個にエンジンを作る必要がある。 キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか? ・Smartyは学習コストがかかる → 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。 ・Smartyは遅い → 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい? スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw ・Smartyのテンプレートでエラーがあった場合、その行番号がずれている → ずれてないよww エラー英文すら読めないレベルかwwww そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。 →PHP単体でなく、Smartyを使う理由? ・テンプレートエンジンとして必要な機能を備えている ・拡張がし易い ・デザイナのコードがシステムに混入しない ・PHPテンプレートエンジンとしてはメジャーで扱える人が多い >SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。 良かったね。 僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。 SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
241 名前:nobodyさん mailto:sage [2008/10/13(月) 03:31:41 ID:???] cakeを上げないあたりにひねくれものな感じがプンプンするぜ
242 名前:nobodyさん mailto:sage [2008/10/13(月) 10:28:16 ID:???] Smartyがデフォルトのテンプレートエンジンになっているフレームワークってありますか。
243 名前:nobodyさん mailto:sage [2008/10/13(月) 11:11:34 ID:???] >>240 >・デザイナのコードがシステムに混入しない いくらなんでもこれは冗談でしょ。
244 名前:nobodyさん mailto:sage [2008/10/13(月) 11:17:06 ID:???] >>242 普通は自分で選ぶ
245 名前:nobodyさん mailto:sage [2008/10/13(月) 11:31:25 ID:???] >>240 >→ PHP単体では出来ない。別個にエンジンを作る必要がある。 > キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか? PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。 >→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。 んなわけない。なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。 >→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい? > スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw >ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。
246 名前:nobodyさん mailto:sage [2008/10/13(月) 11:38:35 ID:???] >・Smartyのテンプレートでエラーがあった場合、その行番号がずれている >→ ずれてないよww エラー英文すら読めないレベルかwwww > そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。 「<p>{$var}</p>」と1行だけ書いたテンプレートを用意し、$smarty->assign('var', new MyClass()); してから表示させるとこんなエラー。 PHP Catchable fatal error: Object of class MyClass could not be converted to string in /tmp/templates_c/%%C3^C35^C35E7879%%sample1.tpl.php on line 5 1行目なのに、コンパイルされたファイルの5行目でエラーとなっている。 これでどこがずれてないというの?おまえほんとにSmarty使ってるの? > エラー英文すら読めないレベルかwwww とかいうまえに、行番号ぐらい読めるようになろうぜwwww 数字の読み書きなら教えてやるぞwwww >→PHP単体でなく、Smartyを使う理由? >・テンプレートエンジンとして必要な機能を備えている 必要な機能はPHP自体がもっている。 >・拡張がし易い >・デザイナのコードがシステムに混入しない これはダウト >・PHPテンプレートエンジンとしてはメジャーで扱える人が多い PHPそれ自体はSmartyよりはるかにメジャー。PHPなら素人デザイナーでも基本は知っている。 わざわざSmartyを学習させる意味がわかんない。
247 名前:nobodyさん mailto:sage [2008/10/13(月) 11:41:35 ID:???] >>240 >僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。 >SymphonyとCodeIgniterの利点を教えて欲しいな(^o^ いまどきこんなこと言うのは、フレームワークを使ってないということか。 あるいはオレ様フレームワークか。 これでオレ様フレームワークつかってたら笑うなー。
248 名前:nobodyさん mailto:sage [2008/10/13(月) 12:01:54 ID:???] >>246 要するに、「うちのデザイナはPHP理解できるからSmartyいらないんだぜ」ってことな。 前提としてる環境が違うんだからいつまでも平行線なんだろうね。他にも摺りあわない理由はありそうだが。
249 名前:nobodyさん mailto:sage [2008/10/13(月) 12:27:09 ID:???] 自社おかかえのデザイナがいるならどうでもいい話だろうが 外注に出す場合、まだsmartyの文法のほうが通じやすいと感じるがなー 既にsmartyを知ってるデザイナもちょこちょこいるし 知らない場合でもマニュアルの「II. テンプレートデザイナのための Smarty」だけ読んどいてで済む さすがにPHPを覚えてくれとは言えない
250 名前:196 mailto:sage [2008/10/13(月) 14:37:10 ID:???] やっとフレームワークの話が出てきたな。 名前もうまく書けてないレスが多いが、正しくはsymfonyと言う。 >>236 > Smartyを否定するだけの根拠を持ち出さないから素人扱い Smartyを否定するつもりは無いよ。 「否定したら玄人」とか、どんな中二病だよw まず前提として、Smartyの是非を議論する場合、 Smartyありきではなく、Smartyと実装Aと実装Bは対等に比較されるべきなんだよ。 >>237 も同じで煽りに内容が無い。
251 名前:196 mailto:sage [2008/10/13(月) 14:56:46 ID:???] さて本題だけど > 196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい? その考え自体がモダンじゃないんだよな。 <?=$name?>を実行するファイルの先頭に書いたら、何が表示される? Noticeが出るだけだよね(PHP4だと出ないかも)。当たり前のことだ。 「PHP単体」という言葉自体がおかしくて、(SmartyだってPHPだしな) <?=$name?>を実行するためには、まず$nameに値を代入する必要があるんだよ。 ロジックから$nameに値を代入する過程が必ずあり、そこで、 スコープの決定と、エスケープなどのビュー用の加工処理が行われる。 ちなみに、スコープの決定条件は、196とSmartyで等価だよ。 パーサのメソッドの中でincludeしたら、スコープはそのメソッドの中になる。 212のコードの欠点は、ビュー用の加工処理が、 本来HTMLであるべきファイルの中で行われることだ。Smartyも同様。 まあ、俺はSmartyを否定したいのではなく、 別の選択肢を提示して、それに対する意見を聞きたかっただけなので、 とにかくSmartyを褒めてくれなきゃヤダヤダ、という話なら正直困る。
252 名前:196 mailto:sage [2008/10/13(月) 15:09:46 ID:???] >>248-249 DreamWeaverでしかページを作れないへぼデザイナーと仕事をするとか、 外注には出すがソースレビューしたくないという場合は、 大人しくWeb製作として依頼して、コーディングは自分でやった方がいいとおもう。 結局Smartyだろうが何だろうがビューはビューなので、 MVCが理解出来ない人にビューを作らせようとしてもうまくいかんし、 テストとデバッグは結局やらなきゃいけないんだよ。 デザイナーから見たら、実際どう描画されるかわからない記号の羅列を マニュアルと変数名の指示書どおりにHTMLに書き込んでみたりして、 「たぶんこれで出来たと思うんですがどうでしょうか」と言わないといけない時点で、 それはプログラマー仕事としての負荷を被っているわけだよ。 実質的に、分業にもなっていなければ、責任の切り分けにもなっていない。 Smartyの良くないところをあえて挙げるならば、 「Smartyを使えば、へぼデザイナーとへぼプログラマーが協力出来る」という幻想を 蔓延させた事かも知れんねw
253 名前:nobodyさん mailto:sage [2008/10/13(月) 15:10:55 ID:???] >>251 おまえさんはSmartyを否定してるんじゃなく、テンプレートエンジンを否定してるんだろ? なら選択肢なんかじゃなくて具体的にどのように実装すべきかを提示してみてくれ
254 名前:196 mailto:sage [2008/10/13(月) 15:24:07 ID:???] >>253 「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。 >>229 はそれを否定していたので、そこからして論外なのだ。 テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、 まずそれを考えなおして、表現してみてくれ。 「必ずキャッシュ機能が無いといけない」とか 「PHPとして実行できてはいけない」とか そういう特殊な前提があるんなら、それを踏まえないとお前さんの役には立てんよ。 俺の要件に則って具体的な実装を述べて良いなら、 196こそが「テンプレートファイル」の答えなのだ。 $nameに何をどこでどうやって代入すればいいのかについては、>>251 に書いた。 そうそう、ディスパッチャの存在が前提になるんだ。そこはSmartyと同じだな。
255 名前:nobodyさん mailto:sage [2008/10/13(月) 15:33:22 ID:???] >>254 いや、だからな >ロジックから$nameに値を代入する過程が必ずあり、そこで、 >スコープの決定と、エスケープなどのビュー用の加工処理が行われる。 の具体例を提示してみてくれって話なんだが
256 名前:nobodyさん mailto:sage [2008/10/13(月) 17:04:37 ID:???] ぐだぐだ言い分けしてないで、 Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。 PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。 使う事を否定しないが、君なりの構築術があるわけだろ? それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
257 名前:nobodyさん mailto:sage [2008/10/13(月) 17:05:33 ID:???] 単にSmartyに馴染めなかった、Smarty使ってる人うぜぇ! ってだけならすれ違いだから、よそで最高のテンプレートエンジンを開発してくれよな!
258 名前:nobodyさん mailto:sage [2008/10/13(月) 17:10:46 ID:???] >>254 >「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。 >>>229 はそれを否定していたので、そこからして論外なのだ。 うむ、同意だな。PHPはそれ自体でテンプレートエンジンとして使える。 > テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、 > まずそれを考えなおして、表現してみてくれ。 テンプレートエンジンとしての要件は、ビューを分離できること、でいいと思う。 >「必ずキャッシュ機能が無いといけない」とか キャッシュ機能はビュー層が単体で持つべき機能じゃないよな。 もつべきならコントローラ層だ。
259 名前:nobodyさん mailto:sage [2008/10/13(月) 17:18:03 ID:???] >>256 >ぐだぐだ言い分けしてないで、 >Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。 前スレ読め。とっくに出てる。 >PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。 はあ?ライブラリを使っちゃだめとか、頭どうかしてんじゃねーの。 Smartyだってライブラリだろ。なんでSmartyはよくて、他はだめなの?ばかなの? それにPHPだけで書かれたライブラリはpure PHPだろ。言葉の意味間違ってるぞ素人さん。 >使う事を否定しないが、君なりの構築術があるわけだろ? > >それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。 だから前スレよめって。>>193 以降全部読め。
260 名前:nobodyさん mailto:sage [2008/10/13(月) 18:24:20 ID:???] >まあ、俺はSmartyを否定したいのではなく、 別の選択肢を提示して、それに対する意見を聞きたかっただけなので、 >>193 をそう解釈しろと言われても困る
261 名前:nobodyさん mailto:sage [2008/10/13(月) 18:40:09 ID:???] >>256 >何と比較してダメなのか → PHPと比較して。 >要所要所わかりやすく上げてくれ。 >>238 からのコピペ。 ・SmartyでやろうとしていることはPHPでできる ・Smartyは学習コストがかかる ・Smartyは遅い ・Smartyのテンプレートでエラーがあった場合、その行番号がずれている で、Smarty擁護派が>>240 で反論してるけど、Smarty反対派が>>245-246 で再反論してて、今はSmarty擁護派の再々反論待ち。 特にエラー行番号についての見解を期待。
262 名前:nobodyさん mailto:sage [2008/10/13(月) 21:39:53 ID:???] 何が見解だよww >>エラーについて 君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw Smarty自体の処理ははあっておりコンパイルも通っている。 コンパイル後のPHP実行時に、ストリングに変換出来ないクラスをそのままassignして表示してるからPHPがエラー出してるんだろ。 Smarty以前の問題だ。素人レベルのミスだ。 行が違う!とか行ってるけど、 コンパイル後のクラスのライン5みりゃ1発で原因わかるよね。 PHP Catchable fatal error: Object of class MyClass could not be converted to string in /tmp/templates_c/%%C3^C35^C35E7879%%sample1.tpl.php on line 5 Smatyでのエラーは以下のように正しく表示される。 Fatal error: Smarty error: [in sample.tpl line 4]: syntax error: unrecognized tag 'test' (Smarty_Compiler.class.php, line 590) in /xxxx/Smarty.class.php on line 1092
263 名前:nobodyさん mailto:sage [2008/10/13(月) 21:48:53 ID:???] >PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。 ライブラリを組み合わせるのもSmarty使うのも同じだと思うが?PEARの優位性は何だろね。 関数はグローバル関数かい?w >なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。 逆もしかり。PHPの方が覚える事も少ないし、文法も完結だからだ。 何度も言うがショートタグが使えない現場は多い。 >おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。 したよ。他のエンジンと比べて大差ねーよ。 View処理が 5 : 10 だとしてもビジネス処理に 50 かかれば 55 : 60 程度の差って事だよ。 >エラーコード 上に書いた。PHPの変数の使い方から出直してこい。 >必要な機能はPHP自体がもっている。 PEARとか別のライブラリや、スコープ確保の為にクラス化、関数化は必要だよね? そうされた一式がSmartyって事なんだが。 >拡張がし易い プラグイン、フィルタ、リソース等、かなり楽に拡張できるが? >PHPそれ自体はSmartyよりはるかにメジャー 何度も言わせるな。「PHP単体」じゃ無理だろ。同じ事実現する為のライブラリの学習コストを考えろ。 >フレームワーク cake、Zend、CodeIgniter使ってる。全部ViewはSmarty拡張クラス組込済。
264 名前:nobodyさん mailto:sage [2008/10/13(月) 22:13:18 ID:???] >別の選択肢を提示して、それに対する意見を聞きたかっただけなので、 解ったから、具体的に選択肢を提示してくれよ。 ショートタグで値を表示するだけじゃ甲乙つけられないだろ? ループ、エスケープ、インクルード、条件分岐が入ったViewテンプレートサンプルを上げてくれ。 それを見て「これならSmarty使う必要は無いな」と思わせてくれよ。 俺が出すサンプルは以下だ、 「ヘッダ、フッタを合成して配列の中身をテーブルに出力するだけの簡単な処理」
265 名前:nobodyさん mailto:sage [2008/10/13(月) 22:16:06 ID:???] =================================================== PHP + Smartyで記述 =================================================== {include file="header.tpl" title="ページタイトル"} <table> <tr> {foreach from=$rows item=row} {strip} <td>{$row.time|date_format:"%T "|default:"00:00:00"}</td> <td>{$row.name|escape}</td> <td>{$row.value|escape|default:"DEFAULT"}</td> {/strip} {/foreach} </tr> </table> {include file="footer.tpl"}
266 名前:nobodyさん mailto:sage [2008/10/13(月) 22:16:56 ID:???] =================================================== PHP単体で記述 =================================================== <?php $title = "ページタイトル"; include_once "header.php"; ?> <table> <tr> <?php foreach((array) $rows as $row) { ?> <?php ob_start();?> <td><?php echo $row["time"] ? strftime("%T", $row["time"]) : "00:00:00"; ?></td> <td><?php echo htmlspecialchars($row["name"]);?></td> <td><?php echo ($row["value"]) ? htmlspecialchars($row["value"]) : "DEFAULT" ?></td> <?php echo preg_replace("/[\r\n]/", ob_get_contents()); ?> <?php ob_end_clean(); ?> <?php } ?> <tr> </table> <?php include_once "footer.php";?>
267 名前:nobodyさん mailto:sage [2008/10/13(月) 22:17:35 ID:???] PHP側はこれでも処理が全然足りない。 インクルードファイルの管理や、ローカルスコープ化処理、エラー処理、etc。 結局細かい処理を考えるとSmartyと同程度までの実装は欲しくなってくる。(文法はおいておいて) そこをライブラリや関数で補うって事なんだろうけど、 実際にそうした場合のテンプレートコードを上げてみてくれ。
268 名前:nobodyさん mailto:sage [2008/10/14(火) 01:17:27 ID:???] >>262 >君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw >Smarty自体の処理ははあっておりコンパイルも通っている。 あほかお前、なんでSmartyのエラーかPHPのエラーかをここで区別する必要があるんだ? エラーといわれた場所の行番号が違っていることが問題なんだろうが。 Smartyのエラーなんて、ただの構文解析でのエラーしかでねーじゃんか。 実行時のエラーには無力なうえ、変な行番号ででるんじゃ、使い勝手悪すぎだろ。 PHPなら実行時のエラーも行番号がずれることはない。こんなのあたりまえ。 実行時エラーを変な行番号でしか報告できないSmartyを必死に擁護するほうがどうかしてる。 「Smartyエラー」ってなんだよ、構文解析でのエラーじゃないからSmartyのせいじゃありませんって、アホか。 エラーの種類に関係なく、行番号がずれるのが問題なのに、 構文レベルエラーと実行時エラーを区別する必要がどこにある。
269 名前:nobodyさん mailto:sage [2008/10/14(火) 01:52:38 ID:???] >>268 デザイナとプログラマの分業がなされているとき 構文エラーはデザイナ責任、実行時エラーはプログラマ責任。 PHPエラーがでたらプログラマが対処すりゃいい。 そもそも、>246のエラーは文字列に変換できないクラスをassignしないもしくは、 assignしたものが直接扱えない変数であることをデザイナに伝えていれば起きない。
270 名前:nobodyさん mailto:sage [2008/10/14(火) 02:36:44 ID:???] >>268 アホはお前だろw 実行時エラー制御したいなら、Smartyに限らずassign時点で型判別しろよ無能w それこそSmartyとかPHP以前の話だよ。 >エラーの種類に関係なく、行番号がずれるのが問題なのに、 ずれてねーよw コンパイル後のソースでの行数で、ご丁寧にファイル名まで出てるじゃん。 スクリプト言語しか触った事無い素人には、実行時エラーのデバッグは難しいのかもしれんが、 普通のPGなら上のエラーコード読むだけで、エラー内容もエラー位置も特定出来るわ… むしろ構文エラーじゃなくて、実行時エラーだって理解出来て問題識別しやすいわw 無能を晒してないで、 はやく>>265-266 を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。 はやく>>265-266 を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。 はやく>>265-266 を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
271 名前:nobodyさん mailto:sage [2008/10/14(火) 02:40:48 ID:???] こういう無能がdisplay_errorsをonにしたまま本番公開しちゃって恥ずかし思いするんだろうねぇ('_`
272 名前:nobodyさん mailto:sage [2008/10/14(火) 03:44:58 ID:???] >>268 じゃなくて初心者だけどつくってみたー よろしくお願いしまーす <? // きょうつう(init.php) define('DS', DIRECTORY_SEPARATOR); define('TEMPLATE_DIR', 'tpl'); function include_template($name, $vars) { // てきとうにかんすうをていぎします function h($str){ return htmlspecialchars($str); } function strip($str){ return preg_replace('/[\n\r]/', '', $str); } extract($vars); include TEMPLATE_DIR . DS . $name; } ?>
273 名前:nobodyさん mailto:sage [2008/10/14(火) 03:46:43 ID:???] <? // こんとろーら require_once 'init.php'; $rows = array( array('time'=>time(), 'name'=>'foo', 'value'=>1), array('name'=>'bar') ); include_template('tpl.php', compact('rows')); ?> <? // てんぷれーと(tpl.php) ?> <? $title = 'ページタイトル'; ?> <? include 'header.php' ?> <table> <? foreach((array) $rows as $row): ?> <? ob_start('strip') ?> <tr> <td><?=h ($row['time'] ? strftime('%T', $row['time']) : '00:00:00') ?></td> <td><?=h ($row['name']) ?></td> <td><?=h ($row['value'] ? $row['value'] : 'DEFAULT') ?></td> <tr> <? ob_get_flush() ?> <? endforeach ?> </table> <? include 'footer.php' ?> でもsmartyのメソッドチェインてきなやつはよいとおもいます
274 名前:nobodyさん mailto:sage [2008/10/14(火) 04:01:40 ID:???] >>268 >エラーといわれた場所の行番号が違っていることが問題なんだろうが。 言いたいことはわかる。 でも、関数なんだから当然だろ。 引数が不適切なせいで、呼び出し先でエラーが出た場合を考えればわかりやすい。
275 名前:196 mailto:sage [2008/10/14(火) 09:31:04 ID:???] いや、行番号の話はSmartyとsymfonyを混同した人の指摘?みたいだし、 エラーを追いかけたかったら良いデバッグツールを使えばいいと思うぞ。 PHP標準でスタックトレースも変数の中身も出せるわけだし。 >>263 SimplateいいぞSimplate。暢気な人には魅力がかわらんかも知れんが。 俺が考える「Smartyをわざわざ導入する際のデメリット」が結構解消されてる。 まあ、「SmartyはPHPで書かれている」という大きいメリットは殺ぐのだけど。 >>265-266 はMVCを理解してない人の例という意味では良いサンプルだな。 >>271-273 ありがとう。俺もせっかくなので一つ案を出す。
276 名前:nobodyさん mailto:sage [2008/10/14(火) 10:01:19 ID:???] おはよう。 >>275 Simplateいいよね。 客先都合で使えない事が多くて泣けるけど。 >>265-266 はMVC的にはどう書くのが正解?
277 名前:196 mailto:sage [2008/10/14(火) 10:20:12 ID:???] レス番間違えた。272-273、素晴らしいコードをありがとう。 議論としては蛇足になってしまうかも知れないんだけど、 俺が個人的に>>212 より>>196 が良いと思うと言った部分を紹介します。 特徴(一長一短?)は、テンプレートファイルの可読性が高く、隠蔽されていること。 利点はHTMLからの移植性と習得の容易さ。 欠点は配列操作のコストを二重にかけていること。 改行が多いと叱られたので再挑戦。 >>276 >>272-273 のように書くのが正解だと思う。 少なくとも、MとVとCがそれぞれどのファイルかわかるでしょ。
278 名前:196 mailto:sage [2008/10/14(火) 10:21:06 ID:???] require >>272 // function d($value, $default) { return isset($value) ? $value : $default; } <?php // メソッドチェイン?をビューと切り離す(tpl.php) $title = 'ページタイトル'; $disp_rows = array(); foreach((array) $rows as $row) { $row['time'] = $row['time'] ? strftime('%T', $row['time']) : '00:00:00'; $row['value'] = $row['value'] ? $row['value'] : 'DEFAULT'; array_walk($row, 'h'); array_walk($row, 'strip'); $disp_rows[] = $row; } include 'header.php'; include 'body.php'; include 'footer.php'; <? // てんぷれーと(body.php) ?> <h1><?=$title?></h1> <table> <? foreach($disp_rows as $row): ?> <tr> <td><?=$row['time']?></td> <td><?=$row['name']?></td> <td><?=$row['value']?></td> </tr> <? endforeach ?> </table>
279 名前:196 mailto:sage [2008/10/14(火) 10:30:20 ID:???] >>276 厳密には、こう考えると良いかも。やっつけだけど。 <? // こんとろーら require_once 'init.php'; require_once 'model.php'; include_template('tpl.php', compact('rows')); <? // もでる(model.php) $rows = array( array('time'=>time(), 'name'=>'foo', 'value'=>1), array('name'=>'bar') ); ちなみに俺は>>278 のような書き分けをする時は、 tpl.phpの処理は、コントローラに近い場所に書いているかも。
280 名前:nobodyさん mailto:sage [2008/10/14(火) 11:24:56 ID:???] >>196 君、MVCを全く理解出来てないよ。 データの表示フォーマット等に関するビューロジックは、ビュー側で処理するべき。 コントローラは必要なデータをモデルからひっぱってデータに渡すだけで表示内容には関与しない。 君の書き方だと、各種表示フォーマットやデフォルト値が変更になった時にビューで処理出来ないでしょう?
281 名前:nobodyさん mailto:sage [2008/10/14(火) 11:31:38 ID:???] >>265-266 と>>272-273 の違いは何ですか? MとCはコードに掲載していないだけでVとしては正しいと思います。 何が問題でしょうか?具体的に教えて下さい。
282 名前:nobodyさん mailto:sage [2008/10/14(火) 11:37:48 ID:???] >>280 変更される度にtpl.phpに修正を入れるんだろうな 単純にテンプレートファイルとビュー用のデータ加工のphpを分けてるだけみたいだし というか、やってる事はオレオレテンプレートエンジンな件について 要は生phpをテンプレートファイルにできればいいのかな?
283 名前:nobodyさん mailto:sage [2008/10/14(火) 11:50:37 ID:???] >>282 ねw 多分中学生か高校生の熱血PG志望者だよきっと。 俺も若い頃は動作の重さに超敏感だったし、Smartyとか使う奴はアホかと思っていたw
284 名前:nobodyさん mailto:sage [2008/10/14(火) 12:14:00 ID:???] >「Smartyをわざわざ導入する際のデメリット」 俺にはこれがわからん。 パッケージインストールもしくはダウンロード→インクルードパス下に解凍したらすぐ使えるよ? 習得の手間は人それぞれだろうけどおそらく196や周辺のPHP知ってるデザイナーは苦労したんだろうな。
285 名前:nobodyさん mailto:sage [2008/10/14(火) 12:15:43 ID:???] >>281 んーと 「V」にだけ着目するならどっちもただしい、 それこそ全部echo文でもただしいのではとおもいます! >>272-273 は「SmartyでできることはPHPでできる」、の一部のサンプルとして 1. 変数・関数のスコープの限定の実現 2. 生PHP?のテンプレートとしての(そこそこの)書きやすさの実現 (というかshort_open_tagの積極的な使用) を主眼においてつくってみました。 >>266 から>>273 に代わって 何か問題が解決したとすれば、主にはView用変数・ユーザ定義関数がグローバルでなくなったこと かなとおもいます(まちがってたらアドバイスください><)。 じぶんはというと今テンプレートに Smartyを使いつづけるか(といってもまだ使って一ヶ月ですが!) 否かまよっているところなので先人さんのいろいろな意見を参考にしたいところで、 最近このスレをみつけてせっかく興味のある話題にめぐりあえたのに 煽り合いばかりでおもしろくないなーとおもっているところです。
286 名前:nobodyさん mailto:sage [2008/10/14(火) 12:23:17 ID:???] お前が煽ってんだろが
287 名前:nobodyさん mailto:sage [2008/10/14(火) 12:28:17 ID:???] あ、>>277 さん、こちらこそありがとうございます>< 最初はもっとボコボコに叩かれるかもとおもってたので…
288 名前:nobodyさん mailto:sage [2008/10/14(火) 12:31:26 ID:???] >>286 煽ってないですが煽ってると思われたならあやまります。。 すみません
289 名前:nobodyさん mailto:sage [2008/10/14(火) 12:41:55 ID:???] >>285 >>265-266 「V」に着目するだけというかVのサンプルですが…。 MVC的に見ても、MもCも混在していないので間違いがわかりません。 どこに違和感を感じたのでしょうか? 仕組みを学ぶのは良い事だと思います。 しかし、もう少しSmartyを使い続けてみて下さい。 不満点も沢山見つかると思いますが、メリットも沢山見つかると思います。 「SmartyでできることはPHPでできる」はパッと見出来てるように見えてるだけで、 細かい実装(商業では必須ね)考えると、相当な開発負荷がかかります。 >short_open_tagの積極的な使用 現バージョンのPHPの推奨設定ではshort_open_tag=offなので注意して下さい。 PHP6以降では廃止される可能性もあります。
290 名前:nobodyさん mailto:sage [2008/10/14(火) 12:42:58 ID:???] >>285 Smartyでできる事を手間をかけてPHPだけで書いてもメリットないだろう 処理速度に多少のアドバンテージがあるくらいで、それも汎用的に書いていけば怪しい 個人的にはSmartyを使うメリットで一番大きいのは、使ってる人が多い事だと思ってる