【PHP】 Smarty 隔離スレ 【テンプレート】
1 :
nobodyさん :
2008/02/02(土) 00:21:09 ID:6cKcKeTp
smartyのことを聞きたいやつはとりあえずここに書き込め
なんで隔離なの?
ソースと別って意味か?
5 :
nobodyさん :2008/02/09(土) 22:07:45 ID:c9Rr2KUa
HTMLの中にコードが書けるのがPHPの特徴だったのに、なんでテンプレートエンジンなんか使うの? テンプレート使うくらいならPHPなんか使わずにPerlを使った方が効率が上がるのに。
別にSmartyなんて質問することなくね?
7 :
nobodyさん :2008/02/20(水) 11:19:49 ID:q0lktVll
カスタム関数のdefaultを空白('')にして、かつ、もし値があればstring_format(%0.1fなど)して表示するにはどうすればいいですか?(できればif文を使わずに) 現状では、値が無い場合に0.0という表示が必ず出てしまいます。 defaultを先にしても後にしても同様です。 どなたかお願いします。
ちょっと調べてみたところ HTMLとPHPが混在した形とSmartとで表示速度が5倍以上違う(当然前者の方が速い)らしいのだけども なんか他に高速なテンプレートエンジンってないの? 処理速度さえ高速なら機能は最低限でいいんだけど
10msが50msになったところで大して変わらなくね?
10 :
nobodyさん :2008/03/03(月) 15:19:04 ID:FhmTLeYh
>>9 5倍も違うんだと、アクセス多いと如実に効いて来るよ。
11 :
nobodyさん :2008/03/10(月) 20:24:56 ID:la5GJf3w
compile_dir配下にできるファイルの パーミッションを0600にしたいのですが smartyの設定でありますか?
12 :
nobodyさん :2008/03/11(火) 08:47:15 ID:GwdF10l+
smartyと関係ないだろ umaskとかしとけばいいんじゃね?
13 :
11 :2008/03/11(火) 11:14:01 ID:???
>>12 ごめんなさい
smartyの設定ではできないんですね
umaskでやることにします
質問したいんですけどいいですか? ↓
↓どうぞ
それにしても、アンチスレは別だとして 「できない」ってことを言えない人がいるよね。
17 :
nobodyさん :2008/03/12(水) 10:42:36 ID:gvIujdzc
キャッシュを600にする意味って何あるん?
Smartyというのは、既にフォームがPHPで書かれてて、それを自分でカスタマイズするって感じですか?
そんなわけねーだろw
じゃあ初心者には難しいですね
初心者向けだが、素人向けではない。
どうもお世話になってます。 SmartyはApacheで確認できないんですね
動きました。 ありがとうございます
26 :
nobodyさん :2008/03/18(火) 12:21:04 ID:YNr5gB9L
html_select_dateを使用してデフォルト値を決めた場合、javascriptを使って、変更後の値をデフォルト値に戻すことは可能でしょうか? 例えば開始と終了日付がありリセットボタンが押された際にjavascrptが、動いて片方だけデフォルト値に戻る等
これってけっこうひどいねw 作ったやつらってあまり賢くないよなw
>>27 誰がどう見ても、おまえよりは数倍賢いと思うぞw
29 :
nobodyさん :2008/04/11(金) 13:33:17 ID:lTuTwlT7
Config_File.class.phpの130行目でOnly variable references should be returned by referenceのNoticeエラーが出る ソースみたらリファレンスで返さなくちゃいけないのに function &get($file_name, $section_name = NULL, $var_name = NULL) リファレンスで返してない return (array)$this->_config_data[$file_name]["vars"];
30 :
nobodyさん :2008/04/14(月) 01:03:25 ID:iLkauD+A
assign_by_ref('test', 1) みたいな事やるとなにがしかのエラーが出たと記憶していたのですが、 今試してみたらエラーが出ません。 どこかのバージョンから変更になったのでしょうか? それとも元からが勘違いだったのでしょうか?
31 :
nobodyさん :2008/04/14(月) 05:42:53 ID:/O4ED1WG
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
32 :
nobodyさん :2008/04/18(金) 06:04:17 ID:uLMECrIl
escapeを何度も通過して実体参照を実体参照にしてしまう問題を解決したいです。 <textarea name="hoge">{$hoge|escape}</textarea> というテンプレートで入力フォームを作りました。 入力フォームに値を入れて画面遷移するとデータベースに入力内容を入れて完了画面がでます。 同じ入力フォームでデータの更新をするページを作ると問題が発生しました。 タグ文字列は通過させながらもHTMLが壊されないようにしないといけないのですが、いい方法ないでしょうか。
入力フォームやらデータの更新とやらの話は関係なくね?
入力文字列をphp側で受け取ったときにunescapeすればいいのでは?
35 :
nobodyさん :2008/04/18(金) 08:13:30 ID:Kck9JNI8
ページの出力時に任意のヘッダを挿入したいとき、 どのようにすればよいでしょうか。 display()する前に、phpのheader()を書くことで、 追加できてはいるのですがコードの流れ的に不自然というか・・ あと、例えばContent-lengthヘッダを追加したいとかなると、 ますますテンプレートと行き来することになり、ますます変な気がします。 Smartyでヘッダ追加の関数はあるんでしょうか。
Smartyつかうとすげー楽になるっていう実例おしえてくだしあ!!
マニュアル見れば書いてあるよ
38 :
nobodyさん :2008/04/20(日) 00:29:00 ID:ui/WcxXd
>>36 キャッシュとかカスタムプラグインとかいろいろ
しかしキャッシュONにするとテンプレート変更しても反映されないのは何とかならないものか
それマジでダルいよな。 変更判定をしっかりやって欲しい
>>36 複数のサーバで同じシステム使っているのだが
phpファイルの変更にはツール使って一発で全サーバ更新できるので便利。
デザインやリンク先の違いも全部吸収できる。
まあテンプレートエンジンならなんでもいいんだけど
速度よりメンテ性重視にするとSmartyになった。
思うんだけど、Smarty使って{}のコードをhtmlに埋めるのと PHPの<?php ?>でhtmlファイルをPHP化して埋めるのと、 あまり大差無いと思うんだが。 デザインとプログラムの分離としてしばらく勉強してきたけど、 Smarty専用のコードを覚える=プログラムを覚えることと同義な気がする。
Smatyの機能は{$var}で変数が表示できることだけですよね。わかります。
でも、デザイナがなんとなく書いたPHPコード付きhtmlなんて怖くて使えないだろ?w 誰かSmartyリファクタリングしてくんねーかなぁ、 default_modifiersバグや、キャッシュの反映チェックがぬるい等 便利機能がいまいち使いこなせないのが辛い。
>でも、デザイナがなんとなく書いたPHPコード付きhtmlなんて怖くて使えないだろ?w それもあるんだよなw 一度デザイナーからhtmlを受け取ってシステム化した後、 修正が入る場合、画像作成とか以外では、PG側がしなきゃいけないもんな。 でも、それもデザイナーがSmartyのソースいじる可能性もあるし、 やっぱり同じ事のような気がする。だから厳密なデザインとプログラムの分離 とは行かないんだよな。
47 :
nobodyさん :2008/04/23(水) 15:25:42 ID:pSFXKy0F
>>42 ボタン1つで複数のサーバにsshアップロードする機能があるFSW。というか自作だけど。
以前はテンプレートエンジンなしでこのツール作ってたが1サイトだけマーキー入れてほしいとかいう要望に対しては
手作業で対応するしかなかった。
もちろんサイト間の差分なんか把握できるわけない・・・
>>46 >>44 みたいな使い方もできるし、デザイナにもっと権限を与えることもできる、でいいんじゃないかなあ。
ロジックの分離というより、権限管理的な意味合いが濃いんじゃないかな。 故意にPHPコードを書かない限りは、Smarty内で簡潔するので、安全っちゃ安全。
49 :
nobodyさん :2008/04/23(水) 19:51:43 ID:rNbxu3m+
質問です。 yum install php-Smarty がインストールできないのですが、なんで? その前にインスコしておくものはありますか? CENT OSなんですが....
そんなんで知るかボケ
51 :
49です。 :2008/04/23(水) 21:36:12 ID:rNbxu3m+
どこで質問すればいいの?
osスレ
中身はただのphpファイルなんだからtgzファイル落として解凍するだけでいいんじゃね? こういうのってパッケージ管理使う意味あるのかな。
楽
pearifiedをpearのチャンネルに追加してそっからSmartyをとってくると楽。
ちょっと使ってみた。 sqlserverでカラム名が和名。 select 住所1 from 得意先マスタ その和名のまま連想配列にしてテンプレートに渡すとエラーになる。 select 住所1 as zyuusyo1 from 得意先マスタ これで渡すとzyuusyo1でちゃんと取得できる。 まあ、和名テーブルやらカラムを作るなって話だが、今あるからしかたない。 まだまだ、和名には弱いのかなぁ?実はパッチがあったりしますか? あと、テンプレート側で、都道府県名と言う文字列を含めるとエラーになる。 県名にかえたらエラーでず。 んーーーー。不便。
住所1て
文句を垂れる前に、日本語文字コードについて学べ。
ところで、皆Smartyの拡張クラスの名前何にしてる? MySmartyだと、何かダサイ気がしてならない
EternalForceSmarty 相手は死ぬ
>>59 変な名前付けてあとでわからなくなるより
MySmarty
かっこいいのがいいなら
SuperSmarty
MySmartyだと用途がはっきりしないので、 SmartyMobile SmartyWeb SmartySitename SmartyView 的な命名の方がよくね?
あれ? 今回なんて名前にしたっけ? って考えるのが面倒くさいから、いつもMySmarty
俺はいつもYouSmarty
PHPだからできる $smarty
66 :
ムームー :2008/05/02(金) 02:13:12 ID:xWzxYhLM
$template_dir に関するマニュアルに、 「このディレクトリをwebサーバのドキュメントルート下に置く事を推奨しません。」 と書いてあるんだけど、根拠がわかる人いる?
逆になぜ置く必要があるのか
httpdの設定ミスってテンプレートだだ漏れ おまけに内部のデータ構造も推測できちゃう作りでしたとかやる奴がいるからだろう
69 :
ムームー :2008/05/02(金) 03:55:53 ID:xWzxYhLM
>>64 > 逆になぜ置く必要があるのか
テンプレートを別ディレクトリに配置すると、保守性が悪いから。
>>68 > httpdの設定ミスってテンプレートだだ漏れ
> おまけに内部のデータ構造も推測できちゃう作りでした
テンプレートが見られても、あんまり危険性がないと思うんだけどな。
escape し忘れて XSS される、ぐらいかな。
でも、そんなのはテンプレート見るまでもなく、
実際に入力してみれば escape していないことはすぐ分かるしさ。
逆に考えるんだ,公開する必要があるディレクトリをドキュメントルート以下に置くと考えるんだ もしくはせめてaccessでも使え
>>69 テンプレの構造を解析されて、直接変数へバッファオーバーフローを起こす様な汚染データを打ち込まれる
つーかさ、そこまで承知の上ならドキュメントルート以下に置けばいいと思うよ 推奨であってドキュメントルート下だと動作しない訳じゃないんだし 俺はレンタルサーバとかでドキュメントルートにしか置けない場合を除いて別ディレクトリに置くけどな
俺はローカル側で管理しづらいという理由でドキュメントルート下に置いて.htaccessで全Deny
そしてAllow Overwrite Off
テンプレートをドキュメントルート下に置かないと保守性が悪いとか ローカルで管理しづらいって、さっぱりわからんなあ 例えばドキュメントルートの一つ上の階層にテンプレートを置くとして そこを基点に管理するだけの話だと思うんだが
ぶっちゃけフォルダ移動まんどくせ
ドキュメントルート外に置くと、相対的に読み込んでいる画像とかCSSとの、パスが切れるって事だろ? HTMLコーディングしてる最中にプレビュー出来ないってのが面倒だって事だろ?
>>78 templates/index.html
htdocs/image.jpg
というファイル構成だと、
ローカルファイル上で画像チェックをする術が無いって事だよ。
これは、コーダー観点で見ると致命的に面倒。
htdocs以下をテンプレートディレクトリにする事で解消されるから、利便上htdocsに置く人達がいるわけだ。
templatesディレクトリに画像とか置いちゃう方法でもいいんだけど。
ローカル上のシステムにアクセスして確認すればいいじゃん
81 :
nobodyさん :2008/05/03(土) 21:44:08 ID:K4MBJC9r
templates_cの方がやばいだろ。
82 :
jtb :2008/05/03(土) 21:57:29 ID:???
自宅鯖を、レンタル鯖にするところまではできるんですが、ユーザーと、ftpパスワードの保存先ディレクトリどこにしようか迷ってるのですが、普通はどこに保存してますか?
public_html/secure/ftppass.txt
>>80 ローカル上のシステムって意味がわからんが。
ローカル鯖でも立てない限り、確認は無理。
コーダーに鯖立て強要(例えXAMPPでも)も厳しい。
OK?
開発中はbaseパス設定するなり置換するなり好きなようにすればいいじゃん
開発中はtemplateをhtdocs以下に置いてもいいじゃん
ローカルにサーバー立てられないやつは この業界から消えていいよ。
XAMPPのサーバも立てられないコーダなんて糞過ぎ。まぁ、だからコーダなんだろうけど。いやしかし。 まぁ、俺なら*.tpl(*.htmlを含んでもいい)をtemplateディレクトリに、残りをhtdocsに置くスクリプトを用意するけどね。
XAMPPは地雷だろ・・・
ローカル環境作ってない奴ってバージョン管理やデプロイ手作業でやってる訳かな? 高校生バイトじゃあるまいし
デプロイを手作業でやらないって 何を使ってるの?
テスト環境ならsvn管理下に置いてsvn updateだけど 本番環境は手作業だなあ
分散ものに関わるとシェルなりでスクリプト走らすけど、ねえ
>>93 それもやるけど、しかしコンソールに生のHTML、しかもオーサリングソフトで作ったような多重テーブルとスクリプトが含まれる
テキストはもはや人間の読むものではない。
デプロイって標準的なやり方ってないのかな。
>>59 自分はいつも
SetupSmarty
ってつけてる。
98 :
モモ子 :2008/05/09(金) 13:33:34 ID:6V2WpTSb
テンプレートでいつも {$var|escape} みたいに escape つけるの 面倒だよねー?何かいい方法はないかなー?
? ? ?
>>98 ・escape済の変数をassignする
・もしくはdefault_modifiersにescapeをいれとく
お好きなほうでどうぞ。
後者は特定の条件で不具合が発生するので、自力で修正する自信ないならお勧めしない。
なんで肝心な不具合とかが修正されないんだろ。 日本とは感覚が違ってて必要とされてないのかな。
Smarty3でも出ない限りは、このままなんじゃね?
103 :
nobodyさん :2008/05/15(木) 19:11:15 ID:ss9CEhce
JSmartyでもry
Smartyの残骸に悩むPHP土方の皆さんごきげんようw
普通に、外部モジュール化したHTMLテンプレートを読み込んで、 正規表現で独自タグを変数に置換して出力。 っていう古式ゆかしきCGI技じゃいかんの? Smartyの3〜4倍は速いぞ。
まだこういう馬鹿いるのかw
なんでバカなんだ? ちゃんとロジックとデザイン分離できてるじゃん。 そもそもPerlとか他の言語のテンプレートエンジン全般に言えるけど、 こういうシンプルな目的だったのに、 万人の要望に応えるうちに無駄に富豪化して、 ムーアの法則頼りで突っ走ってるのが、今のテンプレートエンジンだろ。
テンプレートエンジンを使いこなせてない人の発言だなぁ・・・。 デザインとロジックの分離レベルにもよるけど、 ビューで処理すべきロジックもあるって事だ。 if foreach include |escape あたりは最低限必須だろ。
>107がそう思ってるならその自分のやり方を貫けばいい >108がそう思ってるならその自分のやり方を貫けばいい 自分の考えを押し付けるのが一番うざい。
そう、自分がやりやすい方式で作ればよろしい
もっとも
>>108 の挙げてる機能くらいは無いと確かに困るというか
ロジック側でHTMLを吐く必要性が出てくるので嫌
そういう問題ではない。 実装の統一化は今後の開発効率を左右する重要な課題。 ただ、Smartyに何かが足りないのは確か。 結局どこかで独自に使い方を工夫しないといけない場合が出る。 特にescape。
おまいは全世界を統一したい野望でもあるのか? 統一すれば効率はいいだろうが、そんなツマラン世界は御免こうむる
>>109 おまいは、現場でコーディング規約とかに文句言うタイプだろ。
文句言うべきときは言うべきだと思う //使うなって言われる噴飯モノの現場もあるしな しかも理由が「/**/と入れ子にできちゃうから」という意味不明具合
>>112 趣味と仕事を兼ねるからツマランのじゃね?
仕事と割り切って出世する事を考えていこうよ。
出世考えるならプログラマー辞めて「プログラムも判る企画/営業」に異動促す努力したほうがええで いくらコード練っても、中/印/ベトナム経由の「安いだけの人材」がケツ噛み続ける時代 会社としてのポストがなくなる 「MFC超得意だからMSなくなるまでは困らん」と言ってた先輩が潰れて実家の本屋継いだぜ 「PHP? 新し物好きは迷惑だね。perlで一生食っていけるよ」と豪語してた 馬鹿女は、アルコールで精神病院を経て休職後、そのまま元彼と寿退社してリタイアだ。 一番頼れる仲間は某MTAのドキュメントにも名前を連ねる我が社の誇りだった人 今はビル屋上緑化を主とする企業のヒラ営業に転職しちまったぜ。 毎日PHPに限らずコード書かされてて思うが、 なんかそういうドロップアウトした筈の彼らがみんな幸せそうに見えるんだ なんでなんだろう なんの話だっけ
オレは給料泥棒 まで読んだ
118 :
nobodyさん :2008/06/01(日) 12:02:10 ID:hyBgIur5
Smartyはプロの世界でもよく使われるんですか?
SmartyのないPHPなんてレモンのないコーヒーですよ。
なぬ?
Smartyを始めたら背が5cm伸びて、彼女が出来ました。
OpenPNEが一日も早くSmarty外ししてくれることを願うよ。つうか俺がコミットすりゃいいのかな。
>>122 そんなことしたら背が縮んで、彼女が離れていくじゃないか。
嫁と分かれたいケースに最適ですかね
>>124 リンクしてコンパイル済みなら分離できません
ライブラリと生活モデル、および資産の依存性を分離して 再コンパイルするしかない訳ですね。 わかります。
再婚パイルをお考えですか。
GirlFriend Pluginがファイル破損しちゃいました。 どこで再配布してますか?
新しいPluginは古いものと互換性がないので、 関連ファイルは全部削除しないとダメだよ
まさかこのスレでふっきれるとはおもわなんだ。 貴様らありがとう。
ウチ、すごいぞw 俺が来るまで何年もプログラミング初心者が入ってきては辞めての繰り返しだったみたいで、 機能つけたしが全てSmarty設置で実現されてるwww サイトのいたるところにvarだのbinだのがあるwwww 勘弁してくれwwww
日本語でおk
業務でSmartyを使っているのか...
>>134 そりゃ背が伸びて彼女ができるなら使うだろう。
業務だからこそ使うんじゃないの? 逆に趣味とかじゃ使いたくない。
趣味でPHPはないわ。 俺は半年ほど休んでた時期に趣味で遊んだのはSchemeだけだった。 実務(共同作業)がSchemeでも進められるなら、迷わずこれを選ぶ。 しかし近年の現実はどいつもこいつもPerlすら宇宙語だからな。PHP一択にならざるをえない。
PHP + Smarty を使って、お客専用のCMSモドキより、 MovableType4.1 + αカスタマイズのCMSモドキの方が、お客には受けが良かった上に見積もりも良かった! 業務でSmartyを使うなら、隠れて使いたい
そりゃデザインのおかげじゃねーの
見た目以外に判断材料があるやつなんて、最低でもPHPを書けるレベル以上のやつに限られる。
>>139 いや、判断材料としては操作感も重要だけど、使う側と作る側のロジックが違うから
どう考えても不条理な操作が要求されたりするんだよなあ。
もちろん使う人のために作るんだからお客様優先なわけだが、
将来コケるのが目に見えてるから困る。
141 :
nobodyさん :2008/06/06(金) 23:48:35 ID:astBuURj
>>140 それはあなたが低スキルだからでしょうね。コケて逃亡するのはあなたではないでしょうか。
143 :
nobodyさん :2008/07/10(木) 05:42:24 ID:NxX5vAdg
Smartyで、テンプレート内で送られてきた変数の簡単な計算できませんか? {$value + 3}など。 試してみたのですが、{$value}の値がそのまま出力されます
つマニュアル
折角公式に日本語のマニュアルがあるというのに全く。
146 :
nobodyさん :2008/07/21(月) 01:40:20 ID:8uak49aQ
■ MySmarty.class.php <?php require_once("Smarty/Smarty.class.php"); classMySmartyextendsSmarty { publicfunction__construct() { $this->Smarty(); $this->template_dir="./data/templates"; $this->compile_dir="./data/templates_c"; } } ?> ■ test.php(MySmarty.class.php と同じディレクトリ) → 正常に動作 <?php require_once( './MySmarty.class.php' ); $o_smarty = new MySmarty(); $o_smarty->display( "main.tpl" ); ?> ■ dir.php(MySmarty.class.php の直下のフォルダ) → エラー Warning: Smarty error: unable to read resource: "main.tpl" in C:\hoge\Smarty\Smarty.class.php on line 1092 <?php require_once( '../MySmarty.class.php' ); $o_smarty = new MySmarty(); $o_smarty->display( "main.tpl" ); ?> これは仕様なの?
147 :
146 :2008/07/21(月) 01:41:40 ID:8uak49aQ
MySmarty.class.phpで半角空白がなくなっていますが、 2chにコピペするときの変換ミスで、実際は正常に動いています。
仕様
149 :
146 :2008/07/21(月) 01:52:13 ID:???
>>148 ええ!? マジすか……。
それじゃ、ディレクトリが多数ある場合は、
全てのディレクトリにMySmarty.class.phpが必要ってこと?
プラグイン自作してどうにかなる話じゃないですよ?w
お前は何を言ってるんだ
>>150 いや、文字通り、Smarty.class.phpを継承した設定済みのMySmarty.class.phpを
直下以外のディレクトリに置くとtemplatesディレクトリの認識がしなくなるのが仕様だったら、
多数のディレクトリ分けしてると超大変だよね、って言ってるんだけど。
>>146 が仕様で間違いないのなら、俺は何か間違ったこと言っているか?
さて問題です。 dir.phpからみて $this->template_dir="./data/templates"; $this->compile_dir="./data/templates_c"; このディレクトリはどこでしょう?
>>152 dir.phpは、MySmarty.class.phpを呼び出しているだけで、
dataディレクトリは、MySmarty.class.phpから見た相対パスだから、
dir.phpから見たdataディレクトリの場所は、関係ないと思うけど。
そもそも、なぜか絶対パスを受け付けてくれんのよね。エラーになる。
>そもそも、なぜか絶対パスを受け付けてくれんのよね。 こっちのほうが深刻というか根幹な問題をかかえてる気がするのだが・・・
PHPは実行されてるファイルの位置がカレントディレクトリになるから……
$template_dir これは、デフォルトのテンプレートディレクトリの名前です。 ファイルのインクルード時にリソースの種類を指定しなかった場合は、 このディレクトリから探します。デフォルトは ./templates で、 これは、実行しているスクリプトと 同じ場所にある templates/ ディレクトリを探すということです。 という文章からすると「実行しているスクリプト」が基準になるということみたいだな。
Smarty廃れましたなぁ。 そんなことより、PHPもJSPのように カスタムタグが使えたらいいのにね。
廃れてないけど
スレ立て半年でこの程度の伸びだったら、十分廃れてるだろw ぶっちゃけ、必要な機能だけ絞り込んで自分で作った方がいい。
いいというのはどういう点で?
161 :
nobodyさん :2008/08/03(日) 10:51:13 ID:4+uLL3BX
でも、テンプレートって言えば、もうSmartyでしょ。
テンプレート機能だけ使いたいならSmartyを使うか、生phpで済ませる 各種FW使うなら同梱されてるテンプレートエンジンを使う
「index.php#xxx」 smartyで↑の「xxx」を取得する方法ってありますか?
>>163 例で示されたxxxの部分は通常サーバ側には送信されることはない。
なのでサーバサイドで動いているsmartyから取得することは不可能。
仮に送信されるにしても、smartyじゃなくPHPから取ると思うんだけどなあ。
テンプレ内で{}使う方法ド忘れした誰かHELP
{include} で出力された結果が複数行にわたる場合、全ての行に対してインデントさせるにはどうすればいいですか? {"\t"}{include} とかしても先頭の行だけしかインデントされなくて
全部divで囲んでCSSで
171 :
169 :2008/09/04(木) 12:15:47 ID:???
ああ、すみません、出力されたソースでの話です・・・
変数に格納してindentかけるとか?
173 :
169 :2008/09/04(木) 21:08:05 ID:???
すみません、変数の宣言はphpファイル側でするものですか?もしそうなら、 配布されているウェブアプリがsmartyを使っているのですが 配布ファイルのバージョンアップの際に面倒なことにならないかな・・・と というかphpはわからなくて smartyも触るのは初めてでマニュアルを見ながら触っているのですが・・・ インデントするのも難しいですね レスしてくれた方々、ありがとうございますm(_ _)m
Smartyの前にやるべきことが・・・
デザイナにはロジックを触らせないコンセプトのSmarty
176 :
169 :2008/09/05(金) 00:54:49 ID:???
すみません、includeのassignでできました レスしてくれた方々、ありがとうございますm(_ _)m
177 :
nobodyさん :2008/09/24(水) 00:32:25 ID:KMdxurbq
JSPのカスタムタグがPHPにもあればいいのにな。 タグとクラスが一対一になってるのが素晴らしい。
178 :
nobodyさん :2008/09/25(木) 00:09:46 ID:lXgzxRnB
すみません、教えてください。 <p>名前:{$name}</p> テンプレートに上記のような記述をしたのですが、 「名前:」の部分が化けてしまいます。 テンプレートファイルはEUCで保存してあります。 原因としてはどのような事が考えられますか?
>>178 テンプレートをコンパイルしたあとのPHPファイルを見てみれば?
180 :
178 :2008/09/25(木) 02:06:16 ID:???
>>179 見ましたが、既に化けてます・・・
SmartyがEUC以外の文字コードで
テンプレートを処理しているということでしょうか?
phpの文字コードがあってないんじゃない?
182 :
178 :2008/09/25(木) 02:47:42 ID:???
>>181 あ、Smarty.class.phpがカスタマイズされていました。
SJIS→EUC→SJISみたいな変換してる。
お騒がせしました。すみません。
既存のものとは別にSmartyを入れます。
183 :
nobodyさん :2008/09/26(金) 16:36:37 ID:NKaAViJV
template_cの中身を全部削除しても、template_cの中身を見に行こうとして、 そんなファイルないよっていうエラーが出るんですが、なぜでしょうか? ためしに、force_compileをtrueにしてみましたが、やっぱり見に行ってしまうようです。
184 :
183 :2008/09/26(金) 17:02:20 ID:NKaAViJV
ちなみに、全く同じものを1つ下の階層にコピーすると動きました。 これはいったい・・・。
パスがおかしい
186 :
nobodyさん :2008/09/26(金) 17:23:10 ID:NKaAViJV
>>185 すいません、重要な点を忘れていました。
その別ディレクトリでコンパイルされたテンプレートを、
動かない方のtemplate_cにコピーしてやると、動くのです。
なのでパスが違ってはいないです。
全く謎・・・
そんな断片的な情報では何も判断できないけど謎だね
smartyってsjisだとエラー起きませんでしたっけ? さっきひさぶりにやってみたらsjisでも問題なく動いた(?_?)
preFilterでテンプレートの文字コードを内部文字コードに合わせる。 postFilterで元に戻す。 これは基本だろう。
みんななんでSmartyなんて使ってるんだ。意味がわからん。
名前:<?php echo $name ?> よりも 名前:{$name} のほうが書きやすくて可読性も高いから。
それだけじゃなかんべw それだけしか使ってないならもったいないw
<?=$name?>
short_tagwwww
Smarty(というかテンプレートエンジン)の便利さを解らない奴は、 素人or中級者未満だと自覚した方が良いよ。
>>198 PHPそれ自体がテンプレートじゃん
わざわざSmartyを使う意味がわからん
>>199 意味がわからんというのは、君のやってる事のレベルが低いからだと思うよ。
PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。
PHPはテンプレートっぽく使えるだけで、実務的にテンプレート管理を行おうとしたらかなりの量のコーディングが必要になってくる。
結局はテンプレートエンジンを作る必要はあるんだよ。
・PHP <?php echo strlen($var) ? preg_replace("/[\r\n]/", "<br />", htmlspecialchars($var)) : "hoge";?> ・Smarty {$var|escape|nl2br|default:"hoge"}
なぜphpのほうでnl2br使わんの
modelとviewを分けたいからじゃないの
PHP単体で使う人は、
>>201 なりPHPで書いたコードを想定してみれば良い。
「そんなコードを書く状況は100%ねぇよw」って言うなら、Smarty使う意味無いけど。
>>202 >なぜphpのほうでnl2br使わんの
知らなかっただけだろ。
あと preg_replace("/[¥r¥n]/", "<br />") だと "¥r¥n" があったときに <br /><br /> になっちゃうから
ここは preg_replace("/¥r?¥n/", "<br />") だよな。旧Macは無視したとして。
nl2br知らないわ、正規表現間違うわじゃ、底がしれる
>>200 >PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。
キャッシュは専用ライブラリを使う
ループ処理はPHPのforeachやwhileをそのまま使う
エスケープ処理はhtmlspecialchars()を使うか、短い名前で定義する
携帯、PC両対応はSmartyに備わってる機能ではない
>>207 全部Smartyで出来るじゃんw
使わない理由と、他のライブラリを使う理由を述べよ。
>>204 改行が必ずしも<br />とは限らないからだろ。
ViewがHTMLとは限らない。
>>209 上段はHTML以外も想定してるけど
下段はHTMLのみ想定しているってこと?
>>210 Smartyのnl2brは拡張&動作の置換が可能。
212 :
196 :2008/10/06(月) 19:40:07 ID:???
全部関数書けばいいじゃん <?=h(e(n($name)))?>
グローバル関数っすかwww そんなの結局は劣化車輪の再発明でしかないし、Smartyを使わない理由を述べよ。
> 車輪の再発明... 実用レベルでは、してはいけない「車輪の再発明」だが、 言語の学習段階ではレベルアップのために、あえて「車輪の再発明」は必要... 論点ずれた。スマゾ
そんな段階では「発明」でも何でもないし、する必要も無い。 物理習うときにニュートン方程式の再発明から始めるのか?
物理では再発明というか、再発見をおのおのの学生がするものじゃないの? ぶつりほうそくとは発見ではなく自然の理解であるからして。 同様に、対象を理解するために先人の真似をするのは無駄じゃない。 物理の授業でニュートンがやった実験やるのはべつに遊びってわけじゃない。
初心者の学習段階でよくやるアレは「車輪の再発明」の域にも達してないってことさ。 学習するためにやるものじゃない。
論点ズレすぎ。
車輪の再発明自体は否定も肯定もしないけど、
>>212 とか、再発明の域にすら達してないだろ。
単にSmartyを勉強するのが面倒だから、批判してるだけに見えてしまうんよ。
実際そうなんだろうけどw
patTemplate ってはやってるの?
>>208 >全部Smartyで出来るじゃんw
>使わない理由と、他のライブラリを使う理由を述べよ。
逆だよ。PHPでできるのに、なんでSmartyを使う必要があるのってこと。
>携帯、PC両対応はSmartyに備わってる機能ではない だからなんなん? テンプレートエンジンを利用すれば簡潔に記述できるのは事実だろ
>>220 PHPで関数集なり、テンプレートエンジンもどきを作るくらいなら
なんで既存の枯れはてたSmartyを使わないのって事。
まぁ
>>212 みたいなのを見ても尚、PHPで同じ事が出来る。
と感じているのであれば、何説明しても無駄だろうけどさ。
テンプレート関数毎回作って、毎回デザイナに説明して、毎回デバッグしてるんだろうねw
ああ、、、 だから毎回デスマーチになるのかw
smartyとかテンプレートエンジンのいいとこは デザイナに渡すときも あとはよろしくねーって言えること。 マニュアルもちゃんとしてるし。
うちの場合ページが先に出来上がってくるから、それを元にtplを作ってるな。 それでもPHPベタ書きよりはよほど楽だしあとで修正しやすい。
デザイナに include と 変数 の使い方覚えて貰うだけでかなり楽になるよね。
227 :
196 :2008/10/09(木) 23:38:15 ID:???
>>222 > PHPで同じ事が出来る。
逆だよ。Smartyが前提なのではない。
素のPHPに対してSmartyをわざわざ追加する必要が無い、ということ。
しかしほんと、化石みたいなスレだな。
Smarty信者はまだPHP4とか使ってるのかね。
smartyってもうはやってないの?
>>227 必死すぎwww
196のコードなんでPHP4とか以前にPGとしてウンコのレベルだろww
君が無知なのはわかったから
PHP単体じゃテンプレートエンジンとして機能しないのに、
「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。
初心者スレから出直してこい。
>>228 普通に使われているし、需要も多いよ。
先月にも解説新刊が出た。
230 :
196 :2008/10/10(金) 09:49:15 ID:???
>>229 答えは196に示してある通りなんだが。
俺もSmartyは仕事で3年くらい使ってたよ。
> 「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
> もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。
じゃあ俺はお前さんにとって論外らしいので、議論の余地は無いな。
SmartyじゃないとMVCが守れない開発者は現場では使えない。
もしお前さんがデザイナーなら、PHPの基礎くらい勉強しろと言いたくなるな。
うちのWebデザイナーはみんなPHP触れるよ。
> 初心者スレから出直してこい。
ここよりレベルの低いスレがあるのか。それは恐ろしいな。
>>225 それだとあとでデザイン修正があったときとかめんどくさくない?
もらったデザインを前のとdiffかけて
差分をtplに反映とか。
ただプログラマが一元的に管理してたほうが
セキュリティ的にはいいよね。
escape忘れただけで大変なことになることもあるし。
196やら212のコードを記述するぐらいなら俺はSmarty使うよ。
196が答えか、、、終わってるなw こんな輩が得意げに宣ってるからPHPはウンコだって言われるんだろうな。
少なくとも俺の現場ではショートタグは使えない
235 :
196 :2008/10/10(金) 23:28:20 ID:???
212に不満があるのは理解出来るけど、196は良いと思うんだけどな。
209の要件を満たす方法の一つが212で、それは211と大して変わらない。
だけど196は、MVCさえ理解できれば、209で述べられている要件も、
201よりスマートなコードにする事も、満たすことが出来るんだ。
なんでか知らんけど、Smartyを信じる人は知識があって偉い、
そうじゃない人はみんな素人だ、という反論しか戴けないのは残念だな。
>>234 ストローク数の少なさと可読性は若干損なわれるが、
それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。
>Smartyを信じる人は知識があって偉い、 >そうじゃない人はみんな素人だ 誰もそんな事言ってないから。 君がSmartyを否定するだけの根拠を持ち出さないから素人扱いされちゃうんだよ。 (まぁ、テンプレートエンジンを否定してる時点で底が知れてるけども。) 196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい? それなら、早急にWEB系PGを辞めた方が良い。 212の記法に疑問を持たないのであれば、 やはり、早急にPGを辞めた方が良い。 一応聞いとくけど、OOP&MVC的に開発する時、どんな構成で作ってるの? フレームワークとかライブラリとか教えてよ。 まさかhtdocs以下に.phpファイルを量産してたりしないよね?
>それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。 ほらほらこんな書き方すると単にSmartyを叩いてるようにしかみえないよ 196が同じ人なら、その内容からとてもSmartyを理解してる人には思えないんだよね >196は良いと思うんだけどな。 PHP(web)初心者だよね(笑)
いやだから、PHPで同じことができるのにわざわざSmartyを使う理由ってなに?
今まででたのは、<?php echo $var; ?> が短く書けることぐらい?
SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。
>>229 >「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
で、Smarty使う理由って何?
>>229 は他人を無知よばわりしてるから、おれの知らないSmartyの利点ってやつを教えてくれ。
まちがえた、Symfonyね。
・SmartyでやろうとしていることはPHPでできる → PHP単体では出来ない。別個にエンジンを作る必要がある。 キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか? ・Smartyは学習コストがかかる → 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。 ・Smartyは遅い → 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい? スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw ・Smartyのテンプレートでエラーがあった場合、その行番号がずれている → ずれてないよww エラー英文すら読めないレベルかwwww そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。 →PHP単体でなく、Smartyを使う理由? ・テンプレートエンジンとして必要な機能を備えている ・拡張がし易い ・デザイナのコードがシステムに混入しない ・PHPテンプレートエンジンとしてはメジャーで扱える人が多い >SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。 良かったね。 僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。 SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
cakeを上げないあたりにひねくれものな感じがプンプンするぜ
Smartyがデフォルトのテンプレートエンジンになっているフレームワークってありますか。
>>240 >・デザイナのコードがシステムに混入しない
いくらなんでもこれは冗談でしょ。
>>240 >→ PHP単体では出来ない。別個にエンジンを作る必要がある。
> キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか?
PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。
>→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。
んなわけない。なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。
>→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい?
> スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw
>ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw
おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。
>・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を学習させる意味がわかんない。
>>240 >僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。
>SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
いまどきこんなこと言うのは、フレームワークを使ってないということか。
あるいはオレ様フレームワークか。
これでオレ様フレームワークつかってたら笑うなー。
>>246 要するに、「うちのデザイナはPHP理解できるからSmartyいらないんだぜ」ってことな。
前提としてる環境が違うんだからいつまでも平行線なんだろうね。他にも摺りあわない理由はありそうだが。
自社おかかえのデザイナがいるならどうでもいい話だろうが 外注に出す場合、まだsmartyの文法のほうが通じやすいと感じるがなー 既にsmartyを知ってるデザイナもちょこちょこいるし 知らない場合でもマニュアルの「II. テンプレートデザイナのための Smarty」だけ読んどいてで済む さすがにPHPを覚えてくれとは言えない
250 :
196 :2008/10/13(月) 14:37:10 ID:???
やっとフレームワークの話が出てきたな。
名前もうまく書けてないレスが多いが、正しくはsymfonyと言う。
>>236 > Smartyを否定するだけの根拠を持ち出さないから素人扱い
Smartyを否定するつもりは無いよ。
「否定したら玄人」とか、どんな中二病だよw
まず前提として、Smartyの是非を議論する場合、
Smartyありきではなく、Smartyと実装Aと実装Bは対等に比較されるべきなんだよ。
>>237 も同じで煽りに内容が無い。
251 :
196 :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 :2008/10/13(月) 15:09:46 ID:???
>>248-249 DreamWeaverでしかページを作れないへぼデザイナーと仕事をするとか、
外注には出すがソースレビューしたくないという場合は、
大人しくWeb製作として依頼して、コーディングは自分でやった方がいいとおもう。
結局Smartyだろうが何だろうがビューはビューなので、
MVCが理解出来ない人にビューを作らせようとしてもうまくいかんし、
テストとデバッグは結局やらなきゃいけないんだよ。
デザイナーから見たら、実際どう描画されるかわからない記号の羅列を
マニュアルと変数名の指示書どおりにHTMLに書き込んでみたりして、
「たぶんこれで出来たと思うんですがどうでしょうか」と言わないといけない時点で、
それはプログラマー仕事としての負荷を被っているわけだよ。
実質的に、分業にもなっていなければ、責任の切り分けにもなっていない。
Smartyの良くないところをあえて挙げるならば、
「Smartyを使えば、へぼデザイナーとへぼプログラマーが協力出来る」という幻想を
蔓延させた事かも知れんねw
>>251 おまえさんはSmartyを否定してるんじゃなく、テンプレートエンジンを否定してるんだろ?
なら選択肢なんかじゃなくて具体的にどのように実装すべきかを提示してみてくれ
254 :
196 :2008/10/13(月) 15:24:07 ID:???
>>253 「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>229 はそれを否定していたので、そこからして論外なのだ。
テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
まずそれを考えなおして、表現してみてくれ。
「必ずキャッシュ機能が無いといけない」とか
「PHPとして実行できてはいけない」とか
そういう特殊な前提があるんなら、それを踏まえないとお前さんの役には立てんよ。
俺の要件に則って具体的な実装を述べて良いなら、
196こそが「テンプレートファイル」の答えなのだ。
$nameに何をどこでどうやって代入すればいいのかについては、
>>251 に書いた。
そうそう、ディスパッチャの存在が前提になるんだ。そこはSmartyと同じだな。
>>254 いや、だからな
>ロジックから$nameに値を代入する過程が必ずあり、そこで、
>スコープの決定と、エスケープなどのビュー用の加工処理が行われる。
の具体例を提示してみてくれって話なんだが
ぐだぐだ言い分けしてないで、 Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。 PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。 使う事を否定しないが、君なりの構築術があるわけだろ? それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
単にSmartyに馴染めなかった、Smarty使ってる人うぜぇ! ってだけならすれ違いだから、よそで最高のテンプレートエンジンを開発してくれよな!
>>254 >「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>
>>229 はそれを否定していたので、そこからして論外なのだ。
うむ、同意だな。PHPはそれ自体でテンプレートエンジンとして使える。
> テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
> まずそれを考えなおして、表現してみてくれ。
テンプレートエンジンとしての要件は、ビューを分離できること、でいいと思う。
>「必ずキャッシュ機能が無いといけない」とか
キャッシュ機能はビュー層が単体で持つべき機能じゃないよな。
もつべきならコントローラ層だ。
>>256 >ぐだぐだ言い分けしてないで、
>Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。
前スレ読め。とっくに出てる。
>PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
はあ?ライブラリを使っちゃだめとか、頭どうかしてんじゃねーの。
Smartyだってライブラリだろ。なんでSmartyはよくて、他はだめなの?ばかなの?
それにPHPだけで書かれたライブラリはpure PHPだろ。言葉の意味間違ってるぞ素人さん。
>使う事を否定しないが、君なりの構築術があるわけだろ?
>
>それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
だから前スレよめって。
>>193 以降全部読め。
>まあ、俺はSmartyを否定したいのではなく、
別の選択肢を提示して、それに対する意見を聞きたかっただけなので、
>>193 をそう解釈しろと言われても困る
>>256 >何と比較してダメなのか
→ PHPと比較して。
>要所要所わかりやすく上げてくれ。
>>238 からのコピペ。
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
で、Smarty擁護派が
>>240 で反論してるけど、Smarty反対派が
>>245-246 で再反論してて、今はSmarty擁護派の再々反論待ち。
特にエラー行番号についての見解を期待。
何が見解だよ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
>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拡張クラス組込済。
>別の選択肢を提示して、それに対する意見を聞きたかっただけなので、 解ったから、具体的に選択肢を提示してくれよ。 ショートタグで値を表示するだけじゃ甲乙つけられないだろ? ループ、エスケープ、インクルード、条件分岐が入ったViewテンプレートサンプルを上げてくれ。 それを見て「これならSmarty使う必要は無いな」と思わせてくれよ。 俺が出すサンプルは以下だ、 「ヘッダ、フッタを合成して配列の中身をテーブルに出力するだけの簡単な処理」
=================================================== 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"}
=================================================== 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";?>
PHP側はこれでも処理が全然足りない。 インクルードファイルの管理や、ローカルスコープ化処理、エラー処理、etc。 結局細かい処理を考えるとSmartyと同程度までの実装は欲しくなってくる。(文法はおいておいて) そこをライブラリや関数で補うって事なんだろうけど、 実際にそうした場合のテンプレートコードを上げてみてくれ。
>>262 >君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
>Smarty自体の処理ははあっておりコンパイルも通っている。
あほかお前、なんでSmartyのエラーかPHPのエラーかをここで区別する必要があるんだ?
エラーといわれた場所の行番号が違っていることが問題なんだろうが。
Smartyのエラーなんて、ただの構文解析でのエラーしかでねーじゃんか。
実行時のエラーには無力なうえ、変な行番号ででるんじゃ、使い勝手悪すぎだろ。
PHPなら実行時のエラーも行番号がずれることはない。こんなのあたりまえ。
実行時エラーを変な行番号でしか報告できないSmartyを必死に擁護するほうがどうかしてる。
「Smartyエラー」ってなんだよ、構文解析でのエラーじゃないからSmartyのせいじゃありませんって、アホか。
エラーの種類に関係なく、行番号がずれるのが問題なのに、
構文レベルエラーと実行時エラーを区別する必要がどこにある。
>>268 デザイナとプログラマの分業がなされているとき
構文エラーはデザイナ責任、実行時エラーはプログラマ責任。
PHPエラーがでたらプログラマが対処すりゃいい。
そもそも、>246のエラーは文字列に変換できないクラスをassignしないもしくは、
assignしたものが直接扱えない変数であることをデザイナに伝えていれば起きない。
>>268 アホはお前だろw
実行時エラー制御したいなら、Smartyに限らずassign時点で型判別しろよ無能w
それこそSmartyとかPHP以前の話だよ。
>エラーの種類に関係なく、行番号がずれるのが問題なのに、
ずれてねーよw コンパイル後のソースでの行数で、ご丁寧にファイル名まで出てるじゃん。
スクリプト言語しか触った事無い素人には、実行時エラーのデバッグは難しいのかもしれんが、
普通のPGなら上のエラーコード読むだけで、エラー内容もエラー位置も特定出来るわ…
むしろ構文エラーじゃなくて、実行時エラーだって理解出来て問題識別しやすいわw
無能を晒してないで、
はやく
>>265-266 を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく
>>265-266 を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく
>>265-266 を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
こういう無能がdisplay_errorsをonにしたまま本番公開しちゃって恥ずかし思いするんだろうねぇ('_`
>>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;
}
?>
<? // こんとろーら 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のメソッドチェインてきなやつはよいとおもいます
>>268 >エラーといわれた場所の行番号が違っていることが問題なんだろうが。
言いたいことはわかる。
でも、関数なんだから当然だろ。
引数が不適切なせいで、呼び出し先でエラーが出た場合を考えればわかりやすい。
275 :
196 :2008/10/14(火) 09:31:04 ID:???
いや、行番号の話はSmartyとsymfonyを混同した人の指摘?みたいだし、
エラーを追いかけたかったら良いデバッグツールを使えばいいと思うぞ。
PHP標準でスタックトレースも変数の中身も出せるわけだし。
>>263 SimplateいいぞSimplate。暢気な人には魅力がかわらんかも知れんが。
俺が考える「Smartyをわざわざ導入する際のデメリット」が結構解消されてる。
まあ、「SmartyはPHPで書かれている」という大きいメリットは殺ぐのだけど。
>>265-266 はMVCを理解してない人の例という意味では良いサンプルだな。
>>271-273 ありがとう。俺もせっかくなので一つ案を出す。
おはよう。
>>275 Simplateいいよね。 客先都合で使えない事が多くて泣けるけど。
>>265-266 はMVC的にはどう書くのが正解?
277 :
196 :2008/10/14(火) 10:20:12 ID:???
レス番間違えた。272-273、素晴らしいコードをありがとう。
議論としては蛇足になってしまうかも知れないんだけど、
俺が個人的に
>>212 より
>>196 が良いと思うと言った部分を紹介します。
特徴(一長一短?)は、テンプレートファイルの可読性が高く、隠蔽されていること。
利点はHTMLからの移植性と習得の容易さ。
欠点は配列操作のコストを二重にかけていること。
改行が多いと叱られたので再挑戦。
>>276 >>272-273 のように書くのが正解だと思う。
少なくとも、MとVとCがそれぞれどのファイルかわかるでしょ。
278 :
196 :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 :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の処理は、コントローラに近い場所に書いているかも。
>>196 君、MVCを全く理解出来てないよ。
データの表示フォーマット等に関するビューロジックは、ビュー側で処理するべき。
コントローラは必要なデータをモデルからひっぱってデータに渡すだけで表示内容には関与しない。
君の書き方だと、各種表示フォーマットやデフォルト値が変更になった時にビューで処理出来ないでしょう?
>>280 変更される度にtpl.phpに修正を入れるんだろうな
単純にテンプレートファイルとビュー用のデータ加工のphpを分けてるだけみたいだし
というか、やってる事はオレオレテンプレートエンジンな件について
要は生phpをテンプレートファイルにできればいいのかな?
>>282 ねw 多分中学生か高校生の熱血PG志望者だよきっと。
俺も若い頃は動作の重さに超敏感だったし、Smartyとか使う奴はアホかと思っていたw
>「Smartyをわざわざ導入する際のデメリット」 俺にはこれがわからん。 パッケージインストールもしくはダウンロード→インクルードパス下に解凍したらすぐ使えるよ? 習得の手間は人それぞれだろうけどおそらく196や周辺のPHP知ってるデザイナーは苦労したんだろうな。
>>281 んーと
「V」にだけ着目するならどっちもただしい、
それこそ全部echo文でもただしいのではとおもいます!
>>272-273 は「SmartyでできることはPHPでできる」、の一部のサンプルとして
1. 変数・関数のスコープの限定の実現
2. 生PHP?のテンプレートとしての(そこそこの)書きやすさの実現
(というかshort_open_tagの積極的な使用)
を主眼においてつくってみました。
>>266 から
>>273 に代わって
何か問題が解決したとすれば、主にはView用変数・ユーザ定義関数がグローバルでなくなったこと
かなとおもいます(まちがってたらアドバイスください><)。
じぶんはというと今テンプレートに
Smartyを使いつづけるか(といってもまだ使って一ヶ月ですが!)
否かまよっているところなので先人さんのいろいろな意見を参考にしたいところで、
最近このスレをみつけてせっかく興味のある話題にめぐりあえたのに
煽り合いばかりでおもしろくないなーとおもっているところです。
お前が煽ってんだろが
あ、
>>277 さん、こちらこそありがとうございます><
最初はもっとボコボコに叩かれるかもとおもってたので…
>>286 煽ってないですが煽ってると思われたならあやまります。。
すみません
>>285 >>265-266 「V」に着目するだけというかVのサンプルですが…。
MVC的に見ても、MもCも混在していないので間違いがわかりません。
どこに違和感を感じたのでしょうか?
仕組みを学ぶのは良い事だと思います。
しかし、もう少しSmartyを使い続けてみて下さい。
不満点も沢山見つかると思いますが、メリットも沢山見つかると思います。
「SmartyでできることはPHPでできる」はパッと見出来てるように見えてるだけで、
細かい実装(商業では必須ね)考えると、相当な開発負荷がかかります。
>short_open_tagの積極的な使用
現バージョンのPHPの推奨設定ではshort_open_tag=offなので注意して下さい。
PHP6以降では廃止される可能性もあります。
>>285 Smartyでできる事を手間をかけてPHPだけで書いてもメリットないだろう
処理速度に多少のアドバンテージがあるくらいで、それも汎用的に書いていけば怪しい
個人的にはSmartyを使うメリットで一番大きいのは、使ってる人が多い事だと思ってる
SmartyもどきをPHPで作るくらいなら、俺はSmartyを使う。
292 :
196 :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ほど大げさなモノは、個人的には使わないかな。
テンプレートファイル部分は出来るだけ薄いほうが好き。
>short_open_tagは俺の趣味です。 なんだ、ただのひねくれものか お前、友達いないだろ? お前、自分の事出来る職人だと思ってるだろ? 周りは確実に引いてるパターンが目に浮かぶ もはやSmartyの話題でも無いので、MVCスレにでも行けや。
>>292 >>278 のコードだけど、tpl.phpとbody.phpを合わせてSmartyで言うところのテンプレートだよね?
tpl.phpでデータを整形をして、body.phpは体裁のみを担当と…。
これは君の主張していた
・Smartyより学習コストが低い
・(デザイナが)Smartyで出来る事は実現出来る
には当てはまらないよね。
tpl.phpで扱える便利な関数群を提供してあげればいいんだろうけど、
それは
>>290-291 の言うとおり、結局は我流テンプレートエンジンを作る事態になってしまうよね。
であれば既に完成されたSmartyから乗り換える理由にはなり得ないと思うんだ。
もっとも君が我流テンプレートエンジンを完成させて、公開してくれれば別かもしれないが。
>>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を作るのは誰がやるんだ…って話になる。
>>289 じぶんは
>>264-267 を見てつくってみたのですが
おっしゃってることがよくわかりませんでした。。
Smartyはまだ触ってみるつもりではいます!
>>290 さんのおっしゃっるとおり使う人が多いのはよいとおもいますし
たしかカスタムタグみたいなこともカスタム関数でできるんですよね??
ただSmartyに不満を持つたびに、
PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
PHPを使いはじめてから、short_open_tagとか制御構文の別構文(endif, ...)とか
テンプレートとしてのPHPはすごくいい感じだとおもったので
PHPがちゃんとテンプレートとして進化しなかったのがざんねんです。
テンプレートエンジン上にテンプレートエンジンをのっけるという感覚が
今割り切って理解できなくなっているのです。。
short_open_tagがXML処理命令の規則に合わないのはあきらめるしかないです。。
PHPはすでにテンプレートエンジンとしては不全なんだろ。 それならSmartyを良くするとかもっと良いテンプレートエンジンを作るとかしたほうが生産的だと思うのだが。 まあ、PHPを良くするというのもありか。 しかしテンプレートとプログラムを同居させるというのはどだい無理があると思う。 Smartyのプログラム的文法もかなり無理やりだしな。
>>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 :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 :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}でいける? コストはこの際考えないことにして・・・。
>>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はその機能性より、
コードの統一性や管理体制に与える恩恵の方が大きいのかもね。
>>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();
}
}
PHPが書けないデザイナをヘボとか言っちゃう人とは仕事したくないなあ jspが書けないデザイナもヘボなんだよね? MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない うーん、大変だな
>>304 PHPはプログラミング言語の名称ですよ。
>>303 CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw
個人的にはデザイナはPHPとか勉強するヒマあったら、
システムに組み込みやすいスマートなHTMLコーディング技術を学んで欲しいわ。
PHPという言語は<?php ?>タグの外をそのまま出力するという言語仕様なだけでテンプレートエンジンでは無いよね。
309 :
196 :2008/10/19(日) 11:55:40 ID:???
なるほど、このスレには分業指向の人が多いんだな。
>>301 {php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。
>>302 やっぱり、そうなってしまうよなあ。
上で「それはMVCではない」と言われてから、内心悩んでたんだけど。
Smartyの解説ありがとう。その線で学習コストが等価になれるか検討してみる。
>>303 JavaとかMT(使ってる人いるのか?)のプロジェクトなら、そうだろうね。
>>306 HTML書けません、というプログラマーとは間違っても一緒に仕事しないよ。
というより、Smarty文法がわからないデザイナーと一緒に仕事しないでしょ?
同じことでないの?
>>309 >{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
{php}{/php}タグは禁止に出来ます。
>デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
>へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。
逆になんで必要の無い権限を与えるの?それによるデメリットは考慮しないの?
まっとうなセキュリティの考え方だったら「必要な権限以外は与えない」のが常識だと思うんだけどね。
最低限の権限で不便させない環境を提供出来ないシステム屋こそへぼい人だと思う。
参考までにいくつか質問させておくれ
・プロジェクトの人数とか連携手法やらバージョン管理方法は?
・テンプレートPHPでエラーが出たら誰の責任になるの?
・テンプレートに使ってるPHP系のライブラリとかは?
311 :
196 :2008/10/19(日) 15:56:49 ID:???
>>310 デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
コードレビューとサーバへの設置はプログラマーがやればいいじゃん。
デザイナーにサーバへの書き込み権限を与えた時点で、
(仮にあらゆるコマンドの実行をサーバ上で絶対に行えなくしたとしても)
デザイナーはシステムの正常動作責任を一部負う事になるのは間違いない。
たとえば、必要なパラメタを渡さなかったとか、ファイルを消しちゃったとか。
だから、あらゆる操作をサーバ上で絶対に行えなくすることのメリットは、
デザイナーがサーバを壊さないようにする、という程度に過ぎないので、
それなら優秀で信頼のおけるデザイナーと仕事したほうがいいんじゃないの? と思う。
質問の答えだけど、製品が完成しなかったらチーム全体の責任。
デザイナー主導の案件でもプログラマー主導の案件でも、
インタフェース定義の必要性は発生し、それは両者(主に主導側)の責任になる。
Smarty単体ではシステムの仕様テストは行えないので、
「言われたとおりのSmartyテンプレートだけ書くからあとは知らないよ」というデザイナーは、
HTMLだけしか書かないデザイナーと大して変わらない。
なので俺はそういうデザイナーとは仕事してないし、
もしデザインを外注する事があっても、Smartyの学習を促す事は無いと思う。
あえて擁するなら、へぼプログラマーと連携する時には、Smartyは役に立ったな。
あれを安直に使えば、嫌でもビューとロジックが分離出来るから。
でも今はフレームワークを使うのが普通なので、そのメリットは感じられなくなった。
312 :
196 :2008/10/19(日) 16:30:50 ID:???
超極端な例として、
>>310 の議論にとって最も良い条件を考える。
・顧客がWebデザインを自分で更新したいと要望している
実力はへぼかも知れないが、お客様なので無碍にも出来ない
・プログラム開発も初期デザインも業者が行い納品する
・サーバは業者が貸与するので、壊されないように配慮しなければいけない
・ssh権限は与えず、ftpsでテンプレートファイルだけ更新できるようになっている
・プログラムの動作責任は業者が負わないといけない
・テンプレート更新内容のチェックに業者の人的コストは割けないので、
更新はノーチェックで行い、システムが正常動作しなくなった責任は顧客に負わせなければいけない
・テンプレートにはプログラムから変数を埋め込まなければいけない
・顧客はSmartyの心得と導入への理解がある
・Smartyのうち危険なタグをすべて洗い出し、設定で使用を禁止している
・テンプレートでエラーが出てもセキュリティ的に不適切な出力は行われないよう設定されている
それでも
・パラメタエラー
・クロスサイトスクリプティング
の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
お客様が |escape を書き忘れただけで。
なので
>>302 の仕組みがあれば、完全に縛ることが可能だろうか、と思った。
でも、ここまで極端な事例でもない限り、デキル人を探した方が早いなぁ。
顧客には任意の静的HTMLを特定箇所にinclude出来る仕組みのみを提供するとか。
Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
とにかく難癖つけてSmarty叩きたいのはわかったけど、 結局君がSmarty使いこなせてないだけじゃんww 100%の対策なんて無いんだから、対策しないって言ってるだけって事に気付けww >デザイナーに権限を与えたくないなら、HTMLだけを納品させて、 >コードレビューとサーバへの設置はプログラマーがやればいいじゃん デザイン修正の度にやるんすか。 >デザイナーにサーバへの書き込み権限を与えた時点で 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。 ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。 消される恐れがあるとわかってて何故権限を与える?w >Smarty単体ではシステムの仕様テストは行えないので、 わぁ、きっと君のところはMVC分けが出来てないんですね>< フレームワーク使えば大丈夫とか思ってるんですね><
>・パラメタエラー
>・クロスサイトスクリプティング
>の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
>
>>302 の仕組みがあれば、完全に縛ることが可能だろうか、と思った。
default_modifiersやフィルタって知ってます?
>Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
もうSmarty叩きはいいからさ
その安全で扱いやすい俺俺テンプレートエンジンを見せてよ。
君の主張は前提と具体性がないから水掛け論だよ…。
まさか専門学校生じゃないとは思うけど質問に具体的、箇条書きで答えてくれよ。
・プロジェクトの人数は?
・連携手法は?
・バージョン管理方法は?
・デプロイ方法は?
・使用しているPHPライブラリは?
・使用しているフレームワークは?
・使用している俺俺テンプレートエンジンは?
こんなに活発に意見交換があるのに、 どうしてココは『隔離スレ』なの?
名目はともかくスレ独立してるのはありがたいので別にいいや。
317 :
196 :2008/10/20(月) 18:54:05 ID:???
>>313 煽っているように見えて
>>311 と同じ事を言っているように見える。
なので異論は無い。むしろ、まったくその通りだと思う。
>>314 default_modifiersは初めて知った。
nodefaultsと組み合わせれば、symfonyのescaping strategyに近い所まではいけるな。
escapeはプログラマーの責任でもなくデザイナーの責任でもなく、
フレームワークが基本的に便宜を図る、という解釈をすれば、悪くない思想だと思う。
後半については答えても意味が無いと思うし、
別にSmartyを否定する事が主目的で発言している訳ではないと言っている。
世の中にはSmartyを使うのに明らかに向かない案件もあるし、
そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。
逆に「Smartyを使うならこんな規模や状況やツールに最適だよ」という意見があれば、
それは主張してくれればいいと思う。
>>317 default_modifiersは問題がある(ソースに手を入れれば回避可能だが)から使わないって話なら聞くが
Smartyを3年使ってて知らないってどんだけ・・・
そもそもなんでこのスレにいるん?
>>317 >世の中にはSmartyを使うのに明らかに向かない案件もあるし、
>そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。
本当にそう思ってるなら196から出てくる発言はありえないと思うんだよね。
シチュエーションも取り上げずに、否定だけされても納得は出来ないじゃない?
「俺ならこうする」って意見も無しにダメだしされてもなぁ…default_modifiersすら知らないみたいだし、
単にSmartyの事知らないだけですよね?
議論では無く、相手を論破する事が目的になってませんか?
なんでこのスレにいるん?
321 :
196 :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 :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で納品させるというアプローチ。 手動管理はめんどくさいし、たとえ客でも保守費用払わなかったらやりたくない。
だめだこいつ…芯の通った主張が一つもないから、結局何に結論づけてるのかもわからん。 「…で?」としか言えないわ。
default_modifiers忘れてただけとか言い訳が恥ずかしすぎるwww 結局使いこなせてないだけに一票。 「俺の環境ではSmartyが馴染まない」とか、凄くどーでもいい事なんで こんな所でファビョってないで自作エンジンの制作作業に戻るんだ。 ここは君みたいな優秀なプログラマやデザイナが来ちゃいけない場所なんだ。 な。
325 :
196 :2008/10/22(水) 18:45:58 ID:???
>>325 使いこなせればどんな環境でも馴染ませられるよ。
出来ないのはヘボプログラマくらいだろうね。
君は何がしたいんだい?
Smartyを使う気がないなら、こんなスレにいる必要無いんじゃないのかな?
327 :
質問です :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
あげます。
書き方くらいちゃんと見なされ
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.キー で受けとれると思い込んでいたんですが。
マニュアル見てる?
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 もう一度インストールからはじめたのですが、だめでした。 お願いします。 教えてください
はぁ?お前は何を言ってるんだ? /usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php の場所にこのファイルはあるのか?
337 :
333の続きです。 :2008/11/14(金) 19:56:14 ID:nqLSKBoW
自己解決しました。 疲れました
もしかして、smarty使ってローカルでテストすると、 それが完成したアカツキには、レンタルサーバーにも smartyをアップロードしないと動かないの??
そりゃあレンタルサーバーに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?
>>338 たいがいのフレームワークはそうなんじゃないの
>>341 テンプレートエンジンの理想型だよな。
PGにもデザイナにも優しい。
Smarty3で速度面が大幅改善されるっぽいので期待している。
>>343 テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。
まあプラグインで作れることは作れるんだが
Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?
346 :
nobodyさん :2008/11/20(木) 11:05:10 ID:WBdj1Bs+
Pearでカレンダーやメニューを作成してテンプレートに出力させたいんだが このような場合、みなさんどうしてます? テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?
これってDjangoみたいなテンプレートの継承ってできないの?
>>348 簡易的なモノなら簡単に作れるから自作すれ。
350 :
nobodyさん :2008/12/05(金) 11:52:26 ID:jMVHCYUr
template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。 template は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。
cacheを混乱させそうだな。
352 :
350 :2008/12/05(金) 14:12:47 ID:jMVHCYUr
やめときます。 おとなしく対応させて作ります。 ありがとうございました。
ほうそんな機能が・・・ メリットがまったく思いつかないけど覚えておきます
いやわかれよw
もー!ヽ(`Д´)ノ sfCutString:5とかにすると5文字表示とかってあるよね? これって反対に、後ろからの5文字を削除とかって出来ないの? 教えてくださいな(´・ω・`)
ないものはつくるんだ
ついでに車輪も作っとけ
あってもつくるんだ
車輪の再発明は偉大!
テンプレートエンジンの選択で迷ってるんですが、 smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか? 人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?
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がちゃんと成立してるかだけでも知りたいですがどうしたら いいでしょうか? ご意見よろしく御願いします
>>364 error_reporting
display_errors
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
http://ri ■ch■ardkosh■im■izu.at.webry.info/
創価の保険金殺人事件。
オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。
http://www15.ocn.ne.jp/~oy ■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
http://jb ■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/
2ちゃんねるは統一■教会が個人情報を集めるための道具。運営には統一■教会がいる。
駅前で「手相を見せてください」と勧誘してるのが統一教■会。(カルト宗教)
カルト宗教の下にいる人と上にいる奴を分けて考えないといけない。下にいる利用される人は上がどんなことをしてるか知らない。
ユダヤ権力の子分→2ちゃん運営=統一協会上層部=層化上層部=自民党清和会=野党の朝鮮人ハーフの政治家=
与党の朝鮮人ハーフの政治家=金 正日(キム・ジョンイル )=読売サンケイ=小沢十朗
ユダヤ人=ロックフェラー=ブッシュ=クリントン=ヒラリー=アドルフ・ヒトラー=オサマ・ビンラディン
毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。
荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。
現実には「ネトウヨ」などは存在しない。
http://changi.2ch.net/test/read.cgi/ms/1230363385/
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 横ですがこれのselectedって現在時刻じゃないですか?
>>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の表示がおかしくなるし、、 ご意見よろしく御願いします
セッション
375 :
モンピー77 :2009/01/05(月) 09:16:41 ID:mGW0zuF3
Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを しているのですが $o_smarty->default_modifiers = array( 'escape:"html"' ); 配列にも適用させること可能なのでしょうか? みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?
>>375 default_modifires はクセがあるから気をつけたほうがよいよ。
{foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。
>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。
377 :
nobodyさん :2009/01/07(水) 10:21:31 ID:nbhiW1pd
>>375 そもそもPHP側ですませておく。
なんのために分離してるのかと
サニタイズはビュー側でもOKだと思うが。
サニタイズ(笑)
ん?反論できなくて涙目?w
382 :
nobodyさん :2009/01/08(木) 14:37:59 ID:/Ay52XkK
>>383 >>377 ではPHP側でやれと書いてあるようにしか読めないんだがww
必死すぎて恥ずかしいな。
386 :
nobodyさん :2009/01/09(金) 13:26:05 ID:dxaSQaiQ
>>385 必死厨必死だな。
「みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?」
この意味わかるか?
「サニタイジング」じゃねーの?
>>386 スマン。日本語でお願い出来るか?
どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?
389 :
nobodyさん :2009/01/15(木) 22:45:35 ID:iReMhog8
smartyを設定したんだけど、ページが表示されません assignもdisplayも動かないというか、それ以前に templatesディレクトリの指定とかがうまくいってるのかがわからないです そういう設定が今どうなっているのか、確認する方法はないでしょうか? ちなみに今のsmarty.class.phpへの接続は以下のような形です <?php //テスト require_once('Smarty.class.php');//これでSmarty.class.phpに繋がってることは確認済みです class MySmarty extends Smarty{ function MySmarty(){ $this->Smarty(); $mydir = dirname(__FILE__); $this->template_dir = $mydir."/templates/"; $this->compile_dir = $mydir."/templates_c/"; $this->config_dir = $mydir."/configs/"; $this->cache_dir = $mydir."/cache/"; $this->caching = 0; } } ?> これを、各phpからrequireさせています
390 :
389 :2009/01/15(木) 23:24:27 ID:iReMhog8
>>389 に書いたファイルをrequireした.phpで、
require_once('MySmarty.class.php');
//Smartyクラスのインスタンス作成
$smarty = new MySmarty();
echo "テンプレートディレクトリ:".$smarty->template_dir;
としたら、正しいパスを読み込みました
これはSmarty.class.phpも読み込み成功してるってことですよね?
どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?
391 :
nobodyさん :2009/01/15(木) 23:29:20 ID:iReMhog8
ごめんなさい、書き間違えです ×正しいパスを読み込みました ○正しいパスを出力しました ×一つのディレクトリに複数の… ○一つのサイトに複数の… また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)
compile_dir,cache_dirへの書き込み権限はありますか?
393 :
nobodyさん :2009/01/16(金) 00:01:11 ID:7rtqusgx
>>392 どうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした
そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ
394 :
389 :2009/01/16(金) 02:58:12 ID:???
原因がわかりました! .tplに
<style type="text/css">
<![CDATA[
a:link{color:blue;}
a:focus{color:red}
a:visited{color:purple;}
]]>
</style>
という部分があったためでした。これを削除すると正常にdisplayされました。
念のため、この.tplのソースをコピペしてtest.htmlをつくり、それを直接開くと
どのブラウザでも確認できました
どうやら、Smartyと上の記述の組み合わせでのみエラーになるようです(理由はわからない)
このページは携帯用で、
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns="
http://www.w3.org/1999/xhtml " lang="ja" xml:lang="ja">
って感じにXML宣言のあるxhtmlだったんですが、この中では<!-- -->は使えないって言うので
上記の形(<![CDATA[ ]]>)にしたところエラーになりました
1)XML宣言
2)携帯用サイト(外部CSS使えない→1)のせいでコメントは<![CDATA[ ]]>にならざるを得ない)
3)Smarty
という組み合わせは実用不可能というお話でした
デリミタの変更はSmarty最初の課題。
CSSは外部でいいやって思ってたけどこういう場合もあるんだな。 Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。
398 :
nobodyさん :2009/01/19(月) 11:16:42 ID:RBlPIEnm
通常のHP案件でSmartyを常用していたのですが、 みんクエのようなRPGタイプのブラウザゲームを制作予定です。 常に値が変動して最新の情報を表示しないといけないケースで、 Smartyを使用するのはナンセンスでしょうか?
ケースバイケース
cache切っても充分使えるしな。 重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・
PHP側で連想配列のキーにピリオドを含む使った $foo['bar.baz']='hoge'; のような変数をSmarty側にassignした場合、 テンプレ側ではどういう表現をすればアクセスできるの? {$foo[bar.baz]} はだめだったんだけど、何か他の表現方法あるのかな?
つマニュアル
phpからdisplayしようとすると Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /usr/share/pear/Smarty/libs/Smarty_Compiler.class.php on line 454 Fatal error: Smarty error: [in main.tpl line 1]: syntax error: unrecognized tag: include file="header.tpl" (Smarty_Compiler.class.php, line 455) in /usr/share/pear/Smarty/libs/Smarty.class.php on line 1092 こんなエラーが出てしまうんですけども、原因を教えていただけないでしょうか。 ちなみにmain.tplの中身はこんなのです。 {{include file="header.tpl"}} {{foreach from=$include_files item=file}} {{include file="$file"}} {{/foreach}} {{include file="footer.tpl"}}
なんで二重括弧なの?
>>404 Smarty.class.phpを継承したクラスも使ってるので、本家との差別化のためです。
継承したほうは
$this->left_delimiter = '{{';
$this->right_delimiter = '}}';
を設定してあるので大丈夫だと思うんですけども。
ちなみに括弧ひとつにしても同じエラー出ます。
406 :
403 :2009/02/03(火) 21:51:04 ID:???
環境書き忘れました CentOS 5.2 Kernel 2.6x PHP 5.1.6 preg_matchでSmartyのタグ探して処理させてるから タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。
試してみたいから再現できるコード出してくれ
408 :
403 :2009/02/03(火) 22:23:57 ID:???
<?php require_once('MySmarty.class.php'); //適当に書き換えてください $mysmarty =& new MySmarty(); //適当に書き換えてください $a = 'test'; $mysmarty->assign('test', $test); $mysmarty->display('test.tpl'); ?> ----------------------------------------- {{$test}} ###こんな単純なコードさえエラー出ます###
409 :
403 :2009/02/03(火) 22:24:52 ID:???
間違えました^^; <?php require_once('MySmarty.class.php'); //適当に書き換えてください $mysmarty =& new MySmarty(); //適当に書き換えてください $a = 'test'; $mysmarty->assign('test', $a); $mysmarty->display('test.tpl'); ?>
当然ながら私の環境では再現しません
411 :
403 :2009/02/04(水) 19:44:57 ID:???
既にSmartyが実働してるサーバからSmarty関連のファイルを引っ張ってきて インストールしたら正常に動きました。 公式の最新バージョンはバグ有りなんですかね? 何はともあれ、お騒がせしました。
自分の環境で試してくれる回答者放置とか最悪な質問者だな
413 :
403 :2009/02/05(木) 07:13:36 ID:???
問題のあったファイルがお礼とかw
値がある場合はstring_formatの%0.1,なかった場合は にしたいんだけど {var|default:' '|string_format:'%0.1'} だと値が無い場合には全て0.0になってしまうし、 {var|string_format:'%0.1'|default:' '} だと値が無い場合にnoticeが出てしまって両立できないんだけど、 どうしたらいいかな?
フォーマットのf抜けてた
CakePHP1.2にSmartyView入れて使い始めてみたんだけど $form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま? {$form->create('Modelhoge', array('action'=>'Actionhoge'))} モデルだけ指定すると出力されるんだが、、
>415 register_modifier 使って関数自作すればいいんじゃない?
昨日テンプレートエンジンというものを知って調べたが、こんなもん速度と品質犠牲に使う本気で奴バカすぎ。ヒアドキュメントで十分すぎ。
そうだよ?
PHP自体がテンプレートエンジンであり 速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを 419は知らないのだった
Smartyってめっちゃ便利やな! PHP案件は全部これ使って開発してるぁるょ!
423 :
smarty初心者 :2009/03/16(月) 14:02:13 ID:UpVqDdxv
Fatal error: Call to a member function assign() on a non-object in・・・*.php on line 32 というエラーがでるのですが、どういう意味なのでしょうか? 教えてください。
変数名が違うんだろ
そのレベルだとSmartyどころかphp初心者だろ……
427 :
nobodyさん :2009/04/12(日) 10:19:11 ID:tJ4UxLsE
428 :
nobodyさん :2009/04/22(水) 01:10:23 ID:rBHnGmhI
Smartyのファイル名が 「%%45^45E^45E480CD%%index.tpl.php」 と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか? %%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。 しかし、それ以外の数字と記号の意味がわかりません。
Smarty::_parse_resource_nameに書いてある
430 :
nobodyさん :2009/04/23(木) 02:53:59 ID:ai/dLDOC
あいまい検索みたいな事って出来るのでしょうか? 例えば、test_file.phpというファイル名のファイルがあったとして testで検索してもそのファイルがヒットするようにしたいのです。 opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、 preg_matchなどの正規表現でファイル名を調べる方法もありますが、 もう少し短い手順で、簡単に調べられる方法はないでしょうか?
430です。すみません、誤爆です・・。質問スレに書きます。
template_cの中身を見たら こんな変なファイルがありました なんですか? %%5A^5A2^5A201544%%test.tpl.php
コンパイル後のテンプレートファイル
なるほど 消しても問題なさそうですね? ありがとうございます
( ゚д゚)ポカーン
436 :
nobodyさん :2009/05/04(月) 18:34:03 ID:bGJWbWfu
MTでPHPを使う部分にSmartyを使っているみたいなのですが、 MTのテンプレートを見ると <mt: >な独自タグを使っています。 Smartyで独自タグって定義できるのでしょうか?
HTMLファイルだって定義するぐらいはできるんだぜ
439 :
nobodyさん :2009/05/06(水) 01:41:19 ID:T5mYjMeP
www.smarty.netにつながらないんだけど俺だけ?
>>441 落ちてるね。こういうサイトはミラーが必要だとおもいまする。
一生落ちてればいいと思う。
444 :
nobodyさん :2009/05/13(水) 11:19:30 ID:Q3CLDrVp
{insert} で指定する関数名に クラスのメソッドを指定する方法はありませんか?
クラスのメソッドを指定できる関数をつくればいいんじゃあ
初心者で悪いんだが --Hoge.php-------- class Hoge { var piyo; function Hoge() { $this->piyo = $_POST['some']; require_once 'view.tpl'; } } --view.tpl--------- <p><?php echo $this->piyo; ?></p> テンプレートとしての機能ってこれじゃ駄目なの?
>>446 こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要
POSTで送られたデータを無加工で出力するなって事だ そりゃそうと、普通にメソッドコール出来たと思ったけど
>>446 それでも問題無い場合もあるよ。
ケースバイケース。
複数人(特に外注)を使う場合は、記述方法の統一されたテンプレートエンジンをオススメだけどね・・・
PHPをテンプレートエンジンとして使う=テンプレートを扱う人にシステム全権限を与える。
善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。
452 :
446 :2009/05/14(木) 14:32:58 ID:???
>>447 ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?
>>450 とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。
Smartyならデフォルトで適用するフィルターを設置出来る escapeを入れたら今回記述されたテンプレートでもちょっと安心 とりあえず、OpenPNEはやってた 興味があればソース眺めると良いかと
454 :
nobodyさん :2009/05/14(木) 17:49:28 ID:A4v4Hdy/
>>453 質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?
見れるんなら見たいんですけど。
HTMLソースじゃないぞ
>455 smartyでいうところのコンパイルされていないファイルって、見れるんですか? だとしたら他人事ではないんですけど。
> それがsmarty経由でつくられてるもの の > それ ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど
>457 あ、そういうことでしたか。 そして、ダウンロードもしてみました。 他の人がつくったsmartyのテンプレートファイル初めてみた。 勉強になるな〜
どんな風に勉強になった?
({ をデリミタタグとして使っているところとかです。
MTもSmarty使っているから、参考になると思うよ。 ただ、OpenPNEの方がわかりやすいね。 なんか日本人的な書き方のような気がする
Smartyの順序って 「PHPが苦手だからSmartyを使おう」 それとも 「PHPができるからSmartyでさらに上を目指そう」 のどっちなんですか? わかる人からするとアホな質問かもしれませんが、 PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。
SmartyはPHPの単なるライブラリだよ・・・?
Smartyの用途はスレの上のほうで話題になってるじゃん 苦手だからとか上を目指そうとかそういう観点ではなく
465 :
462 :2009/05/22(金) 11:11:41 ID:???
>463,464 ご返答ありがとうございます。 スレも1から全部読みました。 そして、ここ数日ネットで調べまくったんですが、 どこも書いてあることは「デザインとプログラムを分離できるもの」ということで、 頭が悪すぎるのか、結局「smartyが何をしている」というのがわからずじまいでした。 そこで、書き込んでみたのです。 要は「工具セット」ってことですかね。 上の方で延々と行われた議論は 「使う工具(smartyの機能)なんか自分で作ればいい」派と 「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。
smarty使ってMVCのviewを強化したい派(利便性高・コスト高)と php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな
467 :
462 :2009/05/22(金) 17:49:33 ID:???
>>466 !('A')あ〜
なんか少々モヤモヤが晴れてきました。
引き続き勉強します。
Smartyを勉強し始めたのですが、 phpコードに書いた和文が文字化けしてしまいます。 テンプレートの和文は文字化けしません。 phpで$smarty->assign('name', 'みなさん');として tplに「こんにちは、{$name}!」とすると、 htmlで「こんにちは、文字化け!」とでてしまうのです。 全部UTF-8で書いています。 サーバーはsixcoreをかりており、mbstringの設定はこうしています。 mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = pass mbstring.http_output = UTF-8 mbstring.encoding_translation = Off mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII mbstring.substitute_character = none; 今日一日中ググりまくっているんですが、どうしてもわかりません。 どなたかお助けください。おねがいします。
469 :
468 :2009/05/23(土) 20:42:52 ID:???
phpファイルだけがSJISになってました! ほんとサーセンでした!!!
「こんにちは、文字化け!」 はワラタ
smartyのテンプレートに$hogeという配列が空じゃない場合の条件分岐処理を書きたいんですけど、 この書き方はおかしいのでしょうか {if $hoge!==""}text{/if} たまにif文が動かないのでおかしいと思うのですが
smarty文法のばあい ===はあるけど!==はないんじゃないか? マニュアルに記載されてないし !($hoge==="") に差し替えてみよう
is_array() とかつかえなかったっけ?
475 :
nobodyさん :2009/06/30(火) 18:33:31 ID:Cv5BCTzF
既存のソースをフレームワークを使って書き直したいんだけど、smartyは他のフレームワークと比べて 何か利点はありますか?それとも他のフレームワークを使った方がよいですか? フレームワークを使い比べたことがある方、教えてください。
フレームワークはMVC+αを担当するものとした場合、 SmartyはVのみを担当するテンプレートエンジンでしかない。 ・既存のソース+Smarty ・他のフレームワーク+Smarty という使い方が一般的です。
477 :
475 :2009/07/01(水) 02:15:48 ID:FWyhhBD1
>>476 簡単ながら簡潔な意見だと思います。ありがとうございます。
どういたまして。
Smartyも大きく言えば、関数ライブラリだからな。 HTML内にPHPコードを書いているのと変わらない。 (しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる でも、プログラマー以外がテンプレートを操作する環境なら凄い便利
小さく言うと何?
smarty乙php乙時代はC++俺はHTMLホームページビルダー
<small>関数ライブラリ</small> 大事なことなので小さく言いました。
>HTML内にPHPコードを書いているのと変わらない。 PHPコードを書かせない(制限する)為に、Smartyがあるわけだが。 >(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる 内部的にPHPに変換及びキャッシュを行うから、きっちり設定をすればパフォ的には気にとめる程じゃ無くね? システム規模によるだろうけど、大抵は処理全体の1割未満のリソースしか食わんよ。 上手に導入出来れば開発が相当楽になるので、結果的にコストパフォーマンスは上がるしさ。 一度Smartyの設計思想を読む事をおすすめ。
>>483 いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。
あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。
MVCでの開発経験があれば、Smartyが難しいと感じる事は無いと思う。 最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。
どの程度までCとVを分離すればいいの?
ご自由に
(1) if ($nantoka) { $str="yes"; } else { $str="no"; } ↓ result:{$str} (2) result:{if $nantoka}yes{else}no{/if}
489 :
196 :2009/07/08(水) 09:25:17 ID:???
Smarty信者はMVCフレームワークとテンプレートエンジンの区別もつかんのか
ココでMVCの話はお門違いだけど、一寸だけ口挟む。 > どの程度までCとVを分離すればいいの? 普通、MとCを何処まで分離すればイイの?という質問が多いと思う。 " CとV "と言ってしまう時点で、MVCがまるで判っていない印象。 MVCの中心にあるのは、C(コントローラ) 何故 C かと言えば、Webアプリのエントリーポイント(プログラムの着火点)は、アドレスであると考えたから。 どんな処理でも、まずそのスクリプトにブラウザでアクセスしないと何も起こらないという事実から、エントリーポイントをアドレスと考えた。 次に、このアドレスの扱いを拡張しようと考えた。 スクリプト名 / メソッド名 / 引数 ... って感じで、アドレスから処理を操ろうとした訳だ。 この時、上記の記述を実際の処理に落とし込むのが、C(コントローラ)の役割。 C は、受け取ったアドレスから、処理の出力先を M(モデル)にするか、V(ビュー)にするか判断するだけ... ここから、Cは只単に処理を振り分けるだけと考えれば、おのずとMVCそれぞれの割り振りも判ってくるハズ
>>492 じゃMとVはどう仕事を割り振ればいいの?
M(モデル):サーバ処理専用。主にDBがらみの処理 V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る
でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
MVCにとらわれすぎると、逆に可読性下げるからなぁ… 目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね? 使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。
>>495 > でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!
>>496 確かに可読性は下がる。また、RoRが過ぎるとフレームワークのブラックボックス化が著しくなり、
背後でどんな処理がなされているのか、まるで判らなくなる。
当然、カスタマイズしにくい...
MVCを意識する・理解するというのは大事だと思うんだが、 どうやってその理解を深める勉強をするの? 結局、自分でソースを書いて、良いか悪いか判断するしかないよね? 俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、 それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。 なら、それで良いのではないか?と思うんだけど、後で困るのだろうか
お前は何を言ってるんだ
「そこまでこだわるべきなのか」 ←言いたいこと 「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問
>>499 >>496 に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。
例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?
って話。
503 :
nobodyさん :2009/07/10(金) 18:13:16 ID:aQw5S2vU
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ? 503さん、まじパねぇっす!
503さんはエスパーなんです!
>>494 サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな
>>506 入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。
>>506 大丈夫か?
頭打ったろ!
ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ
自分の頭に無い解釈=不正解 だというプログラマーが多すぎです
510 :
nobodyさん :2009/07/20(月) 22:58:34 ID:KgRJffi+
勘違いしていたかも知れないんだけど、Smarty自体がMVCフレームワークだよね? Modelは関数の処理で Viewの部分がdisplayやfetchでテンプレ表示で Controllerが最初のクラス実行で 自作フレームワーク+Smartyを作ってるんだが、 考えたらMVCすべてSmartyだけでもいい気がしてきた
それSmatyじゃなくて PHP+Smartyじゃん
まあ、あながち間違ってはいないがな。
いや、間違ってるだろw その理論だと世の中全てのPHPコードがMVC実装されてる事になる。
いや、それは「PHPでMVCを書いた」って事で Smartyみたいに元から実装されている分けじゃないんでは?
Smartyhajimemasita
Hello! Smarty
517 :
nobodyさん :2009/07/24(金) 20:52:45 ID:kF0trrBu
で、お前らキャッシュ機能って使ってる?
キャッシュって使うもんなの? Smartyだと使わされるもんだと思ってたよ。
>>518 コンパイル済みテンプレートとキャッシュを混同してるだろw
俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。
>>519 批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?
キャッシュ使うとテンプレートの更新が反映されないんだが 更新したらキャッシュ切らないとだめなの?
522 :
519 :2009/07/25(土) 05:09:32 ID:???
>>520 Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。
519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。
DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。
>>521 テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522 なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな
>>523 ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?
俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!
じゃDBデータがあるサイトの場合は その都度キャッシュのon/offを切り替えて使えということ? あるいはインスタンスを分けるとか?
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、 毎回DBからデータを持ってくるのであれば、 それは事実上キャッシュは不可能。 コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。
テンプレート自体をDBに格納してるって話じゃないの?
え?
へ?
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。
上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?
え?
テンプレートってDBとかに格納しておけるの? できるならすごい便利なんだが
>>532 Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。
できなくないのは分かるけど いまいちどういう時に使いたいのかわからん。 ファイル名でマッピングしておくのと何が違うんだろ?
>>535 updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね
>>535 CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。
制作の手間暇考えたら、メリットは薄いと思うけど。
>>535 ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…
>>539 DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。
少し腐ったぐらいが美味しい...
ファイルは数が増えるとどんどん大変になるんだよな
システム作る側は楽かもね。 デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。 またテンプレート自体がバージョン管理下に置かれている事も多々ある。 運営する上でDBに流し込み作業が発生するのは楽ではない。
ディレクトリ分けもせずに700個のHTMLと格闘してる奴を見てるとホント馬鹿だと思えてくる
そんな奴いねーよw
700個のHTMLって時点でテンプレートを活かしてない感じが…
テンプレどころかCSSすら使ってないんですわ、マジで。
でも場末のウェブ制作屋ってほんとひどいからね。 ちょっとかじった中学生か、ってレベルのおっさんが 見てて頭痛くなってくるような非効率的な作業環境で、 素人騙して金貰ってるようなとこいっぱいあるぞ。
>>543 流し込み作業をプログラムですれば良いだけだろ
一括アップロードと変わらん
>>549 それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。
というかDBなんてある意味ファイル管理をラップしたようなもんだから DBでできてファイル直弄りでできんことはないだろ。 せっかくキャッシュとか使ってるのに 変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる って場合じゃなきゃ下手にDB化なんかせんよ。 そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか? って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど
>>552 制作、運用、実行コスト、全てが大きく変わるわw
検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。
ナンセンスってほどでも無いっしょ ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック
>>555 だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。
>>556 にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。
>>557 ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ
>>558 FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。
・DBコネクション等の負荷が無い
・当然PHP側のコードもシンプル
・SVN等のバージョン管理システムが使える
・使い慣れたエディタで直接編集が可能
・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
・当然複雑な管理画面も不要になる為実装コストは激減
これらはFSなら特別な実装は不要。
君はDBで実装出来るか?
検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。
逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。
定量的の意味知ってるか?
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。
まぁ、喧嘩するなや。 第三者からみたら、有益な討論してるように感じるんだから。
>>562 有益かはともかくSmartyの議論ではなさそうだな。
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ
逆だと思うが。PHPを使えるプログラマー用の技術だろ。
>>563 答えられない質問には煽る…典型的な厨ですね。
定量的も何も、FSの場合は
>>559 の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。
>>568 俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた
> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
> ・当然PHP側のコードもシンプル
プラグインで済むから同じ
> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ
> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと
> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで
> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん
> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分
テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。
ファイル操作用のPHPコードと DB操作用のSQLでは、後者の方が自由度高いと思うけどな
>>568 煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか
>>571 「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?
>>569 > キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。
> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。
> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。
> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?
> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?
> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。
> phpMyAdminで十分
上に同じ。
> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。
>>571 >>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。
だから、いちいち煽り入れるなって お前がせっかく書いたレスも陳腐な物になるぞ
お前がいい加減にしろ
まぁ普通はDBを使うメリットなんて無いって事さ DB憶えたての頃は俺も無闇にDB化したがったものだ
じゃ、大手ポータルサイト(ブログとか)って テンプレートをDBに入れずにファイルで読み書きしてるのかな?
そんな極少数の大規模案件を例えに出されてもなぁ・・・ 使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか) 要件次第なんじゃない? それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発 とかだったらDB化した方が遙かに楽だろう。
>>581 DB使うメリットないとか言っといて
結局要件しだいかよw
>>581 つまり、結局は「DB化した方が遥かに楽」なケースが”ある”ということですね
>>582-583 最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw
揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。
っていうか大手CMSサイトってPHP+Smartyなの?その時点でその話は破綻している。
どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。
平行線にすらなっていない。 DB厨がファビョっているだけだ。
ファビョってるのはむしろお前だろ?1人で戦っているつもりだろうがw
いちいち煽りに反応しなくていいからw とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、 もう少しましな流れになるんじゃないかな? (^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから! (^o^)でーたべーす の すごさがわからないやつは すごくない!
「要件次第でDB使う」でみんな納得。 丸く納まってよかった。
以下Smarty3を語るスレになりました。 開発ペース遅すぎるよね。
htmltemplate.php で十分だしー
>>590 すまんけどどういう要件ならDB、FSを使うべきかまとめてくれないか?
>>593 大規模案件ならDB でいいんじゃないか。
>>593 基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。
すまん
結局
>>581 が結論でいいんじゃないかと言いたかった。
OK
大規模案件にはJAVAという逆説。
600 :
nobodyさん :2009/08/10(月) 18:05:18 ID:euq/7Zv+
すみません、質問です テンプレートファイル内で、{php}〜{/php}って形で、phpのプログラムを実行出来ますが、 この「〜」の部分で、assignされた変数を操作することは出来ないでしょうか {php} //ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい {/php} 私の名前は{$name}です こんな感じで… よろしくお願いします。
そのロジックはテンプレートじゃなくて、呼び出し元に書くべきでは・・・ やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない? グローバル変数にするとか、シングルトン使うとか、etc
602 :
nobodyさん :2009/08/10(月) 18:26:43 ID:euq/7Zv+
>>601 ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ
>>602 もしかしてこんな感じで解決しない?
if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);
604 :
nobodyさん :2009/08/10(月) 18:43:35 ID:euq/7Zv+
>>603 ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!
>>604 条件分岐やるとassignが増えるってどういうこと?
配列をそのまま使えば?
>テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。 テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw アクションとテンプレ両方で値を編集しちゃうと、 どこでバグが発生したか突き止められなくなっちゃうでせう。
>>605 例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…
でも、確かに
>>606 の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。
>>607 if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";
って書いて、$ary変数だけassignすればいいんじゃない?
その程度の表示分岐処理なら、テンプレート側でもOKかと思う。
{$ary.faxNum|default:"-"}
でいけない?
値未入力であることを示すのに、何を表示するのかはview側の仕様だわな。 ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。 そのとき内部データにそんな値(内容)入れたくないだろ? 608の後半みたいにテンプレ側でやった方がいいよ。
>>608-609 うーん、そうか。
ケースバイケースでどうやるべきかじっくり考えてやってみるね
ありがとう
度々申し訳ない {if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど {if $var eq "hoge"} $newVar = "hogeでした"; {/if} みたいな…
assignでなんでだめなの?
>>612 assignはphp側の処理ですよね、テンプレ側で値を割り当てたいので。。
{assign} タグ使えば?
>>614 ありがとう! こんなのがあったのか。助かりました!
assignassign言うから当然テンプレート側のこと言ってると思ったら assignタグすら知らんかったのか。
だからphpタグなんぞで処理したかったのか・・・。
$hogeAry = Array ( [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が出力されます
varAryの中を見てみたら?
ループは回ってる?「名前は:」って文字は出力されてる? {foreach from=$hogeAry item=varAry} {foreach from=$varAry item=item key=key} {$key}={$item}<br> {/foreach} {/foreach} で中身表示テストしてみ。
621 :
nobodyさん :2009/08/12(水) 10:23:00 ID:u9+iooGY
>>620 0=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);
>>621 Smarty側に正常にassign出来てない可能性大。
1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);
2. hogeAryがSmartyにassignされてるか確認。
623 :
nobodyさん :2009/08/12(水) 11:18:13 ID:u9+iooGY
>>622 var_dump($this->view->hogeAry); の結果は
$hogeAry = Array (
[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 )
)
.tplでの
{$hogeAry|@var_dump} の結果は
Array ( [0] => [1] => [2] => ) 1
{$hogeAry.0.photoName} の結果は
galleryPic7
ちゃんとテンプレートまでassignされてきてるってことですよね?
foreachだけがうまくいかないってことかなー
619はシカトですかそうですか
625 :
nobodyさん :2009/08/12(水) 12:16:00 ID:u9+iooGY
>>624 すみません、varAryの中身のチェックの方法がわからなかったもので。。
{foreach item=varAry from=$hogeAry}
{$varAry|@var_dump}<br />
{/foreach}
とりあえず思いつく限りで上記をやったら
string(0) ""
string(0) ""
string(0) ""
が返ってきます
{foreach item=varAry from=$hogeAry}
{$varAry.photoName}<br />
{/foreach}
だと何も返ってきません(改行3つだけです)
ほんとに済みませんでした
原因切り分けてみたら? 本当にDBから値は取れてるのか、違う関数コールしてないか、 ただの配列なら表示できるのか、などなど。 可能だったら再現するコードも貼って。
{debug} タグでassignされてる変数確認してみ。
628 :
nobodyさん :2009/08/12(水) 17:19:17 ID:u9+iooGY
>>626-627 どうもありがとうございます
普通の配列なら大丈夫です。同じDBから同様の手続きで取得してるクエリ結果(通常の配列)があるんですが、
それはforeachで解析できています。
{debug}はdisplay形式じゃないとダメみたいで、僕のやり方がそうじゃないので動きませんでした。
それで、今ループ処理をsection形式で試してみたんですが、section なら二次元配列の処理大丈夫でした。(以下が動きました。)
{section name=varAry loop=$hogeAry}
{$smarty.section.counter.total}<br> (このカウンターは動きませんでした)
要素: {$hogeAry[varAry].id}<br>
要素: {$hogeAry[varAry].photoName}<br>
要素: {$hogeAry[varAry].photo_text}<br>
{/section}
とりあえず、お騒がせして申し訳なかったですが、foreachは諦めてこっちで極力対応したいです。
結局原因は何なの?
630 :
nobodyさん :2009/08/21(金) 13:05:34 ID:WhelcFIU
質問させてください。 テンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか? これまでは、php中で $hoge=$instance->method($hoge1,引数1,引数2); として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。 {$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は 見つけられませんでした。無理なんでしょうか? assign 前に実行すべき?
修飾子プラグインの中でメソッド呼べばよいのでは
>>631 どうもありがとうございます
修飾子プラグイン、知りませんでした! 勉強になります、ありがとう
プラグインの中で他のプラグインの機能を呼び出すことってできますか?
できるよ
635 :
nobodyさん :2009/08/22(土) 00:43:33 ID:qs0RE9DR
修飾子プラグインの勉強始めたんですが、引数を2つもたせる方法がわかりません。 {$num}というsmarty変数に対して、 function smarty_modifier_NUMtoTEXT($num,$aryName){ return $allAry[$aryName][$num]; } というプラグインを実行したいんですがどう書いたら良いんでしょうか? {NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。
>>636 返事遅れました。うまくいきました、ありがとう
foreach だの sectionだのって、なんで素直にfor文用意してくれないんだろね php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる 頭悪くて悲しいな
>>641 ほんとに? 情報ありがとう、気分が楽になったよw
そういう情報を仕入れる前向きさがないとイカンなぁ
キャッシュしてできたファイルの中にSmartyタグって入れられないよね? 検索フォームがあったとして <input name="keyword" type="text" value="{$smarty.post.keyword}"> として検索後にデフォルト値を入れてるんだけど、 キャッシュしたらこういう事が出来ないと思って。
>>643 insertタグで出来るんじゃね?
あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。
そのキーワード毎にキャッシュしたいのならば、それをキャッシュIDにすれば。
>>644-645 ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。
やっぱり、設計に問題あるかも・・。
647 :
nobodyさん :2009/08/28(金) 14:54:05 ID:45fY5t7E
サイドバーの質問が出てるので聞きます dbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな? 正直{if}に限らず醜いんで多用したくないんですよね… 部分的にデザインパターンを読み込むなど、他の解決方法はないですか?
コントローラ側で制御すれば?
テンプレートを数パターン用意すれば?
650 :
nobodyさん :2009/08/28(金) 16:29:28 ID:45fY5t7E
>>648 −648
そうですね、それがいいですね
ありがとうございました
651 :
nobodyさん :2009/08/28(金) 16:30:15 ID:45fY5t7E
652 :
nobodyさん :2009/08/28(金) 17:53:20 ID:MIAE9vSw
Smartyテンプレif文条件式で、自作のSmartyプラグイン関数を 呼び出すことはできないのでしょうか?
できるんじゃね?
654 :
nobodyさん :2009/09/02(水) 05:34:35 ID:55UeyG/q
{assign}の中で、修飾子プラグインをvalueにもたせることできますか? {assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが 試してみてもタグがモロ出しになって修飾子が実行されてないようです。 仕様でしょうか? 書き方が変だとしたら、対処法を教えてください。よろしくお願いします。
タグがモロ出し の意味がわからない。
負荷テストで調べたんだが、キャッシュって結構効いてるな 1000アクセスある場合を想定してテストしたんだが、 約10〜15%ほどページの読み込みが早かった
なにをいまさら・・
>>659 まあ、実感するのはなかなか難しいからな。
661 :
nobodyさん :2009/09/07(月) 23:17:57 ID:K7GASBY+
アウトプットフィルタにhtmlspecialcharsが指定されてるんじゃないの? つか二次元配列を出力しなければならない例が思いつかないけど
663 :
nobodyさん :2009/09/07(月) 23:49:42 ID:K7GASBY+
>>662 ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。
if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました
お騒がせしました。ありがとうございました
modifier.escape.phpを修正する方が早いよ
665 :
nobodyさん :2009/09/08(火) 00:25:48 ID:qSoCHGpf
>>664 さんはそうしてますか?
どう修正したらいいのやら、、と、調べたらありました。
http://blog.asial.co.jp/309 -----
# function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
# {
# // 配列が渡ってきたら何もせずにreturn
# if (is_array($string)) return $string;
# switch ($esc_type) {
# case 'html':
たしかにこれでよさそう。
664さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…
>>665 if (is_array($string)) return $string;
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。
plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。
667 :
nobodyさん :2009/09/08(火) 00:47:00 ID:qSoCHGpf
>>666 詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。
落とせるじゃん
復旧した
初心者なのであまり良く分からないのですが、テンプレートエンジンはSmarty以外に別のテンプレートも同時使用出来るのでしょうか? JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか? また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1〜数週間は馴れるまでかかると書いてありました ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?
まずテンプレート抜きでPHPを身に付けたほうがいいかと
SmartyってPHP習得した後にやろうとするとハッキリ言って困惑するよな 何だコレ?って感じ 今までPHP学習してきたのってあんま意味無いじゃんって思ったよ 例えばforeachとかさ HTML?っても最初思った
PHP習得した後にやらないでいつやるんだよ
誰もが通る道さ・・・ それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。
いや普通につくればphpのforeachもsmartyのforeachも必要だろ。
そういう事言ってるんじゃないだろ。
じゃどういうことよ
同じforeachでも書き方が違って、最初戸惑うってことだろ?
えっ
ちゅう
Smarty 3 is almost here! [24-Sep-2009] Yes, yes I know. The Smarty 3 beta is taking much longer than expected, but we wanted to be sure we had everything right. Our preliminary performance tests are already showing us very promising speed improvements over Smarty 2 (2-5x on average), and we're not done! To recap, Smarty 3 is a 100% rewrite from the ground up, and it is PHP 5 only. We will be getting a feature list up with the Beta, but let me give a quick summary:
早くなるのはいいな。でも、100%書き直したとなると、いろいろ仕様変わってるのかな。
100パー書き直したのと、仕様が変わるかどうかは直結しない話でしょう。 むしろ直結するのはバグ率。
3触ったけどまだ重くて使い物にならないよ。パーサがまともになったせいだろうけど、レンダリングがかなり遅い。 まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。
>>684 直結はしないがPHP周辺ではよくある話だな。
関数を修正してみたら引数の書き方が変わったでござるの巻
Smarty以外で他にいいテンプレートって何?
プラスチックが乾いてて、持ち上げようとしただけで割れてしまいそうだ・・・
流れ図記号は全部○を使っているのは俺だけだろうか。
692 :
nobodyさん :2009/10/01(木) 18:28:48 ID:KASc2bqu
//PHP側 $list[0]["text"] = '{ImageBox file="test.jpg"}'; //テンプレート側 {foreach from=$list item="data"} {$data.text} {/foreach} 独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、 配列をforeachで出力させようとしました。 しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。 指定方法が間違っているのでしょうか? わかりづらいかと思いますが、アドバイスいただければ助かります。
PHP側では展開されません。
そりゃ$list[0]["text"]の内容を書き出してるだけだからな。 phpなら可変関数使うところだが Smartyはプラグインで可変関数の実装を作らないとダメかも。
695 :
692 :2009/10/02(金) 00:20:33 ID:???
>>694 foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。
プラグインで実装させるとか、難しそうだ・・・
そのImageBOXで出力されるものを$out_ImageBOXとか変数に入れ込んでおけば?
697 :
柏アラフォーパパン& ◆.d6LNJ2fbM.9 :2009/10/02(金) 15:06:34 ID:bCUcRsfE
dsd
文字列をテンプレート処理出来るメソッドでも作ればいいんじゃないかね。 $list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');
$list[0]["text"] = 'test.jp'; {foreach from=$list item="data"} {ImageBox file=`$data.text`} {/foreach} じゃ駄目なのか?
よほど特殊な処理をさせたいのでなければ
>>699 に落ち着くと思う。
まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。
701 :
692 :2009/10/04(日) 00:06:35 ID:???
>>699-700 その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。
それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました
702 :
692 :2009/10/04(日) 00:08:43 ID:???
703 :
nobodyさん :2009/10/11(日) 13:15:33 ID:gYB28ahJ
すみません、質問です smartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが HTMLにもモロに出てしまって美しくありません どうにかする方法ないでしょうか?
{strip}{/strip} で囲うべし。
>>704 かっこわるいです。次の方お願いします。
反論ではないけど、 おれはHTMLの頭から終わりまでstripで囲ってるよ。 改行、空白によるブラウザの変なバグにも遭遇しないし、 何より若干ではあるものの軽くなる。 かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。
意図した改行を入れたい場合はどうしてるん? <textarea>の中身とか
>>704 おおー、そうだそれがありました
ありがとうございました
>>707 <textarea><$hoge|nl2br></textarea>じゃ対処できないもの?
改行を残したい箇所を 逆にliteralで囲う。
JavaScriptとか、改行に意味を持つ言語が混在する可能性を考えると一括して{strip}するのは得策じゃない気がする。
>>703 そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>
712 :
nobodyさん :2009/10/13(火) 23:52:48 ID:B+0jNtpm
Smarty3期待アゲ
713 :
nobodyさん :2009/10/14(水) 00:10:46 ID:k/3ZY/k4
質問です。 ↓の、アンパサンドって何の意味があるのでしょうか? $smarty =& new Smarty;
参照代入
>>713 ないよ。
PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。
>>715 ほんとに? 俺も参照代入だよって説明どこかで読んだなぁ
あの解説ウソついたのかしら?
4なら意味あると思うが
ちょっとコード書いて実験すればわかるだろ 俺面倒だからパスね
みんなこんな曖昧なままに済ましてきたってことはあまり使ってない機能ってことかな 俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。
オブジェクトのリファレンスか。 使い道が思いつかんでもないが実際に 使う場面ってそうそうなさそうな。
Smarty 3だれか使ってみた??
使ってみた
Smarty3微妙だなぁ・・・相変わらず癖の強いコーディングで読むの疲れる。 extendリソースがあるんだけど、使い方解る人いる?
結局Smartyなんてassign、display、{if}、{foreach}だけで十分じゃん というかコレが核だと思う 後は必要に応じて・・・って感じで十分だし
Smarty3のプラグインは何故グローバル関数なんだろ? どこら変がPHP5 OOPなんだよ
プロパティもメソッドも全部publicは鬼だ 一方、__callでメソッドの外部化をしてる extendリソースってどれ??
>>727 sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw
getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ
smarty使ってるレンタルブログサイトとかないの?
>>730 あるとしてもユーザにSmartyフォーマットでのカスタマイズを許可するとは考えにくいな。
>>730 別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。
中身はsmartyだけど、smartyフォーマットは使わせないようにして <%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない 大体は自前でやってるか、MovableTypeの改造版じゃないかな
>>725 それだけしか使わないならもっと速いテンプレートエンジンあるんじゃない?
Smartyでレンタルブログ運営したら重くてしかたないんじゃない? ユーザー大量にいたらキャッシュ効かせても厳しい気がする
それは設計の問題であり、Smatyが原因にはなり得ない。
Smartyの設計の問題ってことですね
おしい。Smartyを使う人の設計の問題。
いい話題がありませんねー
gooブログの有料版の説明のとこにこんな記述がある {include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"} パスにSmarty入ってますがな
実際にロジックとテンプレート合わせないとテンプレート側の文法の間違い分からないの?
745 :
nobodyさん :2009/11/01(日) 07:20:38 ID:ZF01kyEW
Smarty 3.0 Beta 1 Released
>>744 確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745 モノリンガルの俺には厳しいようだ
748 :
nobodyさん :2009/11/09(月) 13:54:09 ID:jgJG5jOb
テンプレートに定義していないコード(例えば{test}など)がある場合、 Smarty errorが表示されます。 このエラーを表示しない方法はないのでしょうか? PHPのエラー表示をしない事で対処するしかないのでしょうか?
trigger_errorしてるところをスキップしちゃえば?
750 :
nobodyさん :2009/11/09(月) 20:59:58 ID:I33d9sv+
$error_reporting ↑これ?
751 :
nobodyさん :2009/11/11(水) 19:01:43 ID:0BFUpwQj
Smartyって、テンプレートの中にテンプレートを読み込むようなことできる? ある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど 変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね 外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?
そのレベルも調べられないお前には無理だ。
753 :
nobodyさん :2009/11/12(木) 07:44:56 ID:dv0ticwo
Smarty 3.0 Beta 2 Released
>>752 おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね
test
756 :
754 :2009/11/12(木) 19:22:51 ID:SoSJwGM8
ごめん、相談させて欲しい hoge.tplに {insert name="hogeAction" title="テスト" script="hoge_action.inc.php"} って書いて、 同じディレクトリにあるhoge_action.inc.php に <?php function smarty_hogeAction($param, $smarty){ return 'あいうえお'; } ?> って書いたんだけど「あいうえお」の出力がされない。 ($param, $smarty)の引数を消して function smarty_hogeAction(){… とやってもダメだ。 何が問題かな? ご意見よろしくお願いします
書き間違えた × smarty_hogeAction ○ insert_hogeAction でやってます
758 :
756 :2009/11/12(木) 22:52:47 ID:???
どうも、自己解決しました。 お騒がせしました
どういう解決方法?
760 :
756 :2009/11/13(金) 14:36:48 ID:???
勘違いしてたというか参考にしてたページがわかりにくかったというか、 要するに .tplでの記述は {insert name="hogeAction"} スクリプトファイルは insert.hogeAction.php ファイルの格納場所は /pluginsディレクトリ として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。 insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、 関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて 変なことやりまくってたよ。恥。
公式マニュアル見ればよかったのにね
762 :
756 :2009/11/13(金) 15:11:57 ID:???
764 :
756 :2009/11/13(金) 16:02:41 ID:???
>>763 そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ
偉そうなので教えん
自分で試せばいいのに。
キャッシュ効かせても速度あんまり変わらなくね?なんなのこれ
下記のように、フォームでエラーがあればp要素を表示、なければ何も表示しない場合、 みなさんは、どこまで、どんな方法でテンプレートを利用していますか? <p class="error">※必須項目です。記入してください。</p> <p><input type="text" name="mail" value=""></p> 1. エラーメッセージは最初からpでマークアップ済み、そのままassign、smartyには{}のみ {$errors.mail} 2. エラーメッセージはテキスト、assign時に空欄かどうか判定してpでマークアップ、smartyには{}のみ {$errors.mail} 3. $errorsにはテキスト、そのままassign、smartyで{if}処理 {if $errors.mail}<p class="error">{$errors.mail}</p>{/if} 4. $errorsにはテキスト、そのままassign、smartyで関数処理 {$errors.mail|markupFunction} デザイナさんと分業する場合、 プログラム側がマークアップに関わらない3.が一番いい気がしているのですが、 少しテンプレートファイルが煩雑になるのが気になったりもします。 エラーメッセージマークアップ用の小さなテンプレートファイルを作っておいて、 4.のmarkupFunctionから読み出して利用すると比較的キレイな気もしますが、 テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。
>>767 Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2〜3倍速くなる程度だけど。
>>768 ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。
自分はクラスだけでやってる。 エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。 div p{ display:none } div.error p{ display:block } これでエラー時のテキストもデザイナー側で書ける。 親要素は <div class='{$error.title}'> って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。
>>769 やはり3.ですか。
ただその場合
$errors.mailに値があればいいんですけど、
値がなくifがfalseになると、その行末の改行が無視されて
次の行のインデントが崩れちゃうのが気になります。
{/if}のあとに空白1文字入れとくと回避できますが、
「よろしくないテクニック」っぽくて好きになれません。
>>703 でも話題にでていたようですが、
このsmartyの仕様は気に入りません(苦笑)。
{if $errors.mail}
<p class="error">{$errors.mail}</p>
{/if}
こんな感じで3行使うのがいまのところ最善か。
テンプレートファイルがますます煩雑に…(苦笑)。
>>770 CSSのdisplayだけで制御するのは、
自分も一瞬頭をよぎったことはありますが、
やはり気持ちが悪いですごめんなさい。
あとエラー時のテキストが「入力内容をご確認ください」程度ならいいけど、
「メールアドレスが正しくありません」
「必須入力項目です」
「文字数が多すぎます」
とか丁寧に表示してあげる場合に対応しにくい気がします。
>>770 CSS切っている環境とか携帯対応を考えた場合は向かない仕様だな
んなもん、{$err} にしといて、 errに <p class="error">エラーメッセージ</p> ぶち込みだわ。
>>768 汎用性やら考えると3じゃないかな。
他の方法だと、特定箇所だけ見た目を変えたい時にデザイナ側で対応しにくい気がする。
テンプレートを関数もどきとして使うような方法もありかもしれない。
// エラー表示箇所
{include file="error.tpl" error=$errors.mail}
// エラー表示テンプレート error.tpl
{if $error}
<p class="error">{$error}</p>
{/if}
>>774 なるほど。4.の別解のような感じですが、
それだとincludeするテンプレファイルまでデザイナさんに任せられるので、
複数パターンのテンプレファイルが用意できたり汎用性が高そうですね。
図らずも(?)、{if}による改行問題も、
別ファイルに追い出すことで解決できてるし、
なかなか良いかもしれません。
776 :
nobodyさん :2009/11/16(月) 12:51:37 ID:tubifOLG
Smartyは遅いって意見ありますが、体感レベルで明らかに遅いですか? 1秒2秒遅くなった経験がある人いるんでしょうか?
そんなに遅くないよ。 「遅い」って感じるのは鯖が悪いんだろ
>>776 古いサーバPC上でキャッシュを無効にして使っても、0.001秒の処理が0.002秒になる程度。
数値的には2倍だが、体感的にはまずわからない。
素のPHPコードに比べたら遅いと言えるが、
個人的にはメリットの方が桁違いに上かな。
>>777 ,778
よかったー。いかにもノロノロしてるような状態になるのかと思いました。
安心して作れます、ありがとう
じゃキャッシュのメリットって何?って感じだな
Smarty 3.0 Beta 3 Released ペース早いな
>>780 更新が少ないもしくは、更新タイミングが決っている場合にキャッシュ有効にすればいい。
大規模サイト用のチューニング項目だと思えばいいんじゃないかね。
>>780 769にも書いたけど、負荷テストした時は効果合ったよ。
同時アクセス100とか1000の場合に。
多数の他人に更新させる場合はキャッシュオフ? 掲示板とかね 有効にしといて書き込まれたタイミングでキャッシュ削除するのかな
ぴーえちぴー5.3.0 りなくす Smartyでテンプレートが無い場合に白い画面になっちゃうんで、エラーをハンドリングしたいんですけど出来ないでしょうか? テンプレートがあるか判定なんてめんどーなことしないといけないんですかね?
できるでしょ そもそもfatal errorなり出るはず
PHPのerror_reportingが0になってるとかじゃね?
788 :
nobodyさん :2009/11/20(金) 14:07:49 ID:L1RHfQMx
try { $smarty->display($tpl); } catch { なんたら } みたいにやりたいです。 エラーレポ調べてみます。
789 :
nobodyさん :2009/11/20(金) 14:24:17 ID:L1RHfQMx
error_reportingはnullのようです。ログに出して確認。
3に設定して見ましたが例外はキャッチできませんでした。3が間違いなんでしょうか?
>>786 それは戻り値として出るということですか?
>>789 error_reporting(E_ALL);
792 :
nobodyさん :2009/11/20(金) 14:32:43 ID:L1RHfQMx
displayのソース見ましたが、エクセプションはスローされないようですね…
素直にtemplate_exist使いたいとおもいます。
>>786 voidですね。
fatal error出るでしょに対する返答がvoidですとか謎い
794 :
nobodyさん :2009/11/20(金) 15:05:46 ID:L1RHfQMx
display_errors = Off
↓
display_errors = On
httpd restart
error_reporting(E_ALL);
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
>>791 XAMPPじゃないです。それぞれソースからいれました。
795 :
nobodyさん :2009/11/20(金) 15:09:05 ID:L1RHfQMx
あ、794の結果はダメでした。同じ結果で白い画面になります。
>>793 789への自己レスです。
>>794 テンプレートファイルが無かった場合に出るエラーは
Smarty.class.phpの1591行目くらいにある
$this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"');
でしょ?
で、例外をスローさせるための案
1.当該箇所を書き換える
2.Smartyクラスを継承したMySmartyクラスを作って_fetch_resource_infoメソッドをオーバライドする
3.set_error_handler関数でwarningが発生した時に例外投げるようにする
xamppじゃないとのことなので真面目に答えてみました
798 :
nobodyさん :2009/11/20(金) 15:25:36 ID:L1RHfQMx
>>797 おぉ、まさに欲しかった回答です。
ありがとうございます。
そのワーニングで間違いないです。
1…書き換えるのは好きじゃないです。
2…うーん、処理に悩みそうです。
3…これが簡単そうです。
ちょっとがんばってみます。
たすかります。
fetchってどういうとき使うの?
自動送信・返信メールの文面とか。
>>800 ありがと、メールのテンプレか
就活してたときの毎ナビか何かの企業からメールに
『こんにちわ寒くなりましたね、{$username}さん』
とか、書いてあったのを思い出した
803 :
nobodyさん :2009/11/26(木) 11:34:27 ID:tP8Fcb0C
しつもんです parent.tpl中で、includeを使ってテンプレート化したヘッダを読み込ませたいと思ってるんですが テンプレート(header.tpl)をページの種類に応じて動的に変更させたいときの手順がよくわからないです。 たとえば、動物の紹介ページでは動物の一覧を、自動車の紹介ページでは自動車の一覧をヘッダに表示したい時、 表示対象の画像や情報(動物写真/自動車写真、それぞれの名前情報など)は、includeタグの中に変数として 持ち込むしかないのでしょうか? 自分のイメージでは{include file='header.tpl' pageType='animal'}として、 変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが。 (なるべく一カ所で取得プロセスを管理したいので) そんなのは無理で、あらかじめ親のparent.tpl=parent.phpで必要データを取得して、 それをincludeに変数で渡すしかないという結論でいいのでしょうか? 今思いついた方法は、incudeタグ中の変数でpageType='animal'と渡して、それをheader.tplで 自前のmodifierに譲渡しそこから必要データ取得→出力の流れです。 もっとスマートなやり方ないでしょうか? アドバイスお願いします
>>803 何を言ってるのか良く分からないけど
>変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが
すればいいのでは?
補足、テンプレートファイルで解釈するのではなくPHP側でという意味で。
余計意味がわからない。 なぜmodifier?function作れば?
807 :
803 :2009/11/26(木) 23:09:48 ID:tP8Fcb0C
皆さんありがとうございます
>>804 header.tplって、単独のページとしては存在しないあくまでパーツのテンプレートなので、
index.tplに対するindex.phpの様なコントローラ(?)のファイルってheader.tplにはないのではと
考えたのですが…(header.phpにアクセスすることはないと思うので)
思い違いなのでしょうか?
>>806 勉強不足なのかもしれません、functionについて調べてみます。ありがとうございます。
>>807 includeするんだからindex.phpでやればよいのでは?
809 :
803 :2009/11/27(金) 01:09:41 ID:???
>>808 あ、親のページでってことですか、、なるほど!
1)ページのテーマ(animalとか)を引き渡されてDBに働きかけるphpを外部化し、
2)それをheader.tplの親のanimal.php, car.phpなどに読み込んで、
3)結果をincludeタグ渡す
って感じでいいかな。
これならデータの取得部分が複数にばらけることもないのか。。
これのデータ取得の順番を変えたものがfunctionでやるってパターンかもしれない
ありがとうございます。チャレンジしてみます
810 :
nobodyさん :2009/11/29(日) 07:42:11 ID:wdDHDadn
テンプレート関数プラグインのfunction(smarty.hogefunc.php)を作ったんですが、 <?php $var = "abc"; function smarty_function_hogefunc($params, &$smarty){ global $var; return $var; } ?> 上記の内容で <div>text</div>{hogefunc} としてもabcを出力しません、なぜでしょうか? パスが通ってることは確認済みで、 $var="abc"; を echo "abc" とした場合、 abc<div>text</div>の形で出力するようです。 変数のスコープのチョンボをしてるのかなと考えてはみたんですが… function …{〜} の外に書かれたものは正常に処理されないという仕様なんでしょうか? 申し訳ありませんが、ご意見宜しくお願いします
お前は何を言ってるんだ
return "abc"; してみればいいじゃない。
813 :
810 :2009/11/29(日) 23:16:09 ID:???
>>812 functionの中でreturn "abc"; すると、それは返すんです。
なんでかなぁ
>>811 わかりにくかったみたいですみません
functionの中で ・print_r($_GLOBALS)してみる ・echo $varしてみる
815 :
nobodyさん :2009/12/02(水) 14:25:43 ID:1PNbu+TX
smartyのキャッシュを有効にするとサイドバーにinsertしておいたプラグインが上のほうに来てしまうんだけど、何か原因わかりませんか? ブラウザで見るソースとcacheフォルダのキャッシュを見ると、DOCTYPEタグより上にプラグインの中身が出てしまってるんです
817 :
816 :2009/12/05(土) 18:55:21 ID:???
あー、すげー馬鹿なことやってた insertプラグインって中でechoしちゃダメなのかreturnしないとイケないのか キャッシュオフのときは正常に見えるから気付かなかった
だからいったじゃん
819 :
nobodyさん :2009/12/09(水) 10:32:51 ID:AWY/enbH
一部キャッシュして欲しくない部分があるんですが、そこだけ{insert}にして外に出すしかないんでしょうか?
820 :
819 :2009/12/10(木) 15:56:47 ID:???
なさそうですね
Warning: Smarty error: unable to read resource: のエラーが出る際に、 自分で作った404エラーページ(のテンプレ)を読み込むことはできますでしょうか?
とりあえずそれは404じゃない。 $error_reportingを参照したらいいとおもう。
825 :
823 :2009/12/15(火) 16:39:30 ID:???
自己解決しました。
SmartyってWebで検索してもマニュアルかその複製しか全然情報が出てこないけど、どっかいいサイトないですか? マニュアルはサンプルとか説明が簡単すぎて知りたい情報が出てこないのですが・・・ 例えばdefault_resource_typeプロパティで、デフォルトのfile以外の値を知りたいのに、それどころかサンプルすら書かれていなかったり困ります リソースプラグインの事ももっと知りたいんですが見つかりません PEARでも感じましたが、なんでこう情報が少ないんでしょうかね? マニュアルとそのコピー以外の情報が出てきません
PEARもSmartyも情報は溢れてるよ。 無いのは君の理解力だろう。 Smartyに至ってはマニュアルあれば大抵は事足りる。 リソースプラグインに関しても、マニュアル読んでわからん人には無縁なんじゃねぇかな。 あれ以上丁寧な解説求めるなら金払ってスクールにでも通えばいい。
ソースも結構シンプルだから 謎があったら追い掛けてみたら?
>>827 溢れているとまではいかないんじゃないかと俺は思う
具体的にどんな情報が欲しいの? 「俺の知りたい情報が無い」ってだけじゃ、教える側もわからんだろう default_resource_typeにしたって、リファレンスのテンプレートリソースとリソースプラグインの項目に十二分な情報載ってると思うしなぁ ここまで枯れた技術なのに、情報が足りないってのは調べる力か理解力が無いとしか思えないんだが
もし情報がなかったとしたらこのスレがもっと賑わってると思うんだ
いやそもそもSmarty使いの絶対数がすくなうわなにをするやめ
>>831 「もし情報があったとしたら〜」なら同意できるんだけどな。
ブログなんかでちょこっと取り上げているサイトはあっても
ユーザー同士で語り合うようなコミュニティは無い。
マニュアル見ろよってのは当たり前の行為で、
Smartyはそれ以上の使い方(サイト構築のテンプレ利用など)があるから
使い方やアイディアをまとめたサイトがあれば良いとは思う。
コンパイルせず使う方法ないのかな
>>833 コミュニティか・・・
たとえば2chにSmartyスレたてたらいいんじゃないかな
名案だな。
俺もSmartyのしっかりとしたサイトってないなとは思ってた
マニュアルって簡潔にまとめられてるからね
>>833 の言ってるようなことは俺は分かるね
Webだけじゃなく、他にも構築する時にここどうすればいいんだっけ?って時に調べられないからね
情報が少なすぎて
書籍は? 日本語で複数出版されてるのは恵まれてる方だと思う。 まとめサイトは自分で立ち上げて、ある程度充実させられれば 他の人も情報を集めてくれるようになるかもよ。
Smartyの本ってある? Smarty入門しか知らないけれど・・・?
PHPのウェブアプリの本だとSmarty出てきたりするな
Smartyのキャッシュ機能ってなにをキャッシュしてるん? $smarty->assignで割り当てるのは変数だからキャッシュじゃないし
すまんアホなこと書いた
だから具体的にどんな情報が欲しいんだよw WEBに溢れている情報を漁るだけで、大抵の事は答え一歩手前まで調べられるだろ・・・
Smartyをカッコよく使いこなす方法
2chで教えて君をしてる時点でかっこわるい
もっとSmartyをスマートに使う方法
使いこなし方まではWebで出てこないな、確かに
Smarty使う場合はdisplay()以降に処理は記述しない方が吉?
凶
別にそんなことはないかと思うが 2枚以上のテンプレートをdisplay()する場合もあるし
851 :
nobodyさん :2010/01/18(月) 14:06:09 ID:AGLkXiCO
smarty2では $smarty->assign('pref', array('01' => '北海道', '02' => '青森')); {$pref.01} で北海道が取れていたのだけど、 Smarty3Beta板では {$pref['01']} としないと取れなくなったのは仕様変更ですか?
852 :
nobodyさん :2010/01/18(月) 14:06:25 ID:YiIR+7Mx
質問です。 $hoge = array( array("name" => "aaaaa", "value" => 1), array("name" => "bb", "value" => 2), array("name" => "ccc", "value" => 3), array("name" => "dddddd", "value" => 4) ); $fuga = array( array("value" => 2), array("value" => 4) ); 上記二つのような配列変数があります。 Smartyを使って、$hogeの内容をチェックボックスとして表示しようと思っています。 また、$fugaの内容と一致するvalueの部分を選択状態にしておきたいです。 (例) □aaaaa ■bb □ccc ■dddddd テンプレート側でどのように指定すれば、上記方法を実現できるでしょうか。 {foreach}を使おうと思ってるんですが・・・
>>852 html_checkboxes使うの?それとも手動でやるの?
>>853 手動です
html_checkboxesのほうがやりやすいのでしょうか?
>>854 foreachでやるなら普通にループさせて
要素を出すところでifで比較してchecked入れればいいんじゃない?
$fugaのデータ構造がそのまま使えなくてちょい面倒だけど
予め使いやすいように変換するか、更にループさせて全件比較すればいいかと
856 :
nobodyさん :2010/01/20(水) 22:11:47 ID:q80CCbb+
以下のようにinterfaceによる拡張を試しています。 interface iSmarty { const MY_NAME = "foo"; } class MySmarty extends Smarty implements iSmarty {/*設定*/} {$smarty.const.MY_NAME} 値fooが表示されることを期待したのですが、MY_NAME(定数名)が表示されてしまいます。 マニュアルの{$smarty.const}の項を見ると、defineによる例が掲載されていて 確かにdefineで定義されていれば正しく値が表示されます。 バージョン2.1なのでちょっと古いのかなとも思うんですが、 php5のコードを追加するのは無理でしょうか。
857 :
856 :2010/01/20(水) 23:35:47 ID:???
すみません、しばらく考えていたのですが、断念することにしました。 拡張も考えてみたのですが、もとがphp4ですから、こちらのPHP環境と合わせて考えると サブクラスで定義した"クラス定数"をテンプレートから呼び出すことは おそらく無理と判断しましたm(_ _)m 確かなことは言えませんが、クラスを変数で参照できるphp5.3以降でなら プラグイン等で機能追加できるような気がします。
php4だから無理ってどういうこっちゃ?どこに書いてあるん? マニュアルの例はもうちょっと落ち着いて見直してみたほうがいいと思うけど
インサートプラグインの中でもテンプレート指定してキャッシュさせてるけど インサートプラグインが1ページに5、6個あるとかなり速度低下してきてしまう
>>859 そんな、あなたにsmarty3の出番ですよ。
プラグインを書く必要ないぞ。
861 :
859 :2010/01/30(土) 10:34:45 ID:???
え、そうなの?プラグイン書かなくていいってどういうことですか? 今はindex.tplに{insert name="hoge"}って書いて [insert.hoge.php] function smarty_insert_hoge($params, &$smarty) { if(!$smarty->is_cached('plugin_hoge.tpl', "plugin|hoge")) { DBからデータを取ってきてassign } return $smarty->fetch('plugin_hoge.tpl', "plugin|hoge"); } DBに更新を加える時にclear_cacheという感じでやってるんですが、作り方としておかしいですか? こういうインサートプラグインが増えてくると、is_cachedとfetchをその分しなきゃいけないんで遅くなってると思うんですが smarty3だと改善されてるんでしょうか?
Smarty3だと{nocache}で囲むだけでいいらしいよ。だから、インサートプラグインいらず。
Smarty2より遅いSmarty3なんてゴミにしかなりえない
865 :
859 :2010/01/30(土) 14:45:10 ID:???
>>862 キャッシュしたいのでnocacheは用途が違う気がします
あらかじめオブジェクトをシリアライズしておいて、それをアンシリアライズして読めば早いよってことなんだけど
方法がよく分からない。
結局require_once "Smarty.class.php"しなきゃいけないんだよね?
意味分かる人教えてください
Smartyの読み込みコスト(時間)を削減する
ttp://code.xenophy.com/?p=73
意味わかんない記事ですね 効果も0.01秒だし
0.01秒って結構大きいんじゃね?
なんで?
あれ?デカくね?
なんでと聞いているんだ
1回表示するたびに0.01秒だろ うちのサイトだと0.01秒早くなったら速度2倍だぜ
感じられねーだろw
875 :
nobodyさん :2010/01/31(日) 16:37:31 ID:tjv1ZgGA
compile_dirのディレクトリがなかったり、書き込み権がない場合 コンパイルエラーになりますが、たまにパーミッション設定を忘れたりして こういう現状が度々あります。 忘れず確認すれば良い事ですが、なにか効率の良い方法はないでしょうか?
どんな風にできたらいいの?
877 :
nobodyさん :2010/01/31(日) 17:59:24 ID:tjv1ZgGA
・コンパイルエラーを出さない ・コンパイル用のディレクトリがない場合、自動的に作成 と言うぐらいしか思いつきません 後者はis_dirでチェックすればいいと思うのですが、前者は方法自体わかりません・・・
>>877 エラーメッセージでファイルを検索→当該行をコメントアウト
>>878 そんな凄い事が出来るんですか?
当該行をコメントアウトって、文字列の置換とは違うんですよね?
Smarty2.6からSmarty3への移行ってlibsの中身変えるだけでいいんですか?
えっ?
string:リソースとforが欲しいだけなんだが、Smarty2に入れてくれ
>>880 互換性はあるとかないとか、
廃止される構文もあるとかないとか
stringリソースは自分で作れ。 PHPっぽく数学処理出来るのはいいよね。Smarty3。 開発に時間かけ過ぎてて、既に腐り始めている気がするけど。 extend欲しいな。
885 :
nobodyさん :2010/02/05(金) 12:00:27 ID:1wZyvV1Q
default_modifiersでescape:htmlやってたらforeachでエラー出るとか{debug}ができないとか そういうのは最新版では治ってるの?
debugとescapeプラグインを数行書き換えるだけで治る。
Smarty3のstringリソースってキャッシュしてくれないのか、ファイルの更新日時とか取得できないから当たり前か・・・
smartyとquickformの組み合わせでdefault_modifiers escapeするとフォームが全部エスケープされてしまうね じゃ、nodefaultsにすりゃいいかというと、フォームのユーザが追加できるようにしている場合、 デフォルトの値(フォームのセレクトとか)にエスケープしたい文字があると途端に無理が出る 結局ロジック側でh()するしかなくなる
889 :
nobodyさん :2010/02/09(火) 13:31:36 ID:Af+mgrun
Smartyで画像の出力ってできる? "Content-Type: image/jpeg"的な意味で。
プラグイン作れば?
>>889 つーか、ここは正攻法でMLに投げるんだ!
>>889 テンプレートファイルの内容を画像データにすればいいんじゃないかな・・・
パーサーが変なの拾って壊しちゃうかと displayやfetchしてる所でget_file_contentするだけだろ しょーもな
関数名違うかも
file_get_contents()だな。 確かにSmartyが有用なケースが思いつかない。
MTってSmarty使ってるのか
気のせいか
898 :
nobodyさん :2010/02/20(土) 17:16:25 ID:0jUjLrgq
ファイルではなく 変数に格納されたテンプレートを使うために 変数用のリソースプラグインを使って試行錯誤してるのですが 相談させてください。 このリソースプラグインに変数(テンプレートの内容)を渡す方法ですが 2つ思いつきました。 1つは $hoge = "ここにテンプレートの内容"; $smarty->fetch("var:hoge"); のように変数名を渡して プラグイン側で グローバル変数の$hogeの内容を取得。 しかしグローバル変数を使うというのがちょっと気になります。 もう1つの案は $smarty->fetch("var:{$hoge}"); としてテンプレートの内容自体を渡す方法。 しかしこれだと長い名前の中間ファイル(template_cにできるファイル) が作られてなんだか気持ちが悪いです。 毎回コンパイルでいいので中間ファイルは作られないほうがいいのですが それもできない感じ。 みなさんはどうしてますか?
リソースプラグイン側で グローバル変数じゃなくてSmartyにassignされた変数を見るようにすればいいんじゃねーの?
900 :
898 :2010/02/24(水) 09:57:22 ID:???
>>899 規制でかけなかった・・・
結局Smartyを拡張してプロパティを追加したら
プラグイン側で普通に見れました
>>899 ありがとうございます
なるほど、それは気づきませんでした
そのほうが手軽ですね
Tenjin使い始めた。smartyより3倍早いらしい。 フレームワークをやったことなかったけど、比較的わかり易い。
903 :
nobodyさん :2010/03/04(木) 15:15:33 ID:jG8+9EsN
Smarty3はいつになったら出るんだよ。
遅い3はいらない
905 :
nobodyさん :2010/03/06(土) 00:22:27 ID:3cIJcZyy
Smartyのoutputfilterで文字コードをUTF-8からSJISに変換する処理を入れています。 こんな風に $smarty->register_outputfilter("filterSjis"); function filterSjis($buff, &$smarty) { return mb_convert_encoding($buff,"SJIS-win","UTF-8"); } ブラウザで表示させると頭に「?」が入ってるんだけどこれはなぜでしょうか? Smarty 2.6.26 PHP 5.3.2 です
UTF-8テンプレートにBOMが入ってんじゃねーの?
ありがとう その通りでした
自己中マルチはシネよ
そういう問題じゃないけど許す
さらに宣伝かよ
β8はfinal betaらしいので、次はRC版か
俺の勉強不足かも知れないんだけど、 cache_lifetimeって以下の仕様じゃないんだね 10秒に設定→10秒経ってるキャッシュファイルは全て削除
914 :
nobodyさん :2010/03/11(木) 17:23:06 ID:TZPJnNmb
削除されるわけないだろ。
じゃ、キャッシュ溜まりまくるけど どの段階でclear_all_cacheするの?
>>913 同じく削除されると思うのが普通な気がする
セッション管理みたいに
>>915 必要なら好きなときにどうぞ
削除というよりは、要求されたページのキャッシュがlife timeより古かったら 再生成(上書き)されると思ってる。 つまり、要求されなきゃそのまま放っておかれる(わざわざ消さない)と。
マニュアル良く読めw
cache_lifetime = -1;にしてるオレには関係のない話だな
負荷だいじょうぶか?
-1は無期限でキャッシュし続ける 0が毎回作成 CMSみたいに管理画面から更新するなら、 そのタイミングで必要な分だけキャッシュを削除すればいいしね
×キャッシュし続ける ○キャッシュを使い続ける でした
924 :
nobodyさん :2010/03/19(金) 17:17:56 ID:KC5byG0j
前のほうに出てた変数によるテンプレートについてなんですけど コンパイルしたときの中間ファイル(templates_cにできるやつ) を作らないようにはできないでしょうか? メモリ上で生成みたいな。
924さんの質問は良い質問ですね 私も気になります どなたかご教示お願い致します
出来ないよ。そもそもコンパイルファイル作るから、 Smartyテンプレートに変数を反映できるのに。
sectionとか使うとコンパイルファイルに複雑なphpが・・・ これをforの代わりに使うのか
928 :
924 :2010/03/19(金) 20:10:50 ID:???
>>926 なるほど納得です
ありがとうございました!
まぁよく読み込むファイルは、OSが勝手にメモリにいれてくれるから、気にしなくてもいいんじゃね?
変数テンプレートやってみたけど コンパイルのときのファイル名が長すぎるってエラーになったぞ? どうしてんの? ファイル名固定にすると同時アクセスでやばそうな気がするし
どんだけ長い変数名にしてるんだw
>ファイル名固定にすると同時アクセスでやばそうな気がするし これの意味がわからん・・・
smarty使い始めた初心者の方いますか?
いたら何か教えてくれるの?
はい、教えますよ
936 :
nobodyさん :2010/03/24(水) 14:41:59 ID:9Owlir6z
>>935 default_modifiersの挙動がおかしいっす。
出力するものすべてにescapeをかけたいが、配列があるとうまくいかないようです。
あとdebugも同時使用不可。
いじくって直したいが、どこをどういじくるべきですか?
俺も2日前からここに出入りしているSmarty初心者だが、 このスレを default_modifiers で検索するくらいはしたほうがいいと思うぞ・・・
939 :
nobodyさん :2010/03/26(金) 10:19:43 ID:LJ/oTT1k
foreachで回す変数を場合によって変えたい。 {if $hoge == 0} {assign var="var" value="a.b"} {else} {assign var="var" value="a} {/if} こんな風に。 {foreach from=$c[$var] item=item} とすると、elseの場合は上手くいくんだけど、$hoge == 0の時にうまくいかない。 もう一個階層があるのをどうにかしないといけないと思う。 どうしたら良いか誰かご教授願えますか。
940 :
939 :2010/03/26(金) 11:42:31 ID:LJ/oTT1k
PHPの方で場合分けにより階層を浅くしました。
{if $hoge == 0} {assign var="var" value=$c.a.b} {else} {assign var="var" value=$c.a} {/if} {foreach from=$var item=item} じゃだめなのかい。
今時Smartyも無いだろ。 どれだけ時代遅れだよ。
じゃあ何が有るんだ
Smarty隔離スレにきて言うあたりが面白い。 多分、Smartyすら理解できなくてファビョっちゃったんだろうな。
>>942 さんまだー?
通は何を使うのか教えてくださいよ〜ねえ〜
お薦め?本物のバカなのかこいつはw PHP自体がテンプレートになってるんだから PHPそのまま使うに決まってんだろ。
949 :
nobodyさん :2010/03/27(土) 20:46:54 ID:uuG3/ncY
フイタからバカ晒し上げ 947 名前:nobodyさん[sage] 投稿日:2010/03/27(土) 20:45:23 ID:??? お薦め?本物のバカなのかこいつはw PHP自体がテンプレートになってるんだから PHPそのまま使うに決まってんだろ。
>>949 こいつwww
本物だwww
Smartyは使い心地いいですか?www
超雑魚wwwww
まだそんな事言ってる奴いたのかww PHP自体がテンプレートww 下手したらMVC分けすれしてねーんじゃね?w
952 :
nobodyさん :2010/03/27(土) 22:33:37 ID:uuG3/ncY
>>950 先生はPHP自体がテンプレートであるとおっしゃってますあげ
PHPは間違いなくテンプレートエンジンそのものなのだがw Smarty信者はPHPを知らない半可通が多いから面白いね。 あと、Smarty信者はMVC理解してないだろw そもそもSmartyってぜんぜんMVCじゃないじゃん。 反論あるならSmartyにおけるMVCというものを解説してみwwww
まぁ、価値が判らない人には不要だね テンプレート編集権限も与えたくないが
SmartyはVだけだよー MとかCは別途用意してください
おやおや、こわいこわい。Smartyスレでガキが暴れとるね
Smarty信者の恥ずかしい主張 ・PHPはテンプレートエンジンではない ・PHPではMVCできないが、SmartyではMVCできる ・SmartyはVしか出来ないので、MとCは別途用意する ・変なコピペでPHPユーザーを馬鹿にして悦に浸るガキの集団である SmartyがPHPで書かれてるって知ってた?w
なんだ、釣り人か
PerlとかRubyみたいなテンプレート機能がないような言語が テンプレートエンジンを使うのは分かる。 が、PHPはそれ自身がテンプレートの機能を持っているので、 Smartyがとっても阿呆に思える。 CakePHPやsymfonyなどのフレームワークのビュー層は テンプレートエンジンを使わずに 生PHPを使うような前提になっている。 (当たり前のことだよね) ただ、PHPのテンプレートとしての機能は 非常に貧弱なのでSmartyのようなアホライブラリが出てきてしまったのも しょうがないとは思うがな。 PHPにもJavaの標準ビュー層であるJSPのように もうちょっとマシな機能が揃っていれば良かったのにね。
960 :
959 :2010/03/28(日) 00:23:05 ID:???
ちなみにこういうアホ共は→
>>949 、
>>954 そこら辺のことがまったく分かっていないので
今後まともな技術者になることは有り得ないと思うね。
ビュー層の話なんか本当に底辺の話なので
本当は雑魚共と議論なんかしたくもないんだw
関係無いけどこいつらDIとかORMとかのロジック層、DAO層とかの
アプリケーションの本質的な部分の技術をちゃんと理解してるんだろうか?
ムリカナァw
>>961 情けないなぁ。反論しろよ。まるで俺がいじめてるみたいじゃないか。
どうしようもないね。
何故自分がSmartyを使ってるのかも理解してないのか?
ただ「これいいらしいよ」って人に言われて使ってるだけなんだろうな。
だから反論しようにも出来ない。信念とかポリシーとか無いから。
スレタイに「隔離」って付いてる意味が分かったよ。
>>962 煽っている最中すんません。
自分はホント初心者なんですけど、
ソースが見やすくなる、っていう理由だけで使うのはダメですか?
急に活気が出てきたな まだまだ廃れてなかったってことか
>>963 複数の人間で作るプロダクトだと大抵デザインとプログラムが分かれる
デザイナーに直接書いてもらえる可能性が高い
データ生成とHTML生成で分離するから問題が起きたときに切り分けしやすい
エスケープ処理などを一括で行えるから楽
何より言う様に構造が把握しやすい=ソースが見やすい
>>960 なんだオメー
あげられてさらし者にされたのが悔しかったと言え
>>967 お前みたいな奴がいちいちほざくからスレが荒れる。
消えろ。二度と書き込むな。
>>963 ソースが多少きれいになるとかいう妄想にとりつかれて
それ自身がテンプレートエンジンであるPHPから
わざわざテンプレートエンジンを使って表示するとか
これほど滑稽なことはない。
>>966 >複数の人間で作るプロダクトだと大抵デザインとプログラムが分かれる
>デザイナーに直接書いてもらえる可能性が高い
>データ生成とHTML生成で分離するから問題が起きたときに切り分けしやすい
妄想も大概にしとけや。
君、本当にWeb制作の仕事したことあるの?
俺は今まで色々な現場で色々な言語でWebの仕事をしてきたが、
デザイナーが直接ビュー層をいじることなんてありえない。
デザイナーが作ったHTMLをビューに変換するのはプログラマーの仕事。
>エスケープ処理などを一括で行えるから楽
なんのエスケープ処理か知らんが、
フレームワーク使ってればFilterとか色々とあるんだから
それでやればいいじゃん。
>何より言う様に構造が把握しやすい=ソースが見やすい
Smartyのコードが入ったHTMLが見やすい?
妄想にとりつかれてんな。
頭冷やしてもう一度よーく見てみろ。
生PHPで書かれたHTMLと比べてそんなに変わるか?
971 :
970 :2010/03/28(日) 17:09:48 ID:???
あと、一言。 PHPのテンプレートとしての機能は非常に貧弱なので Smartyのようなテンプレートエンジンが出現しちゃうのも しょうが無いとは思ってる。 こればっかりは言ってもしょうが無いんだけど、 PHPにJSP2.0相当の機能があれば こんなことは起こらなかった。 Smarty使ってるお前らも是非JSP2.0について 少しは知ってみてくれ。
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
>>970 >生PHPで書かれたHTMLと比べてそんなに変わるか?
ぜんぜん違うね
Smartyみたいにロジックとビューが分離できてないコードがいかに多いことか
一定のルールを作って自由な書き方をさせないところに意味があるんだよ
それぞれの開発が決めたオナニーなルールで仕様書やソース追うより、
Smarty使ってるって書いてあるだけでだいたいのルールの想像がつく
webアプリの仕事をいろいろやってきてこんなことも気づかないなんて
アホすぎる
>Smartyみたいにロジックとビューが分離できてないコードがいかに多いことか 言いたいことが逆になった Smartyみたいにロジックとビューが分離できてるコードがいかに少ないことか
>>973 >Smartyみたいにロジックとビューが分離できてるコードがいかに少ないことか
お前はSmartyを使えばビューにロジックを混入させないことができるのか?
すげーな。分岐の処理もループの処理も記述せずにビューを書き上げることができるのか?
妄想ぬかすなカスが。
>一定のルールを作って自由な書き方をさせないところに意味があるんだよ
>それぞれの開発が決めたオナニーなルールで仕様書やソース追うより、
>Smarty使ってるって書いてあるだけでだいたいのルールの想像がつく
Smartyが決めたオナニールールにしたがってると
Smartyの仕様を知らない人はソースが読めないよねぇ。
そんなことも気づかないなんてアホ過ぎるw
>>975 まともな反論ができなくて壊れたなw
これがこいつの限界
>>975 >お前はSmartyを使えばビューにロジックを混入させないことができるのか?
デザインを構成するためのループや分岐処理とロジックを混同してないかな?
>Smartyが決めたオナニールールにしたがってると
>Smartyの仕様を知らない人はソースが読めないよねぇ。
その為の分離ですよ〜
>お前はSmartyを使えばビューにロジックを混入させないことができるのか? >すげーな。分岐の処理もループの処理も記述せずにビューを書き上げることができるのか? これはないわ
>>976 壊れてるのはお前のオ・ツ・ム
>>977 >デザインを構成するためのループや分岐処理とロジックを混同してないかな?
混同してねーよ。
生PHPでデザインとロジックの分離が出来ないとか訳の分からん言ってるから
そっちが混同してると思ったんだよ。
>その為の分離ですよ〜
意味不明
980 :
nobodyさん :2010/03/28(日) 22:14:41 ID:NiX4hAxZ
フレームワークもテンプレートエンジンもろくに使いこなせないのかWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW 負け犬の遠吠えさらし上げ!
>>980 フレームワークは使いこなしてるけどな。
逆にSmarty使ってますなんて言ってると
あぁレベル低い人なんだなって思われるぞ?
あと何をさらし上げてんのか知らんけど文章から
幼稚さ加減がただよってんな。
どんな風にフレームワーク使いこなしてんの?
>>979 >生PHPでデザインとロジックの分離が出来ないとか訳の分からん言ってるから
>そっちが混同してると思ったんだよ。
うわ、そんな馬鹿が居るんだ!
時間の無駄なのでそんなアホに付き合うのは止めた方が良いかと
>意味不明
ごめん、はしょりすぎました。
逆に、Smartyの仕様を知ってればテンプレートが書けるんですよ。
PHP仕様を知るよりSmartyを理解する方がはるかに楽です。
ぶっちゃけ「こう書けばこの値が表示されるから入れといて」で済みます。
プログラム判らない人にSQLサーバーからどうこうして、HTTP通信してあーだこーだとか、説明してられないです。
何度も書かれてますが、Smartyの利点は「影響範囲が限定される」に尽きると思います。
だから、良く判らない人に作業を振れる
だから、一年後の自分が見てもすぐに把握できる
984 :
nobodyさん :2010/03/28(日) 23:40:33 ID:NiX4hAxZ
俺は970じゃないけど、 Smartyってテンプレートフレームワークとしてはすべてが中途半端なんだよね。 記法も制約も機能もパフォーマンスもMVCも全部中途半端。 デザイナーに適切な権限と制約を与えるには多くのカスタマイズをしなくちゃいけないし、 それをすると「Smartyを使ってる人同士ならソースが読める」ということも無くなる。 命令の書式ひとつ取ってもポリシーが無い。あるとしたらパイプくらいか? でも、パイプにも統一感が無いし、テンプレートエンジンでパイプってどうなのよ? PHPでifもforeachも書けるし、short_open_tagという優れた記法もあった。 何よりPHPの知識があれば学習コストが少ないし、関数も素直に呼び出せる。 JSPもASPも同じだよね。標準的な言語環境をすべて敵にまわして、 「デザインとロジックの分離が出来るのはSmartyだけ!!」と主張してるのだとしたら、恐れ入るわ。
だれもそんなことゆーてへんと思うが
987 :
985 :2010/03/29(月) 00:06:20 ID:???
俺はSmartyを5年くらい前に使っていたことがある。 パフォーマンスが要求されずデザイナが学習済みなら使えるケースもあるのだろうね。 でも大抵のデザイナが完璧なtplをよこしてこなかったので結局プログラマが修正していた。 そのうちフレームワーク全盛期になったら、もっと高度なキャッシュとヘルパーが手に入った。 Smarty pluginをしこしこ作らなくても、よく使う機能はすべて揃うようになった。 もちろんMVCフレームワークだから「デザインとロジックの分離」なんてお題目は当然クリアしている。 Smartyのノウハウは、今の時代に引き継げるものは何一つ無い。 文法的な利便性と美しさはJavaのTaglibsの方が上だしね。 新卒の子にSmarty教えるくらいならEL式とTaglibsを教えたらいいじゃないかと思う。 さもなくば、PHPそのものの初歩を教えたほうが、ずっと本人のためになる。 今でもちょくちょくSmartyが使われているシステムを見かける。大抵はメンテ不能の糞システムだ。 冗談なのか無知なのか知らないけど、Smartyユーザーがフレームワークユーザーを見下しているのを見ると、 こういう奴らがコピペだらけの糞システムを作ってるのかと嫌気も差す。 このスレで「古い知識にしがみついてないで、新しいことを勉強したら?」という旨の書き込みを、 「Smartyってどうよ」みたいな話題になった際に何度か挙げたんだけど、このスレの人たちには残念ながら、 アプリケーションフレームワークとテンプレートフレームワークの違いがまったく理解できないんだよな。 そして、「SmartyでMVCが出来る」とか、わけのわからないことを言っちゃう。 もっとPHPでも真面目にテンプレートフレームワークの進化に取り組む人が増えればいいのにね。 > ぶっちゃけ「こう書けばこの値が表示されるから入れといて」で済みます。 こいつは問題の本質を理解してない。生PHPだって出来るじゃん、そんなこと。 意味を理解せずにコピペを要求しているのだとしたらお前のレベル自体が低いだけだよ。
そんだけテンプレートのこと理解してて 「生PHPだって出来るじゃん」はないわ 生PHP触らせたくないのがまず一番の理由だから 不便なの承知で一枚噛ませてるんじゃねえの?
989 :
985 :2010/03/29(月) 00:23:06 ID:???
>>988 > 生PHP触らせたくないのがまず一番の理由だから
本当に?
何のために?
そんなことをする意味ってあるの?
他のSmartyユーザも「生PHP触らせないためにSmartyを使わせている」の?
そりゃそうだろ そんなこともわからずに今まで何の話してたんだ
991 :
985 :2010/03/29(月) 01:08:57 ID:???
>>990 テンプレートフレームワークの根幹を否定するような発言に見えるがw
やりたいことって「生PHPを触らせたくない相手」が「HTMLだけ触ってればいい」んだよね。
あまつさえ「プログラムを埋め込みたい部分」は「コピペさせる」んだよね。
それってstr_replaceで済む話だよね・・・。
全くポリシーも判断力も無い人相手に改善を求めても、そりゃ無駄だわな。
よくこんなレベルでMVCなんて単語が出てきたな。そっちのほうが驚きだわ。
フレームワークってsymfonyの事? 重くて使ってられないよ
相手が言ってもないことを捏造してまで叩きたい気持ちはわからんなぁ。
>>991 のことだけど。
>>982 なにその抽象的な質問?
Smartyとか使ってるからアホになるんだよ。
>>983 >>988 デザイナーにテンプレートを書かせんなよ。
上でも書いたけどビュー層を書くのはプログラマーの仕事だ。
デザイナーはテンプレートの元となるHTMLを書くのが仕事なの。
お前ら本当はWebのシステム開発したことねーだろ?
>>992 俺は
>>985 じゃないけど、symfonyを使うのは中規模開発以上の場合だ。
重さと開発効率のトレードオフをクリア出来る場合に使えばいい。
君みたいな小さな仕事しかしないような人には無縁。
何だかデザイナーにテンプレート書かせちゃってる馬鹿がいるみたいだから 言っておくが、普通デザイナーはテンプレートは書きません。 デザイナーが書くのはテンプレートの元になるHTMLまで。 テンプレートを書くのはプログラマーなんだから わざわざSmartyなんか使わなくても生PHPで書けるだろ? デザイナーがテンプレートを書くことを前提で話してる奴がいるから 話がおかしくなる。分かった?
そういうことにしたい、しておかないと自己の存在意義にかかわる という切実な思いだけは伝わってきます
997 :
nobodyさん :2010/03/29(月) 02:42:02 ID:9oVnqM8g
Smartyのコードが見やすい云々で無く、デザイナ部にロジックが混入するのを防ぐ意味が大きいかな。 ちょっとPHPかじったデザイナがウンコみたいなPHPコードをテンプレートに書いてきたらどうするの? 安全だっていう保証出来ないでしょう。 俺はSmarty始めてから背も伸びたし、彼女も出来た。 心にゆとりが産まれたおかげか、部活と勉強の両立も出来た。 今度産まれてくる新しい家族にもSmartyを習得させようと思っているよ。
Smartyを始めたおかげで999もゲットしちまったよ(笑)
>>1000 を他人に譲るゆとりも出来たみたいだ。
>>1000 おめでとう。君もがんばってSmartyを学んでくれよな。
初心者だけどがむばります!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。