1 名前:nobodyさん [2008/02/02(土) 00:21:09 ID:6cKcKeTp] まぬあるwww.smarty.net/manual/ja/
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を使うメリットで一番大きいのは、使ってる人が多い事だと思ってる
291 名前:nobodyさん mailto:sage [2008/10/14(火) 12:46:30 ID:???] SmartyもどきをPHPで作るくらいなら、俺はSmartyを使う。
292 名前:196 mailto:sage [2008/10/14(火) 18:57:31 ID:???] short_open_tagは俺の趣味です。 「ファイルの末尾に ?> を書かない」と同じくらい、趣味の領域だと思う。 なので、xmlとか読み書きする人は気をつけてください。 >>280 そうだね。当然、MVCという区分上は、tpl.phpはビューに相当する。 「コントローラに近い場所に書いている」という実装が悪いのかな。 例えばsymfonyだったら、tpl.phpこそがhogeSuccess.phpであるべきで、 hogeSuccess.phpからhoge.htmlをincludeしたほうが妥当ってことだよね。 コントローラがinclude_templateを呼ぶのはイビツなんだな。なるほど納得。 それを踏まえて再度意見を戴きたいのだけど、 ビューが分かれててその一方がPHPだと、何かまずいだろうか? モデルもコントローラも1ファイルじゃないといけないという理屈は無いよね。 >>282 そう。単純に「表示値の準備」と「表示処理」を分けているだけ。 > 要は生phpをテンプレートファイルにできればいいのかな? ナマじゃなくてもいいんだけど、Smartyほど大げさなモノは、個人的には使わないかな。 テンプレートファイル部分は出来るだけ薄いほうが好き。
293 名前:nobodyさん mailto:sage [2008/10/14(火) 20:46:31 ID:???] >short_open_tagは俺の趣味です。 なんだ、ただのひねくれものか お前、友達いないだろ? お前、自分の事出来る職人だと思ってるだろ? 周りは確実に引いてるパターンが目に浮かぶ もはやSmartyの話題でも無いので、MVCスレにでも行けや。
294 名前:nobodyさん mailto:sage [2008/10/15(水) 00:24:43 ID:???] >>292 >>278 のコードだけど、tpl.phpとbody.phpを合わせてSmartyで言うところのテンプレートだよね? tpl.phpでデータを整形をして、body.phpは体裁のみを担当と…。 これは君の主張していた ・Smartyより学習コストが低い ・(デザイナが)Smartyで出来る事は実現出来る には当てはまらないよね。 tpl.phpで扱える便利な関数群を提供してあげればいいんだろうけど、 それは>>290-291 の言うとおり、結局は我流テンプレートエンジンを作る事態になってしまうよね。 であれば既に完成されたSmartyから乗り換える理由にはなり得ないと思うんだ。 もっとも君が我流テンプレートエンジンを完成させて、公開してくれれば別かもしれないが。
295 名前:nobodyさん mailto:sage [2008/10/15(水) 00:45:46 ID:???] >>292 >ビューが分かれててその一方がPHPだと、何かまずいだろうか? >モデルもコントローラも1ファイルじゃないといけないという理屈は無いよね。 ビューをファイル分割する事は、 メリットよりデメリットの方が多い気がするんだよね。 まず、ファイルが増えればバージョン管理やデプロイの手間が増える。 >>278 の形式だとbodyの表示を修正したい場合、 読み込み元のtplを把握している必要があるし、 tplが読み込んでいるbodyが他に無いか等も把握していないといけない。 これは非常に面倒。 そんな理由で、どうしても整形処理を別ファイルにしたいのであれば、 tpl.phpからbody.phpを読むのではなく、 body.phpからtpl.phpを読むような形にするのが望ましいと思う。 <? // body.php ?> <? include "tpl.php" ?> <? $rows = $tpl->format($rows); // 整形 ?> <? include "header.php" ?> 〜 表示処理 〜 <? include "footer.php" ?> そうすると構文こそ違うものの、Smartyとやってる事はほとんど同じになる。 で、Smartyに相当するtpl.phpを作るのは誰がやるんだ…って話になる。
296 名前:nobodyさん mailto:sage [2008/10/15(水) 01:03:17 ID:???] >>289 じぶんは>>264-267 を見てつくってみたのですが おっしゃってることがよくわかりませんでした。。 Smartyはまだ触ってみるつもりではいます! >>290 さんのおっしゃっるとおり使う人が多いのはよいとおもいますし たしかカスタムタグみたいなこともカスタム関数でできるんですよね?? ただSmartyに不満を持つたびに、 PHPをちゃんとテンプレートとしてつかえたら、とおもいます。 PHPを使いはじめてから、short_open_tagとか制御構文の別構文(endif, ...)とか テンプレートとしてのPHPはすごくいい感じだとおもったので PHPがちゃんとテンプレートとして進化しなかったのがざんねんです。 テンプレートエンジン上にテンプレートエンジンをのっけるという感覚が 今割り切って理解できなくなっているのです。。 short_open_tagがXML処理命令の規則に合わないのはあきらめるしかないです。。
297 名前:nobodyさん mailto:sage [2008/10/15(水) 02:00:05 ID:???] PHPはすでにテンプレートエンジンとしては不全なんだろ。 それならSmartyを良くするとかもっと良いテンプレートエンジンを作るとかしたほうが生産的だと思うのだが。 まあ、PHPを良くするというのもありか。 しかしテンプレートとプログラムを同居させるというのはどだい無理があると思う。 Smartyのプログラム的文法もかなり無理やりだしな。
298 名前:nobodyさん mailto:sage [2008/10/15(水) 02:42:51 ID:???] >>296 PHPは正確にはテンプレートエンジンでは無いんですよ。 テンプレートエンジンのようにHTML内に組み込めるようになっているだけなんです。 >PHPをちゃんとテンプレートとしてつかえたら、とおもいます。 Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが) {php}echo "Hello World"{/php} >たしかカスタムタグみたいなこともカスタム関数でできるんですよね? PHPが解る人なら簡単に作れますよ。 (例) タグ内の文字列を置換するタグ{replace}{/replace}タグを作る場合 block.replace.php というファイルをpluginsディレクトリの中に作成し、次のコードを記述するだけです。 function smarty_block_replace($params, $content, &$smarty) { retrurn str_replace($p["search"], $p["replace"], $content); } 以降Smartyテンプレートで次のように記述出来るようになります。 {replace search="本当ですか" replace="マジッスカ"} {replace search="凄いですね" replace="パネェっす"} 本当ですか。 凄いですね。 {/replace} {/replace} // 出力:マジッスカ。パネェっす。 一見、PHP単体でも簡単に実装出来そうに見えますが、タグの入れ子処理等を考えると地味に面倒だったり、テンプレートの可読性が下がったりしますよね。
299 名前:196 mailto:sage [2008/10/15(水) 18:33:26 ID:???] >>294 tpl.phpが難しいから学習コストが高いということかな? ・PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない ・Smartyで出来る事は理論上すべてPHPで出来る(し、その手段もそれなりに用意されている) というのが俺の意見かな。 俺の環境はsymfonyで、sfFormか、helperか、sfSmartyViewPluginかの選択が必要なので、 既にSmartyで完成されたサイトとかを、わざわざリプレースする必要は無いと思う。 「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな? >>295 なるほど、俺にとっては斬新な発想だった。 ファイルの命名規則をしっかり決めれば、関連性はわかりやすいかと思ってたんだが。 tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。 「$nameの表示はescapeしてnl2brしてください」という要件を把握出来るのが、 デザイナーなのかプログラマーなのかによって話が大きく変わるんだろうな。
300 名前:196 mailto:sage [2008/10/15(水) 19:01:26 ID:???] せっかくなのでSmartyの質問をさせてくれ。 (是非はおいといて)>>278 のような事をSmartyで実現したい。 MVCで言うと、new Smarty();が書かれるファイルは、 モデルでもコントローラでもなく、ビューに属する事になる。 sfSmartyViewとかZend_View_Smartyみたいな位置づけになるわけだな。なので、 コントローラ(ラッパーにテンプレート変数を渡す) ↓ ビュー用のラッパー。内部的に$snarty->assign();が書かれる ↓ ★テンプレート変数の整形処理(Smartyの便利な構文で書ければ良い) $name = {$name|escape|なんたら|かんたら} ↓ テンプレートファイル(.tpl) {$name} みたいな風にしたいのだが、それは仕様上無理なんだろうか。 {assign}とか{eval}でいける? コストはこの際考えないことにして・・・。
301 名前:nobodyさん mailto:sage [2008/10/15(水) 19:38:33 ID:???] >>299 >tpl.phpが難しいから学習コストが高いということかな? 少なくともSmartyと比較したら数倍難しいし、 素人のロジックがシステムに混入する恐れがある。 define("DEBUG", 1); とか $_POST["xxx"] = "debug data!"; とか書かれてたら寒気しない? >Smartyで出来る事は理論上すべてPHPで出来る これは逆じゃないかな。 「symfonyで出来る事は全てPHPで出来る」と言ってるのと同じで、 Smartyは所詮PHPライブラリに過ぎないんだから。 > PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない >「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな? 仮にPHPが触れるデザイナがいたとしても、 上に書いたようにセキュリティの観点からは、システムに影響を与える権限を与えないのが普通だと思う。 少なくとも外注のデザイナには絶対に触らせたくないよね。 >tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。 tpl.phpはビューである以上、デザイナが触るべきだと思う。 ロジック的にMVCを分けても、管理体制(担当区分)がわかれていないとエラーが出た時に面倒だから。 そういう意味ではSmartyはその機能性より、 コードの統一性や管理体制に与える恩恵の方が大きいのかもね。
302 名前:nobodyさん mailto:sage [2008/10/15(水) 20:31:43 ID:???] >>300 >(是非はおいといて)>>278 のような事をSmartyで実現したい。 {assign}{capture}{eval}あたりで出来るよ。 コンパイル後のソース見ればわかるけど、assignなんかはコストもほとんど変わらない。 // format.tpl {assign var="name" value=$name|escape|default:"no name"} {include file="body.tpl"} // body.tpl {$name} >MVCで言うと、new Smarty();が書かれるファイルは、 >モデルでもコントローラでもなく、ビューに属する事になる。 自分はSmarty自体をビューとして考えているかな。 コントローラがビュー(Smarty)を生成し、レスポンスデータを渡す。 ビュー(Smarty)は与えられたレスポンスデータを元に画面を表示する。 ↓こんな感じ。 class Controller { public function action() { // 実際にはSmarty継承クラスor内包クラスになる $view = new Smarty(); // 必要な処理をしてビューにレスポンスデータを渡す $view->setResponse(new Respose(xxxx)); // 整形や表示処理は全てビューにまかせる。 $view->render(); } }
303 名前:nobodyさん mailto:sage [2008/10/15(水) 20:34:36 ID:???] PHPが書けないデザイナをヘボとか言っちゃう人とは仕事したくないなあ jspが書けないデザイナもヘボなんだよね? MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない うーん、大変だな
304 名前:nobodyさん mailto:sage [2008/10/16(木) 02:49:37 ID:???] >>298 > PHPは正確にはテンプレートエンジンでは無いんですよ。 そうなんですか?? > Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが) んんーSmarty内でPHPコードを書くのは本末転倒というか本末転倒ですよね。。 あとカスタムタグ?のサンプルありがとうございます! ttp://smarty.incutio.com/?page=foreachgroupというのがおもしろそうでした!
305 名前:nobodyさん mailto:sage [2008/10/16(木) 03:51:12 ID:???] >>304 PHPはプログラミング言語の名称ですよ。
306 名前:nobodyさん mailto:sage [2008/10/16(木) 08:06:34 ID:???] >>303 CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw 個人的にはデザイナはPHPとか勉強するヒマあったら、 システムに組み込みやすいスマートなHTMLコーディング技術を学んで欲しいわ。
307 名前:nobodyさん mailto:sage [2008/10/16(木) 17:56:46 ID:???] >>305 そりゃ、そうでしょうとも…!
308 名前:nobodyさん mailto:sage [2008/10/16(木) 19:53:26 ID:???] PHPという言語は<?php ?>タグの外をそのまま出力するという言語仕様なだけでテンプレートエンジンでは無いよね。
309 名前:196 mailto:sage [2008/10/19(日) 11:55:40 ID:???] なるほど、このスレには分業指向の人が多いんだな。 >>301 {php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。 デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、 へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。 >>302 やっぱり、そうなってしまうよなあ。 上で「それはMVCではない」と言われてから、内心悩んでたんだけど。 Smartyの解説ありがとう。その線で学習コストが等価になれるか検討してみる。 >>303 JavaとかMT(使ってる人いるのか?)のプロジェクトなら、そうだろうね。 >>306 HTML書けません、というプログラマーとは間違っても一緒に仕事しないよ。 というより、Smarty文法がわからないデザイナーと一緒に仕事しないでしょ? 同じことでないの?
310 名前:nobodyさん mailto:sage [2008/10/19(日) 15:09:25 ID:???] >>309 >{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。 {php}{/php}タグは禁止に出来ます。 >デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、 >へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。 逆になんで必要の無い権限を与えるの?それによるデメリットは考慮しないの? まっとうなセキュリティの考え方だったら「必要な権限以外は与えない」のが常識だと思うんだけどね。 最低限の権限で不便させない環境を提供出来ないシステム屋こそへぼい人だと思う。 参考までにいくつか質問させておくれ ・プロジェクトの人数とか連携手法やらバージョン管理方法は? ・テンプレートPHPでエラーが出たら誰の責任になるの? ・テンプレートに使ってるPHP系のライブラリとかは?
311 名前:196 mailto:sage [2008/10/19(日) 15:56:49 ID:???] >>310 デザイナーに権限を与えたくないなら、HTMLだけを納品させて、 コードレビューとサーバへの設置はプログラマーがやればいいじゃん。 デザイナーにサーバへの書き込み権限を与えた時点で、 (仮にあらゆるコマンドの実行をサーバ上で絶対に行えなくしたとしても) デザイナーはシステムの正常動作責任を一部負う事になるのは間違いない。 たとえば、必要なパラメタを渡さなかったとか、ファイルを消しちゃったとか。 だから、あらゆる操作をサーバ上で絶対に行えなくすることのメリットは、 デザイナーがサーバを壊さないようにする、という程度に過ぎないので、 それなら優秀で信頼のおけるデザイナーと仕事したほうがいいんじゃないの? と思う。 質問の答えだけど、製品が完成しなかったらチーム全体の責任。 デザイナー主導の案件でもプログラマー主導の案件でも、 インタフェース定義の必要性は発生し、それは両者(主に主導側)の責任になる。 Smarty単体ではシステムの仕様テストは行えないので、 「言われたとおりのSmartyテンプレートだけ書くからあとは知らないよ」というデザイナーは、 HTMLだけしか書かないデザイナーと大して変わらない。 なので俺はそういうデザイナーとは仕事してないし、 もしデザインを外注する事があっても、Smartyの学習を促す事は無いと思う。 あえて擁するなら、へぼプログラマーと連携する時には、Smartyは役に立ったな。 あれを安直に使えば、嫌でもビューとロジックが分離出来るから。 でも今はフレームワークを使うのが普通なので、そのメリットは感じられなくなった。
312 名前:196 mailto:sage [2008/10/19(日) 16:30:50 ID:???] 超極端な例として、>>310 の議論にとって最も良い条件を考える。 ・顧客がWebデザインを自分で更新したいと要望している 実力はへぼかも知れないが、お客様なので無碍にも出来ない ・プログラム開発も初期デザインも業者が行い納品する ・サーバは業者が貸与するので、壊されないように配慮しなければいけない ・ssh権限は与えず、ftpsでテンプレートファイルだけ更新できるようになっている ・プログラムの動作責任は業者が負わないといけない ・テンプレート更新内容のチェックに業者の人的コストは割けないので、 更新はノーチェックで行い、システムが正常動作しなくなった責任は顧客に負わせなければいけない ・テンプレートにはプログラムから変数を埋め込まなければいけない ・顧客はSmartyの心得と導入への理解がある ・Smartyのうち危険なタグをすべて洗い出し、設定で使用を禁止している ・テンプレートでエラーが出てもセキュリティ的に不適切な出力は行われないよう設定されている それでも ・パラメタエラー ・クロスサイトスクリプティング の問題は残り、特に後者はインタフェース側で検出する事が出来ない。 お客様が |escape を書き忘れただけで。 なので>>302 の仕組みがあれば、完全に縛ることが可能だろうか、と思った。 でも、ここまで極端な事例でもない限り、デキル人を探した方が早いなぁ。 顧客には任意の静的HTMLを特定箇所にinclude出来る仕組みのみを提供するとか。 Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
313 名前:nobodyさん mailto:sage [2008/10/19(日) 17:55:19 ID:???] とにかく難癖つけてSmarty叩きたいのはわかったけど、 結局君がSmarty使いこなせてないだけじゃんww 100%の対策なんて無いんだから、対策しないって言ってるだけって事に気付けww >デザイナーに権限を与えたくないなら、HTMLだけを納品させて、 >コードレビューとサーバへの設置はプログラマーがやればいいじゃん デザイン修正の度にやるんすか。 >デザイナーにサーバへの書き込み権限を与えた時点で 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。 ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。 消される恐れがあるとわかってて何故権限を与える?w >Smarty単体ではシステムの仕様テストは行えないので、 わぁ、きっと君のところはMVC分けが出来てないんですね>< フレームワーク使えば大丈夫とか思ってるんですね><
314 名前:nobodyさん mailto:sage [2008/10/19(日) 18:12:47 ID:???] >・パラメタエラー >・クロスサイトスクリプティング >の問題は残り、特に後者はインタフェース側で検出する事が出来ない。 >>>302 の仕組みがあれば、完全に縛ることが可能だろうか、と思った。 default_modifiersやフィルタって知ってます? >Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。 もうSmarty叩きはいいからさ その安全で扱いやすい俺俺テンプレートエンジンを見せてよ。 君の主張は前提と具体性がないから水掛け論だよ…。 まさか専門学校生じゃないとは思うけど質問に具体的、箇条書きで答えてくれよ。 ・プロジェクトの人数は? ・連携手法は? ・バージョン管理方法は? ・デプロイ方法は? ・使用しているPHPライブラリは? ・使用しているフレームワークは? ・使用している俺俺テンプレートエンジンは?
315 名前:nobodyさん mailto:sage [2008/10/20(月) 12:22:54 ID:???] こんなに活発に意見交換があるのに、 どうしてココは『隔離スレ』なの?
316 名前:nobodyさん mailto:sage [2008/10/20(月) 12:27:38 ID:???] 名目はともかくスレ独立してるのはありがたいので別にいいや。
317 名前:196 mailto:sage [2008/10/20(月) 18:54:05 ID:???] >>313 煽っているように見えて>>311 と同じ事を言っているように見える。 なので異論は無い。むしろ、まったくその通りだと思う。 >>314 default_modifiersは初めて知った。 nodefaultsと組み合わせれば、symfonyのescaping strategyに近い所まではいけるな。 escapeはプログラマーの責任でもなくデザイナーの責任でもなく、 フレームワークが基本的に便宜を図る、という解釈をすれば、悪くない思想だと思う。 後半については答えても意味が無いと思うし、 別にSmartyを否定する事が主目的で発言している訳ではないと言っている。 世の中にはSmartyを使うのに明らかに向かない案件もあるし、 そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。 逆に「Smartyを使うならこんな規模や状況やツールに最適だよ」という意見があれば、 それは主張してくれればいいと思う。
318 名前:nobodyさん mailto:sage [2008/10/20(月) 19:11:06 ID:???] >>317 default_modifiersは問題がある(ソースに手を入れれば回避可能だが)から使わないって話なら聞くが Smartyを3年使ってて知らないってどんだけ・・・ そもそもなんでこのスレにいるん?
319 名前:nobodyさん mailto:sage [2008/10/21(火) 01:33:33 ID:???] >>317 >世の中にはSmartyを使うのに明らかに向かない案件もあるし、 >そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。 本当にそう思ってるなら196から出てくる発言はありえないと思うんだよね。 シチュエーションも取り上げずに、否定だけされても納得は出来ないじゃない? 「俺ならこうする」って意見も無しにダメだしされてもなぁ…default_modifiersすら知らないみたいだし、 単にSmartyの事知らないだけですよね? 議論では無く、相手を論破する事が目的になってませんか? なんでこのスレにいるん?
320 名前:nobodyさん mailto:sage [2008/10/22(水) 10:19:46 ID:???] >>313 と>>311 が同じに見えるって、どんだけ読解力無いんだお前は… 相反する事言っているのに、なんで>>313 に対しては異論唱えないんだ。
321 名前:196 mailto:sage [2008/10/22(水) 11:20:52 ID:???] simplateのメンテに貢献したほうがマシな気がしてきた。 >>318 そうだっけか。じゃあ使い物にならないから忘れたのかな。 いずれにせよSmarty使ってた頃は、そこまでいじる気自体が無かったな。 >>319 俺ならこうする、という意見も、具体的なコードも書いたし、 Smartyを否定する事が主目的でも無いし、Smartyのわからないところは質問した。 発言する前にきちんと流れを読んでくれ。 直近の議論は294,299,301,309,310,311だ。 >>320 > 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。 > ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。 > 消される恐れがあるとわかってて何故権限を与える?w という意向と>>311 との違いは状況判断の部分だけ。 俺は手動デプロイなんていちいちしたくないので、 信頼のおける優秀なデザイナーと仕事をする。 だけど、信頼のおけないデザイナーと仕事せざるを得ないなら、 >>313 の言うようにするのもわかる。 前提とか本人の置かれている状況が違うだけなので、特に反論は無い。 それとも、 「デザイナーには完全な制限と束縛を課して徹底的に管理しろ」 というのが一番言いたいことなのかな? Smartyを使ってデザイナーを檻の中に隔離するんだ、みたいな思想なのかな。
322 名前:196 mailto:sage [2008/10/22(水) 12:12:03 ID:???] 俺が何故このスレに居るのかとよく問われるので、 お言葉に甘えさせて戴き、整理させていただく。 俺が思う結論 ・Smarty文法 {$name} のPHP文法 <?=$name?> に対する優位性 →メソッドチェインはSmarty文法が少し短いが、習得コストに大差は無さそう。 →short_open_tagを使いたくない/使えない場合はPHP文法が長くなるが同上。 ・Smarty関数 {hoge} のPHP関数 hoge() に対する優位性 →車輪の再発明をする必要が無いのが利点。 →なので別のライブラリやヘルパーなどでも良い。 ・Smartyのdefault_modifiersを使いビューのHTMLを安全にすること。 →設計と実装は不完全だが、フレームワークに任せるという考え自体は良いかも。 ・ビュー用の変数構築とビューのHTMLファイルを分ける意義 →Smartyで実現するには{assign}{capture}{eval}を使えば可能。 →デザイナーに変数構築をやらせる前提では二度手間に感じる。 →プログラマーが変数構築を担当可能な所には意義があると思うし、 default_modifiersの不具合をフォローすることも出来そう。 ・Smartyはデザイナーがシステムを壊さないよう完全に束縛できるか →100%束縛したり管理するのは不可能そう。 →PHPコード実行の抑止の為にテンプレートエンジンを使うのは一応有効。 何か主張されたのかも知れないと思っていること ・Smartyや他の手段を駆使してデザイナーをシステムから隔離する事自体の意義 権限とリポジトリの管理と手動デプロイを常に徹底すれ →俺は優秀なデザイナーを使うかHTMLで納品させるというアプローチ。 手動管理はめんどくさいし、たとえ客でも保守費用払わなかったらやりたくない。
323 名前:nobodyさん mailto:sage [2008/10/22(水) 13:25:17 ID:???] だめだこいつ…芯の通った主張が一つもないから、結局何に結論づけてるのかもわからん。 「…で?」としか言えないわ。
324 名前:nobodyさん mailto:sage [2008/10/22(水) 13:32:44 ID:???] default_modifiers忘れてただけとか言い訳が恥ずかしすぎるwww 結局使いこなせてないだけに一票。 「俺の環境ではSmartyが馴染まない」とか、凄くどーでもいい事なんで こんな所でファビョってないで自作エンジンの制作作業に戻るんだ。 ここは君みたいな優秀なプログラマやデザイナが来ちゃいけない場所なんだ。 な。
325 名前:196 mailto:sage [2008/10/22(水) 18:45:58 ID:???] >>324 一体どんな環境なら馴染むの?
326 名前:nobodyさん mailto:sage [2008/10/22(水) 20:54:01 ID:???] >>325 使いこなせればどんな環境でも馴染ませられるよ。 出来ないのはヘボプログラマくらいだろうね。 君は何がしたいんだい? Smartyを使う気がないなら、こんなスレにいる必要無いんじゃないのかな?
327 名前:質問です mailto:sage [2008/11/02(日) 19:17:14 ID:???] PHPにて for(i=0;i<6;i++){ echo "$_POST[$i]"; } みたいなことをsmartyでやる場合、 {section name=i loop=5} {$smarty.post.i} {/section} だと受けとれません。 $_POST[i] としてもだめなようで、 ループしてる回数を、POSTで受けとった配列のキーに割り当てるには どう書けばいいんでしょうか?
328 名前:nobodyさん [2008/11/02(日) 19:19:30 ID:JfJ9McaH] あげます。
329 名前:nobodyさん mailto:sage [2008/11/02(日) 20:49:20 ID:???] 書き方くらいちゃんと見なされ
330 名前:nobodyさん mailto:sage [2008/11/02(日) 21:45:09 ID:???] section.{sectionname}.index でループ回数(正確にはstartから増分される値)を取得できる。 その前にpostはassignされてるのか気になるのだが・・・
331 名前:327 [2008/11/03(月) 23:53:06 ID:CUNAecRE] 329さん、330さん、ありがとうございます。 330さんの言うとおり、section.{sectionname}.index で ループしてる回数を受けとれるのはわかるんですが、 その現在の回数をPOSTで受けとった配列のキーにするにはどのように書けばいいんでしょうか? 単なる配列をまわすときには、 {section name=i loop=$arr} {$arr[i]} {/section} でいけると思うんですが、それがPOSTの配列の場合は一回assignしないといけないんでしょうか? $smarty.post.キー で受けとれると思い込んでいたんですが。
332 名前:nobodyさん mailto:sage [2008/11/03(月) 23:56:08 ID:???] マニュアル見てる?
333 名前:nobodyさん [2008/11/14(金) 17:52:36 ID:nqLSKBoW] すいませんが、教えてください。 php -r 'require "Smarty/Smarty.class.php";' PHP: Error parsing /etc/php.ini on line 511 PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1 PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/usr/share/pear') in Command line code on line 1 というエラーがでます。 パスは UNIX: "/path1:/path2" include_path = ".:/php/includes.:/usr/lib/php/Smarty-2.6.20/libs/" こうしているのですが、
334 名前:333の続きです。 [2008/11/14(金) 17:53:36 ID:nqLSKBoW] chown nobody:nobody /var/www/html/smarty/templates_c/ chown 770 /var/www/html/smarty/templates_c/ chown nobody:nobody /var/www/html/smarty/cache/ chown 770 /var/www/html/smarty/cache/ <?php require_once(SMARTY_DIR . 'Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = '/var/www/html/smarty/templates/'; $smarty->compile_dir = '/var/www/html/smarty/templates_c/'; $smarty->config_dir = '/var/www/html/smarty/configs/'; $smarty->cache_dir = '/var/www/html/smarty/cache/'; $smarty->assign('name','Ned'); //$smarty->debugging = true; $smarty->display('index.tpl'); ?> と持っていったのですが、どうしてエラーがでるのかわかりません。 教えてください
335 名前:333の続きです。 [2008/11/14(金) 19:12:47 ID:nqLSKBoW] 現在のエラーです。 PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1 PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/php/includes:/usr/lib/php/Smarty-2.6.20/libs') in Command line code on line 1 もう一度インストールからはじめたのですが、だめでした。 お願いします。 教えてください
336 名前:nobodyさん mailto:sage [2008/11/14(金) 19:56:05 ID:???] はぁ?お前は何を言ってるんだ? /usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php の場所にこのファイルはあるのか?
337 名前:333の続きです。 [2008/11/14(金) 19:56:14 ID:nqLSKBoW] 自己解決しました。 疲れました
338 名前:nobodyさん mailto:sage [2008/11/15(土) 22:34:31 ID:???] もしかして、smarty使ってローカルでテストすると、 それが完成したアカツキには、レンタルサーバーにも smartyをアップロードしないと動かないの??
339 名前:nobodyさん mailto:sage [2008/11/15(土) 22:40:28 ID:???] そりゃあレンタルサーバーにsmartyがインストールされてるかどうかだろ されてなきゃ自前でアップロードしろ
340 名前:nobodyさん [2008/11/16(日) 14:34:54 ID:VgwBTNK+] >>338 一体何をincludeするつもりなのか
341 名前:nobodyさん [2008/11/17(月) 21:26:39 ID:WEpi9J1I] smartyってのはカスタム関数が便利なんだよ そんで、そのカスタムタグつくったから適当に使ってよ、とクライアントに投げるの。 好き嫌いは有るけど、生phpより見やすいわけね。 OK?
342 名前:nobodyさん mailto:sage [2008/11/18(火) 01:32:18 ID:???] >>338 たいがいのフレームワークはそうなんじゃないの
343 名前:nobodyさん mailto:sage [2008/11/18(火) 06:18:46 ID:???] >>341 テンプレートエンジンの理想型だよな。 PGにもデザイナにも優しい。 Smarty3で速度面が大幅改善されるっぽいので期待している。
344 名前:nobodyさん mailto:sage [2008/11/19(水) 00:19:12 ID:???] >>343 テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。 まあプラグインで作れることは作れるんだが
345 名前:nobodyさん mailto:sage [2008/11/19(水) 04:25:55 ID:???] Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?
346 名前:nobodyさん [2008/11/20(木) 11:05:10 ID:WBdj1Bs+] Pearでカレンダーやメニューを作成してテンプレートに出力させたいんだが このような場合、みなさんどうしてます? テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?
347 名前:nobodyさん mailto:sage [2008/11/20(木) 11:18:04 ID:???] >>346 つ{insert}
348 名前:nobodyさん mailto:sage [2008/12/03(水) 23:41:44 ID:???] これってDjangoみたいなテンプレートの継承ってできないの?
349 名前:nobodyさん mailto:sage [2008/12/03(水) 23:58:50 ID:???] >>348 簡易的なモノなら簡単に作れるから自作すれ。
350 名前:nobodyさん [2008/12/05(金) 11:52:26 ID:jMVHCYUr] template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。 template は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。
351 名前:nobodyさん mailto:sage [2008/12/05(金) 13:30:34 ID:???] cacheを混乱させそうだな。
352 名前:350 [2008/12/05(金) 14:12:47 ID:jMVHCYUr] やめときます。 おとなしく対応させて作ります。 ありがとうございました。
353 名前:nobodyさん mailto:sage [2008/12/05(金) 20:37:51 ID:???] >>350 コンパイルID指定すればOK www.smarty.net/manual/ja/api.fetch.php
354 名前:nobodyさん mailto:sage [2008/12/06(土) 01:16:24 ID:???] ほうそんな機能が・・・ メリットがまったく思いつかないけど覚えておきます
355 名前:nobodyさん mailto:sage [2008/12/06(土) 01:36:14 ID:???] いやわかれよw
356 名前:nobodyさん mailto:sage [2008/12/07(日) 09:29:45 ID:???] もー!ヽ(`Д´)ノ sfCutString:5とかにすると5文字表示とかってあるよね? これって反対に、後ろからの5文字を削除とかって出来ないの? 教えてくださいな(´・ω・`)
357 名前:nobodyさん mailto:sage [2008/12/08(月) 09:59:13 ID:???] ないものはつくるんだ
358 名前:nobodyさん mailto:sage [2008/12/08(月) 16:34:14 ID:???] ついでに車輪も作っとけ
359 名前:nobodyさん mailto:sage [2008/12/08(月) 23:18:30 ID:???] あってもつくるんだ
360 名前:nobodyさん mailto:sage [2008/12/09(火) 12:27:40 ID:???] 車輪の再発明は偉大!
361 名前:nobodyさん mailto:sage [2008/12/22(月) 09:45:58 ID:???] テンプレートエンジンの選択で迷ってるんですが、 smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか? 人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?
362 名前:nobodyさん mailto:sage [2008/12/22(月) 13:12:51 ID:???] smarty以外を選択する理由がない
363 名前:nobodyさん [2008/12/22(月) 13:56:20 ID:fwOoSy8e] 自作する。 多分テンプレート変数を置換する以上のことはできないだろうけど
364 名前:nobodyさん [2008/12/31(水) 21:47:49 ID:8KFb7g3b] 今作ってるサイトで、smartyが動かないんですが何が原因と考えられるでしょう? 動作させてる環境は2つあり、動かないのはそのうち一つだけです。 Smarty.class.phpへのパスは相対できちんと通していて、同じファイルを その2つにUploadすると片方でのみ動いてくれません もちろんそちらでもphpは動いてるんですが、、 原因を探る方法はないでしょうか? phpが動くサーバなら動くはずなんですよね? 文字コードとかは関係あるでしょうか? 現状では $smarty->assign('testvar','テスト'); echo "ここまでOK1"; $smarty->display('sample.tpl'); echo "ここまでOK2"; とすると、 「ここまでOK1」だけ出力します「2」はしません また、せめてassignがちゃんと成立してるかだけでも知りたいですがどうしたら いいでしょうか? ご意見よろしく御願いします
365 名前:nobodyさん mailto:sage [2008/12/31(水) 21:49:40 ID:???] >>364 error_reporting display_errors
366 名前:nobodyさん mailto:sage [2008/12/31(水) 23:02:30 ID:???] 池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。 911では小型の水爆が使用されている。 ri ■ch■ardkosh■im■izu.at.webry.info/ 創価の保険金殺人事件。 オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。 www15.ocn.ne.jp/~oy ■ako■don/kok_web■site/ir■iguc■hi.htm 与党も野党もメディアも全部朝鮮人だった。 jb ■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/ 2ちゃんねるは統一■教会が個人情報を集めるための道具。運営には統一■教会がいる。 駅前で「手相を見せてください」と勧誘してるのが統一教■会。(カルト宗教) カルト宗教の下にいる人と上にいる奴を分けて考えないといけない。下にいる利用される人は上がどんなことをしてるか知らない。 ユダヤ権力の子分→2ちゃん運営=統一協会上層部=層化上層部=自民党清和会=野党の朝鮮人ハーフの政治家= 与党の朝鮮人ハーフの政治家=金 正日(キム・ジョンイル )=読売サンケイ=小沢十朗 ユダヤ人=ロックフェラー=ブッシュ=クリントン=ヒラリー=アドルフ・ヒトラー=オサマ・ビンラディン 毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。 荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。 現実には「ネトウヨ」などは存在しない。 changi.2ch.net/test/read.cgi/ms/1230363385/
367 名前:nobodyさん mailto:sage [2008/12/31(水) 23:44:19 ID:???] >>365 ありがとうございます、解決しました
368 名前:nobodyさん [2009/01/02(金) 21:57:29 ID:PIvYRgwW] 月(1月〜12月)を選ぶプルダウンの出力と、selected=selectedの扱いについて質問です $monthAry[] = "1月"; から $monthAry[] = "12月"まで配列にして $smarty->assign('monthAry',$monthAry); としました。 formを出力するテンプレートファイルでは以下のようにして、プルダウンのoptionに出力しています。 {foreach from=$monthAry item=var} <option value="{$var}">{$var}</option> {/foreach} この書式で、確認画面からの戻り値{$month}(assign値です)とoption要素のvalueが等しければselectedと するために以下のようにしたんですが、あまりきれいなソースじゃないと思います {foreach from=$monthAry item=var} <option value="{$var}" {if $var==$month} selected="selected" {/if} >{$var}</option> {/foreach} 一応ちゃんと動いてますが、もっときれいで効率的な書き方はないでしょうか?
369 名前:nobodyさん mailto:sage [2009/01/02(金) 22:04:07 ID:???] >>368 www.smarty.net/manual/ja/language.function.html.select.date.php
370 名前:nobodyさん mailto:sage [2009/01/02(金) 23:18:35 ID:???] >>369 横ですがこれのselectedって現在時刻じゃないですか?
371 名前:nobodyさん mailto:sage [2009/01/03(土) 01:08:00 ID:???] >>369 こんなのがあったんですね、ありがとうございました。
372 名前:nobodyさん [2009/01/04(日) 08:20:15 ID:S9BZj0MW] フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき {$name|escape} とすれば上記のとおり見れますよね。 これを、修正画面に持ち越したいときはどうしたらいいんでしょうか? <input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし <input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の inputの表示がおかしくなるし、、 ご意見よろしく御願いします
373 名前:nobodyさん mailto:sage [2009/01/04(日) 08:53:47 ID:???] セッション
374 名前:nobodyさん mailto:sage [2009/01/04(日) 17:11:37 ID:???] >>373 ありがとうございます 解決しました
375 名前:モンピー77 [2009/01/05(月) 09:16:41 ID:mGW0zuF3] Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを しているのですが $o_smarty->default_modifiers = array( 'escape:"html"' ); 配列にも適用させること可能なのでしょうか? みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?
376 名前:nobodyさん mailto:sage [2009/01/05(月) 11:59:56 ID:???] >>375 default_modifires はクセがあるから気をつけたほうがよいよ。 {foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。 >Smartyを使った場合のサニタイズはどんな風にされていますか? 基本的には必要な箇所全てにescapeを書いてる。 上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。
377 名前:nobodyさん [2009/01/07(水) 10:21:31 ID:nbhiW1pd] >>375 そもそもPHP側ですませておく。 なんのために分離してるのかと
378 名前:nobodyさん mailto:sage [2009/01/07(水) 11:39:38 ID:???] サニタイズはビュー側でもOKだと思うが。