トップページphp
1001コメント342KB

【PHP】 Smarty 隔離スレ 【テンプレート】

レス数が1000を超えています。これ以上書き込みはできません。
0001nobodyさん2008/02/02(土) 00:21:09ID:6cKcKeTp
まぬあるhttp://www.smarty.net/manual/ja/
0002nobodyさん2008/02/02(土) 00:31:36ID:???
smartyのことを聞きたいやつはとりあえずここに書き込め
0003nobodyさん2008/02/02(土) 01:01:34ID:???
なんで隔離なの?
0004nobodyさん2008/02/03(日) 10:44:03ID:???
ソースと別って意味か?
0005nobodyさん2008/02/09(土) 22:07:45ID:c9Rr2KUa
HTMLの中にコードが書けるのがPHPの特徴だったのに、なんでテンプレートエンジンなんか使うの?
テンプレート使うくらいならPHPなんか使わずにPerlを使った方が効率が上がるのに。
0006nobodyさん2008/02/12(火) 12:01:15ID:???
別にSmartyなんて質問することなくね?
0007nobodyさん2008/02/20(水) 11:19:49ID:q0lktVll
カスタム関数のdefaultを空白('')にして、かつ、もし値があればstring_format(%0.1fなど)して表示するにはどうすればいいですか?(できればif文を使わずに)
現状では、値が無い場合に0.0という表示が必ず出てしまいます。
defaultを先にしても後にしても同様です。
どなたかお願いします。
0008nobodyさん2008/03/03(月) 05:14:04ID:???
ちょっと調べてみたところ
HTMLとPHPが混在した形とSmartとで表示速度が5倍以上違う(当然前者の方が速い)らしいのだけども
なんか他に高速なテンプレートエンジンってないの?
処理速度さえ高速なら機能は最低限でいいんだけど
0009nobodyさん2008/03/03(月) 05:30:31ID:???
10msが50msになったところで大して変わらなくね?
0010nobodyさん2008/03/03(月) 15:19:04ID:FhmTLeYh
>>9
5倍も違うんだと、アクセス多いと如実に効いて来るよ。
0011nobodyさん2008/03/10(月) 20:24:56ID:la5GJf3w
compile_dir配下にできるファイルの
パーミッションを0600にしたいのですが
smartyの設定でありますか?
0012nobodyさん2008/03/11(火) 08:47:15ID:GwdF10l+
smartyと関係ないだろ
umaskとかしとけばいいんじゃね?
0013112008/03/11(火) 11:14:01ID:???
>>12
ごめんなさい
smartyの設定ではできないんですね
umaskでやることにします
0014nobodyさん2008/03/11(火) 15:02:25ID:???
質問したいんですけどいいですか?
0015nobodyさん2008/03/11(火) 17:15:12ID:???
↓どうぞ
0016nobodyさん2008/03/11(火) 21:41:50ID:???
それにしても、アンチスレは別だとして
「できない」ってことを言えない人がいるよね。
0017nobodyさん2008/03/12(水) 10:42:36ID:gvIujdzc
キャッシュを600にする意味って何あるん?

0018nobodyさん2008/03/13(木) 19:13:48ID:???
>>17
他人にみられたくないからだろ?
0019nobodyさん2008/03/14(金) 21:01:04ID:???
Smartyというのは、既にフォームがPHPで書かれてて、それを自分でカスタマイズするって感じですか?
0020nobodyさん2008/03/14(金) 21:10:40ID:???
そんなわけねーだろw
0021nobodyさん2008/03/14(金) 21:30:53ID:???
じゃあ初心者には難しいですね
0022nobodyさん2008/03/15(土) 02:54:21ID:???
>>21
初心者向けだよ
0023nobodyさん2008/03/15(土) 04:31:17ID:???
初心者向けだが、素人向けではない。
0024nobodyさん2008/03/15(土) 18:59:02ID:???
どうもお世話になってます。

SmartyはApacheで確認できないんですね
0025nobodyさん2008/03/15(土) 19:03:04ID:???
動きました。 ありがとうございます
0026nobodyさん2008/03/18(火) 12:21:04ID:YNr5gB9L
html_select_dateを使用してデフォルト値を決めた場合、javascriptを使って、変更後の値をデフォルト値に戻すことは可能でしょうか?
例えば開始と終了日付がありリセットボタンが押された際にjavascrptが、動いて片方だけデフォルト値に戻る等
0027nobodyさん2008/04/06(日) 21:01:07ID:???
これってけっこうひどいねw
作ったやつらってあまり賢くないよなw
0028nobodyさん2008/04/07(月) 16:47:08ID:???
>>27
誰がどう見ても、おまえよりは数倍賢いと思うぞw
0029nobodyさん2008/04/11(金) 13:33:17ID: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"];
0030nobodyさん2008/04/14(月) 01:03:25ID:iLkauD+A
assign_by_ref('test', 1)
みたいな事やるとなにがしかのエラーが出たと記憶していたのですが、
今試してみたらエラーが出ません。
どこかのバージョンから変更になったのでしょうか?
それとも元からが勘違いだったのでしょうか?
0031nobodyさん2008/04/14(月) 05:42:53ID:/O4ED1WG
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
DQN男の家族消えろ DQN男の親消えろ DQN男の友達消えろ DQN男の親戚消えろ
0032nobodyさん2008/04/18(金) 06:04:17ID:uLMECrIl
escapeを何度も通過して実体参照を実体参照にしてしまう問題を解決したいです。

<textarea name="hoge">{$hoge|escape}</textarea>
というテンプレートで入力フォームを作りました。

入力フォームに値を入れて画面遷移するとデータベースに入力内容を入れて完了画面がでます。
同じ入力フォームでデータの更新をするページを作ると問題が発生しました。

タグ文字列は通過させながらもHTMLが壊されないようにしないといけないのですが、いい方法ないでしょうか。
0033nobodyさん2008/04/18(金) 06:41:29ID:???
入力フォームやらデータの更新とやらの話は関係なくね?
0034nobodyさん2008/04/18(金) 07:33:12ID:???
入力文字列をphp側で受け取ったときにunescapeすればいいのでは?
0035nobodyさん2008/04/18(金) 08:13:30ID:Kck9JNI8
ページの出力時に任意のヘッダを挿入したいとき、
どのようにすればよいでしょうか。

display()する前に、phpのheader()を書くことで、
追加できてはいるのですがコードの流れ的に不自然というか・・
あと、例えばContent-lengthヘッダを追加したいとかなると、
ますますテンプレートと行き来することになり、ますます変な気がします。
Smartyでヘッダ追加の関数はあるんでしょうか。
0036nobodyさん2008/04/19(土) 23:32:19ID:???
Smartyつかうとすげー楽になるっていう実例おしえてくだしあ!!
0037nobodyさん2008/04/19(土) 23:35:20ID:???
マニュアル見れば書いてあるよ
0038nobodyさん2008/04/20(日) 00:29:00ID:ui/WcxXd
>>36
キャッシュとかカスタムプラグインとかいろいろ
0039nobodyさん2008/04/20(日) 00:33:38ID:???
しかしキャッシュONにするとテンプレート変更しても反映されないのは何とかならないものか
0040nobodyさん2008/04/20(日) 04:24:32ID:???
それマジでダルいよな。
変更判定をしっかりやって欲しい
0041nobodyさん2008/04/22(火) 19:44:38ID:???
>>36
複数のサーバで同じシステム使っているのだが
phpファイルの変更にはツール使って一発で全サーバ更新できるので便利。
デザインやリンク先の違いも全部吸収できる。

まあテンプレートエンジンならなんでもいいんだけど
速度よりメンテ性重視にするとSmartyになった。
0042nobodyさん2008/04/22(火) 21:38:51ID:???
>>41
何それどういうツール?
0043nobodyさん2008/04/23(水) 00:52:29ID:???
思うんだけど、Smarty使って{}のコードをhtmlに埋めるのと
PHPの<?php ?>でhtmlファイルをPHP化して埋めるのと、
あまり大差無いと思うんだが。

デザインとプログラムの分離としてしばらく勉強してきたけど、
Smarty専用のコードを覚える=プログラムを覚えることと同義な気がする。
0044nobodyさん2008/04/23(水) 01:22:37ID:???
Smatyの機能は{$var}で変数が表示できることだけですよね。わかります。
0045nobodyさん2008/04/23(水) 04:20:00ID:???
でも、デザイナがなんとなく書いたPHPコード付きhtmlなんて怖くて使えないだろ?w


誰かSmartyリファクタリングしてくんねーかなぁ、
default_modifiersバグや、キャッシュの反映チェックがぬるい等
便利機能がいまいち使いこなせないのが辛い。
0046nobodyさん2008/04/23(水) 11:20:20ID:???
>でも、デザイナがなんとなく書いたPHPコード付きhtmlなんて怖くて使えないだろ?w

それもあるんだよなw
一度デザイナーからhtmlを受け取ってシステム化した後、
修正が入る場合、画像作成とか以外では、PG側がしなきゃいけないもんな。

でも、それもデザイナーがSmartyのソースいじる可能性もあるし、
やっぱり同じ事のような気がする。だから厳密なデザインとプログラムの分離
とは行かないんだよな。
0047nobodyさん2008/04/23(水) 15:25:42ID:pSFXKy0F
>>42
ボタン1つで複数のサーバにsshアップロードする機能があるFSW。というか自作だけど。

以前はテンプレートエンジンなしでこのツール作ってたが1サイトだけマーキー入れてほしいとかいう要望に対しては
手作業で対応するしかなかった。
もちろんサイト間の差分なんか把握できるわけない・・・

>>46
>>44みたいな使い方もできるし、デザイナにもっと権限を与えることもできる、でいいんじゃないかなあ。
0048nobodyさん2008/04/23(水) 16:01:50ID:???
ロジックの分離というより、権限管理的な意味合いが濃いんじゃないかな。

故意にPHPコードを書かない限りは、Smarty内で簡潔するので、安全っちゃ安全。
0049nobodyさん2008/04/23(水) 19:51:43ID:rNbxu3m+
質問です。
yum install php-Smarty
がインストールできないのですが、なんで?
その前にインスコしておくものはありますか?
CENT OSなんですが....

0050nobodyさん2008/04/23(水) 20:00:10ID:???
そんなんで知るかボケ
005149です。2008/04/23(水) 21:36:12ID:rNbxu3m+
どこで質問すればいいの?
0052nobodyさん2008/04/23(水) 23:04:45ID:???
osスレ
0053nobodyさん2008/04/24(木) 15:44:39ID:???
中身はただのphpファイルなんだからtgzファイル落として解凍するだけでいいんじゃね?
こういうのってパッケージ管理使う意味あるのかな。
0054nobodyさん2008/04/24(木) 15:50:43ID:???
0055nobodyさん2008/04/24(木) 21:52:29ID:???
pearifiedをpearのチャンネルに追加してそっからSmartyをとってくると楽。
0056nobodyさん2008/04/26(土) 23:54:58ID:???
ちょっと使ってみた。
sqlserverでカラム名が和名。
select 住所1 from 得意先マスタ
その和名のまま連想配列にしてテンプレートに渡すとエラーになる。
select 住所1 as zyuusyo1 from 得意先マスタ
これで渡すとzyuusyo1でちゃんと取得できる。

まあ、和名テーブルやらカラムを作るなって話だが、今あるからしかたない。
まだまだ、和名には弱いのかなぁ?実はパッチがあったりしますか?

あと、テンプレート側で、都道府県名と言う文字列を含めるとエラーになる。
県名にかえたらエラーでず。
んーーーー。不便。
0057nobodyさん2008/04/27(日) 00:37:38ID:???
住所1て
0058nobodyさん2008/04/27(日) 08:48:29ID:???
文句を垂れる前に、日本語文字コードについて学べ。
0059nobodyさん2008/04/27(日) 12:24:18ID:???
ところで、皆Smartyの拡張クラスの名前何にしてる?
MySmartyだと、何かダサイ気がしてならない
0060nobodyさん2008/04/27(日) 14:53:43ID:???
EternalForceSmarty

相手は死ぬ
0061nobodyさん2008/04/28(月) 10:19:07ID:???
>>59
変な名前付けてあとでわからなくなるより
MySmarty

かっこいいのがいいなら
SuperSmarty
0062nobodyさん2008/04/28(月) 11:48:26ID:???
MySmartyだと用途がはっきりしないので、

SmartyMobile
SmartyWeb
SmartySitename
SmartyView

的な命名の方がよくね?
0063nobodyさん2008/04/28(月) 12:11:28ID:???
あれ? 今回なんて名前にしたっけ?
って考えるのが面倒くさいから、いつもMySmarty
0064nobodyさん2008/04/28(月) 18:00:24ID:???
俺はいつもYouSmarty
0065nobodyさん2008/04/28(月) 18:33:55ID:???
PHPだからできる $smarty
0066ムームー2008/05/02(金) 02:13:12ID:xWzxYhLM
$template_dir に関するマニュアルに、
「このディレクトリをwebサーバのドキュメントルート下に置く事を推奨しません。」
と書いてあるんだけど、根拠がわかる人いる?
0067nobodyさん2008/05/02(金) 02:14:59ID:???
逆になぜ置く必要があるのか
0068nobodyさん2008/05/02(金) 02:26:22ID:???
httpdの設定ミスってテンプレートだだ漏れ
おまけに内部のデータ構造も推測できちゃう作りでしたとかやる奴がいるからだろう
0069ムームー2008/05/02(金) 03:55:53ID:xWzxYhLM
>>64
> 逆になぜ置く必要があるのか
テンプレートを別ディレクトリに配置すると、保守性が悪いから。

>>68
> httpdの設定ミスってテンプレートだだ漏れ
> おまけに内部のデータ構造も推測できちゃう作りでした
テンプレートが見られても、あんまり危険性がないと思うんだけどな。
escape し忘れて XSS される、ぐらいかな。
でも、そんなのはテンプレート見るまでもなく、
実際に入力してみれば escape していないことはすぐ分かるしさ。
0070nobodyさん2008/05/02(金) 08:18:26ID:???
逆に考えるんだ,公開する必要があるディレクトリをドキュメントルート以下に置くと考えるんだ

もしくはせめてaccessでも使え
0071nobodyさん2008/05/02(金) 12:35:17ID:???
>>69

テンプレの構造を解析されて、直接変数へバッファオーバーフローを起こす様な汚染データを打ち込まれる
0072nobodyさん2008/05/02(金) 13:35:15ID:???
つーかさ、そこまで承知の上ならドキュメントルート以下に置けばいいと思うよ
推奨であってドキュメントルート下だと動作しない訳じゃないんだし

俺はレンタルサーバとかでドキュメントルートにしか置けない場合を除いて別ディレクトリに置くけどな
0073nobodyさん2008/05/02(金) 14:11:27ID:???
俺はローカル側で管理しづらいという理由でドキュメントルート下に置いて.htaccessで全Deny
0074nobodyさん2008/05/02(金) 14:25:29ID:???
そしてAllow Overwrite Off
0075nobodyさん2008/05/02(金) 14:31:06ID:???
テンプレートをドキュメントルート下に置かないと保守性が悪いとか
ローカルで管理しづらいって、さっぱりわからんなあ
例えばドキュメントルートの一つ上の階層にテンプレートを置くとして
そこを基点に管理するだけの話だと思うんだが
0076nobodyさん2008/05/02(金) 17:21:49ID:???
ぶっちゃけフォルダ移動まんどくせ
0077nobodyさん2008/05/02(金) 18:53:27ID:???
ドキュメントルート外に置くと、相対的に読み込んでいる画像とかCSSとの、パスが切れるって事だろ?
HTMLコーディングしてる最中にプレビュー出来ないってのが面倒だって事だろ?
0078nobodyさん2008/05/02(金) 19:40:12ID:???
>>77
は?お前は何を言ってるんだ
0079nobodyさん2008/05/03(土) 19:44:56ID:???
>>78
templates/index.html
htdocs/image.jpg

というファイル構成だと、
ローカルファイル上で画像チェックをする術が無いって事だよ。
これは、コーダー観点で見ると致命的に面倒。

htdocs以下をテンプレートディレクトリにする事で解消されるから、利便上htdocsに置く人達がいるわけだ。

templatesディレクトリに画像とか置いちゃう方法でもいいんだけど。
0080nobodyさん2008/05/03(土) 20:00:42ID:???
ローカル上のシステムにアクセスして確認すればいいじゃん
0081nobodyさん2008/05/03(土) 21:44:08ID:K4MBJC9r
templates_cの方がやばいだろ。
0082jtb2008/05/03(土) 21:57:29ID:???
自宅鯖を、レンタル鯖にするところまではできるんですが、ユーザーと、ftpパスワードの保存先ディレクトリどこにしようか迷ってるのですが、普通はどこに保存してますか?
0083nobodyさん2008/05/03(土) 22:08:53ID:???
public_html/secure/ftppass.txt
0084nobodyさん2008/05/03(土) 23:29:36ID:???
>>80
ローカル上のシステムって意味がわからんが。

ローカル鯖でも立てない限り、確認は無理。
コーダーに鯖立て強要(例えXAMPPでも)も厳しい。

OK?
0085nobodyさん2008/05/03(土) 23:33:32ID:???
開発中はbaseパス設定するなり置換するなり好きなようにすればいいじゃん
0086nobodyさん2008/05/03(土) 23:36:53ID:???
開発中はtemplateをhtdocs以下に置いてもいいじゃん
0087nobodyさん2008/05/04(日) 00:40:42ID:???
ローカルにサーバー立てられないやつは
この業界から消えていいよ。
0088nobodyさん2008/05/04(日) 01:46:37ID:???
XAMPPのサーバも立てられないコーダなんて糞過ぎ。まぁ、だからコーダなんだろうけど。いやしかし。

まぁ、俺なら*.tpl(*.htmlを含んでもいい)をtemplateディレクトリに、残りをhtdocsに置くスクリプトを用意するけどね。
0089nobodyさん2008/05/04(日) 02:21:16ID:???
XAMPPは地雷だろ・・・
0090nobodyさん2008/05/05(月) 19:52:01ID:???
ローカル環境作ってない奴ってバージョン管理やデプロイ手作業でやってる訳かな?
高校生バイトじゃあるまいし
0091nobodyさん2008/05/06(火) 12:34:25ID:???
デプロイを手作業でやらないって
何を使ってるの?
0092nobodyさん2008/05/06(火) 15:53:08ID:???
テスト環境ならsvn管理下に置いてsvn updateだけど
本番環境は手作業だなあ
0093nobodyさん2008/05/06(火) 22:40:24ID:???
分散ものに関わるとシェルなりでスクリプト走らすけど、ねえ
0094nobodyさん2008/05/07(水) 14:15:57ID:???
>>93
それもやるけど、しかしコンソールに生のHTML、しかもオーサリングソフトで作ったような多重テーブルとスクリプトが含まれる
テキストはもはや人間の読むものではない。
0095nobodyさん2008/05/09(金) 04:28:25ID:???
デプロイって標準的なやり方ってないのかな。
0096nobodyさん2008/05/09(金) 06:33:29ID:???
>>95
つFFFTP
0097nobodyさん2008/05/09(金) 12:07:52ID:???
>>59
自分はいつも
SetupSmarty
ってつけてる。
0098モモ子2008/05/09(金) 13:33:34ID:6V2WpTSb
テンプレートでいつも {$var|escape} みたいに escape つけるの
面倒だよねー?何かいい方法はないかなー?
0099nobodyさん2008/05/09(金) 14:51:49ID:???
? ? ?
0100nobodyさん2008/05/09(金) 16:58:56ID:???
>>98
・escape済の変数をassignする
・もしくはdefault_modifiersにescapeをいれとく

お好きなほうでどうぞ。
後者は特定の条件で不具合が発生するので、自力で修正する自信ないならお勧めしない。
0101nobodyさん2008/05/10(土) 08:34:44ID:???
なんで肝心な不具合とかが修正されないんだろ。
日本とは感覚が違ってて必要とされてないのかな。
0102nobodyさん2008/05/10(土) 09:46:22ID:???
Smarty3でも出ない限りは、このままなんじゃね?
0103nobodyさん2008/05/15(木) 19:11:15ID:ss9CEhce
JSmartyでもry
0104nobodyさん2008/05/19(月) 00:22:26ID:???
Smartyの残骸に悩むPHP土方の皆さんごきげんようw
0105nobodyさん2008/05/21(水) 08:04:10ID:???
普通に、外部モジュール化したHTMLテンプレートを読み込んで、
正規表現で独自タグを変数に置換して出力。
っていう古式ゆかしきCGI技じゃいかんの?
Smartyの3〜4倍は速いぞ。
0106nobodyさん2008/05/21(水) 08:06:14ID:???
まだこういう馬鹿いるのかw
0107nobodyさん2008/05/21(水) 08:12:24ID:???
なんでバカなんだ?
ちゃんとロジックとデザイン分離できてるじゃん。

そもそもPerlとか他の言語のテンプレートエンジン全般に言えるけど、
こういうシンプルな目的だったのに、
万人の要望に応えるうちに無駄に富豪化して、
ムーアの法則頼りで突っ走ってるのが、今のテンプレートエンジンだろ。
0108nobodyさん2008/05/21(水) 09:50:33ID:???
テンプレートエンジンを使いこなせてない人の発言だなぁ・・・。

デザインとロジックの分離レベルにもよるけど、
ビューで処理すべきロジックもあるって事だ。


if
foreach
include
|escape

あたりは最低限必須だろ。
0109nobodyさん2008/05/21(水) 10:14:55ID:???
>107がそう思ってるならその自分のやり方を貫けばいい
>108がそう思ってるならその自分のやり方を貫けばいい

自分の考えを押し付けるのが一番うざい。
0110nobodyさん2008/05/21(水) 12:49:26ID:???
そう、自分がやりやすい方式で作ればよろしい
もっとも>>108の挙げてる機能くらいは無いと確かに困るというか
ロジック側でHTMLを吐く必要性が出てくるので嫌
0111nobodyさん2008/05/21(水) 12:49:45ID:???
そういう問題ではない。

実装の統一化は今後の開発効率を左右する重要な課題。
ただ、Smartyに何かが足りないのは確か。
結局どこかで独自に使い方を工夫しないといけない場合が出る。

特にescape。
0112nobodyさん2008/05/21(水) 13:06:06ID:???
おまいは全世界を統一したい野望でもあるのか?
統一すれば効率はいいだろうが、そんなツマラン世界は御免こうむる
0113nobodyさん2008/05/21(水) 13:44:07ID:???
>>109
おまいは、現場でコーディング規約とかに文句言うタイプだろ。
0114nobodyさん2008/05/22(木) 01:18:43ID:???
文句言うべきときは言うべきだと思う

//使うなって言われる噴飯モノの現場もあるしな
しかも理由が「/**/と入れ子にできちゃうから」という意味不明具合
0115nobodyさん2008/05/22(木) 01:48:09ID:???
>>112
趣味と仕事を兼ねるからツマランのじゃね?
仕事と割り切って出世する事を考えていこうよ。
0116nobodyさん2008/05/22(木) 02:33:05ID:???
出世考えるならプログラマー辞めて「プログラムも判る企画/営業」に異動促す努力したほうがええで
いくらコード練っても、中/印/ベトナム経由の「安いだけの人材」がケツ噛み続ける時代
会社としてのポストがなくなる

「MFC超得意だからMSなくなるまでは困らん」と言ってた先輩が潰れて実家の本屋継いだぜ
「PHP? 新し物好きは迷惑だね。perlで一生食っていけるよ」と豪語してた
馬鹿女は、アルコールで精神病院を経て休職後、そのまま元彼と寿退社してリタイアだ。
一番頼れる仲間は某MTAのドキュメントにも名前を連ねる我が社の誇りだった人
今はビル屋上緑化を主とする企業のヒラ営業に転職しちまったぜ。

毎日PHPに限らずコード書かされてて思うが、
なんかそういうドロップアウトした筈の彼らがみんな幸せそうに見えるんだ
なんでなんだろう

なんの話だっけ
0117nobodyさん2008/05/22(木) 12:54:15ID:???
オレは給料泥棒 まで読んだ
0118nobodyさん2008/06/01(日) 12:02:10ID:hyBgIur5
Smartyはプロの世界でもよく使われるんですか?
0119nobodyさん2008/06/01(日) 17:37:18ID:???
SmartyのないPHPなんてレモンのないコーヒーですよ。
0120nobodyさん2008/06/01(日) 18:54:42ID:???
なぬ?
0121nobodyさん2008/06/02(月) 03:03:23ID:???
Smartyを始めたら背が5cm伸びて、彼女が出来ました。
0122nobodyさん2008/06/02(月) 03:08:23ID:???
OpenPNEが一日も早くSmarty外ししてくれることを願うよ。つうか俺がコミットすりゃいいのかな。
0123nobodyさん2008/06/02(月) 04:38:00ID:???
>>122
そんなことしたら背が縮んで、彼女が離れていくじゃないか。
0124nobodyさん2008/06/02(月) 05:30:17ID:???
嫁と分かれたいケースに最適ですかね
0125nobodyさん2008/06/02(月) 05:53:12ID:???
>>124
リンクしてコンパイル済みなら分離できません
0126nobodyさん2008/06/02(月) 06:36:26ID:???
ライブラリと生活モデル、および資産の依存性を分離して
再コンパイルするしかない訳ですね。
わかります。
0127nobodyさん2008/06/02(月) 18:15:50ID:???
再婚パイルをお考えですか。
0128nobodyさん2008/06/03(火) 04:20:49ID:???
GirlFriend Pluginがファイル破損しちゃいました。
どこで再配布してますか?
0129nobodyさん2008/06/03(火) 08:16:30ID:???
新しいPluginは古いものと互換性がないので、
関連ファイルは全部削除しないとダメだよ
0130nobodyさん2008/06/03(火) 14:28:35ID:???
まさかこのスレでふっきれるとはおもわなんだ。
貴様らありがとう。
0131nobodyさん2008/06/04(水) 22:39:07ID:???
ウチ、すごいぞw
俺が来るまで何年もプログラミング初心者が入ってきては辞めての繰り返しだったみたいで、
機能つけたしが全てSmarty設置で実現されてるwww
サイトのいたるところにvarだのbinだのがあるwwww
勘弁してくれwwww
0132nobodyさん2008/06/04(水) 22:53:01ID:???
日本語でおk
0133nobodyさん2008/06/05(木) 12:25:23ID:???
業務でSmartyを使っているのか...
0134nobodyさん2008/06/05(木) 13:57:52ID:???
>>134
そりゃ背が伸びて彼女ができるなら使うだろう。
0135nobodyさん2008/06/05(木) 14:50:40ID:???
業務だからこそ使うんじゃないの?
逆に趣味とかじゃ使いたくない。
0136nobodyさん2008/06/05(木) 21:38:50ID:???
趣味でPHPはないわ。
俺は半年ほど休んでた時期に趣味で遊んだのはSchemeだけだった。
実務(共同作業)がSchemeでも進められるなら、迷わずこれを選ぶ。
しかし近年の現実はどいつもこいつもPerlすら宇宙語だからな。PHP一択にならざるをえない。
0137nobodyさん2008/06/06(金) 13:01:48ID:???
PHP + Smarty を使って、お客専用のCMSモドキより、
MovableType4.1 + αカスタマイズのCMSモドキの方が、お客には受けが良かった上に見積もりも良かった!

業務でSmartyを使うなら、隠れて使いたい
0138nobodyさん2008/06/06(金) 21:00:18ID:???
そりゃデザインのおかげじゃねーの
0139nobodyさん2008/06/06(金) 22:14:37ID:???
見た目以外に判断材料があるやつなんて、最低でもPHPを書けるレベル以上のやつに限られる。
0140nobodyさん2008/06/06(金) 23:39:38ID:???
>>139
いや、判断材料としては操作感も重要だけど、使う側と作る側のロジックが違うから
どう考えても不条理な操作が要求されたりするんだよなあ。

もちろん使う人のために作るんだからお客様優先なわけだが、
将来コケるのが目に見えてるから困る。

0141nobodyさん2008/06/06(金) 23:48:35ID:astBuURj
現在のバージョンは、
・セールスレターテンプレート集(68通)
・売れるセールスレターの書き方
・ダイレクトメールワークシート
・穴埋め式Eメールテンプレート(14通)
・究極のセールスレターツールBOX
など、合計で500ページ近いパッケージとCDROMが
セットになっています。


ただ、この無料お試しはだいぶコストがかかるらしいので
500個の限定だそうです。



興味があればこちらをクリックしてください。
http://www.123marketing.jp/yanik/indextrial.php?jvcd=16797

0142nobodyさん2008/06/06(金) 23:49:48ID:???
>>140
それはあなたが低スキルだからでしょうね。コケて逃亡するのはあなたではないでしょうか。
0143nobodyさん2008/07/10(木) 05:42:24ID:NxX5vAdg
Smartyで、テンプレート内で送られてきた変数の簡単な計算できませんか?

{$value + 3}など。
試してみたのですが、{$value}の値がそのまま出力されます
0144nobodyさん2008/07/10(木) 09:09:32ID:???
つマニュアル
0145nobodyさん2008/07/10(木) 21:23:41ID:???
折角公式に日本語のマニュアルがあるというのに全く。
0146nobodyさん2008/07/21(月) 01:40:20ID: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" );
?>

これは仕様なの?
01471462008/07/21(月) 01:41:40ID:8uak49aQ
MySmarty.class.phpで半角空白がなくなっていますが、
2chにコピペするときの変換ミスで、実際は正常に動いています。
0148nobodyさん2008/07/21(月) 01:47:07ID:???
仕様
01491462008/07/21(月) 01:52:13ID:???
>>148
ええ!? マジすか……。
それじゃ、ディレクトリが多数ある場合は、
全てのディレクトリにMySmarty.class.phpが必要ってこと?
プラグイン自作してどうにかなる話じゃないですよ?w
0150nobodyさん2008/07/21(月) 02:24:44ID:???
お前は何を言ってるんだ
0151nobodyさん2008/07/21(月) 03:18:45ID:???
>>150
いや、文字通り、Smarty.class.phpを継承した設定済みのMySmarty.class.phpを
直下以外のディレクトリに置くとtemplatesディレクトリの認識がしなくなるのが仕様だったら、
多数のディレクトリ分けしてると超大変だよね、って言ってるんだけど。

>>146が仕様で間違いないのなら、俺は何か間違ったこと言っているか?
0152nobodyさん2008/07/21(月) 09:54:38ID:???
さて問題です。

dir.phpからみて
$this->template_dir="./data/templates";
$this->compile_dir="./data/templates_c";
このディレクトリはどこでしょう?
0153nobodyさん2008/07/21(月) 12:55:50ID:???
>>152
dir.phpは、MySmarty.class.phpを呼び出しているだけで、
dataディレクトリは、MySmarty.class.phpから見た相対パスだから、
dir.phpから見たdataディレクトリの場所は、関係ないと思うけど。

そもそも、なぜか絶対パスを受け付けてくれんのよね。エラーになる。
0154nobodyさん2008/07/22(火) 08:41:57ID:???
>そもそも、なぜか絶対パスを受け付けてくれんのよね。

こっちのほうが深刻というか根幹な問題をかかえてる気がするのだが・・・
0155nobodyさん2008/07/24(木) 14:01:26ID:???
PHPは実行されてるファイルの位置がカレントディレクトリになるから……
0156nobodyさん2008/07/24(木) 21:30:17ID:???
$template_dir
これは、デフォルトのテンプレートディレクトリの名前です。 ファイルのインクルード時にリソースの種類を指定しなかった場合は、
このディレクトリから探します。デフォルトは ./templates で、 これは、実行しているスクリプトと
同じ場所にある templates/ ディレクトリを探すということです。

という文章からすると「実行しているスクリプト」が基準になるということみたいだな。
0157nobodyさん2008/08/01(金) 21:13:05ID:???
Smarty廃れましたなぁ。
そんなことより、PHPもJSPのように
カスタムタグが使えたらいいのにね。
0158nobodyさん2008/08/02(土) 02:29:09ID:???
廃れてないけど
0159nobodyさん2008/08/02(土) 19:51:20ID:???
スレ立て半年でこの程度の伸びだったら、十分廃れてるだろw
ぶっちゃけ、必要な機能だけ絞り込んで自分で作った方がいい。
0160nobodyさん2008/08/02(土) 19:56:13ID:???
いいというのはどういう点で?
0161nobodyさん2008/08/03(日) 10:51:13ID:4+uLL3BX
でも、テンプレートって言えば、もうSmartyでしょ。
0162nobodyさん2008/08/03(日) 11:32:25ID:???
テンプレート機能だけ使いたいならSmartyを使うか、生phpで済ませる
各種FW使うなら同梱されてるテンプレートエンジンを使う
0163nobodyさん2008/08/04(月) 11:49:55ID:???
「index.php#xxx」

smartyで↑の「xxx」を取得する方法ってありますか?
0164nobodyさん2008/08/04(月) 22:09:03ID:???
>>163
例で示されたxxxの部分は通常サーバ側には送信されることはない。
なのでサーバサイドで動いているsmartyから取得することは不可能。
0165nobodyさん2008/08/05(火) 16:01:03ID:???
>>164
ぎょぎょ!
確かにその通りでした。
0166nobodyさん2008/08/06(水) 21:40:18ID:???
仮に送信されるにしても、smartyじゃなくPHPから取ると思うんだけどなあ。
0167nobodyさん2008/08/07(木) 20:08:18ID:???
テンプレ内で{}使う方法ド忘れした誰かHELP
0168nobodyさん2008/08/07(木) 20:16:02ID:???
http://www.smarty.net/manual/ja/language.function.ldelim.php
0169nobodyさん2008/09/04(木) 10:40:28ID:???
{include}
で出力された結果が複数行にわたる場合、全ての行に対してインデントさせるにはどうすればいいですか?
{"\t"}{include}
とかしても先頭の行だけしかインデントされなくて
0170nobodyさん2008/09/04(木) 11:33:28ID:???
全部divで囲んでCSSで
01711692008/09/04(木) 12:15:47ID:???
ああ、すみません、出力されたソースでの話です・・・
0172nobodyさん2008/09/04(木) 12:25:57ID:???
変数に格納してindentかけるとか?
01731692008/09/04(木) 21:08:05ID:???
すみません、変数の宣言はphpファイル側でするものですか?もしそうなら、
配布されているウェブアプリがsmartyを使っているのですが
配布ファイルのバージョンアップの際に面倒なことにならないかな・・・と
というかphpはわからなくて
smartyも触るのは初めてでマニュアルを見ながら触っているのですが・・・

インデントするのも難しいですね
レスしてくれた方々、ありがとうございますm(_ _)m
0174nobodyさん2008/09/04(木) 21:11:12ID:???
Smartyの前にやるべきことが・・・
0175nobodyさん2008/09/04(木) 21:31:16ID:???
デザイナにはロジックを触らせないコンセプトのSmarty
01761692008/09/05(金) 00:54:49ID:???
すみません、includeのassignでできました
レスしてくれた方々、ありがとうございますm(_ _)m
0177nobodyさん2008/09/24(水) 00:32:25ID:KMdxurbq
JSPのカスタムタグがPHPにもあればいいのにな。
タグとクラスが一対一になってるのが素晴らしい。
0178nobodyさん2008/09/25(木) 00:09:46ID:lXgzxRnB
すみません、教えてください。

<p>名前:{$name}</p>

テンプレートに上記のような記述をしたのですが、
「名前:」の部分が化けてしまいます。
テンプレートファイルはEUCで保存してあります。
原因としてはどのような事が考えられますか?
0179nobodyさん2008/09/25(木) 01:02:44ID:???
>>178
テンプレートをコンパイルしたあとのPHPファイルを見てみれば?
01801782008/09/25(木) 02:06:16ID:???
>>179
見ましたが、既に化けてます・・・
SmartyがEUC以外の文字コードで
テンプレートを処理しているということでしょうか?
0181nobodyさん2008/09/25(木) 02:17:37ID:???
phpの文字コードがあってないんじゃない?
01821782008/09/25(木) 02:47:42ID:???
>>181
あ、Smarty.class.phpがカスタマイズされていました。
SJIS→EUC→SJISみたいな変換してる。
お騒がせしました。すみません。
既存のものとは別にSmartyを入れます。
0183nobodyさん2008/09/26(金) 16:36:37ID:NKaAViJV
template_cの中身を全部削除しても、template_cの中身を見に行こうとして、
そんなファイルないよっていうエラーが出るんですが、なぜでしょうか?
ためしに、force_compileをtrueにしてみましたが、やっぱり見に行ってしまうようです。
01841832008/09/26(金) 17:02:20ID:NKaAViJV
ちなみに、全く同じものを1つ下の階層にコピーすると動きました。
これはいったい・・・。
0185nobodyさん2008/09/26(金) 17:16:56ID:???
パスがおかしい
0186nobodyさん2008/09/26(金) 17:23:10ID:NKaAViJV
>>185
すいません、重要な点を忘れていました。
その別ディレクトリでコンパイルされたテンプレートを、
動かない方のtemplate_cにコピーしてやると、動くのです。
なのでパスが違ってはいないです。
全く謎・・・
0187nobodyさん2008/09/26(金) 17:49:10ID:???
そんな断片的な情報では何も判断できないけど謎だね
0188nobodyさん2008/09/26(金) 23:07:17ID:???
smartyってsjisだとエラー起きませんでしたっけ?
さっきひさぶりにやってみたらsjisでも問題なく動いた(?_?)
0189nobodyさん2008/09/27(土) 01:11:46ID:???
>>188
自己解決しました
0190nobodyさん2008/09/30(火) 23:16:57ID:???
>>189
自己解決の詳細を報告しる!
0191nobodyさん2008/10/01(水) 16:25:04ID:???
>>190
気合で解決!
0192nobodyさん2008/10/02(木) 16:19:26ID:???
preFilterでテンプレートの文字コードを内部文字コードに合わせる。
postFilterで元に戻す。

これは基本だろう。
0193nobodyさん2008/10/03(金) 12:27:37ID:???
みんななんでSmartyなんて使ってるんだ。意味がわからん。
0194nobodyさん2008/10/03(金) 19:01:42ID:???
名前:<?php echo $name ?>
よりも
名前:{$name}
のほうが書きやすくて可読性も高いから。
0195nobodyさん2008/10/03(金) 19:14:40ID:???
それだけじゃなかんべw それだけしか使ってないならもったいないw
0196nobodyさん2008/10/03(金) 19:36:59ID:???
<?=$name?>
0197nobodyさん2008/10/03(金) 20:29:13ID:???
short_tagwwww
0198nobodyさん2008/10/04(土) 01:57:42ID:???
Smarty(というかテンプレートエンジン)の便利さを解らない奴は、
素人or中級者未満だと自覚した方が良いよ。
0199nobodyさん2008/10/04(土) 13:26:02ID:???
>>198
PHPそれ自体がテンプレートじゃん
わざわざSmartyを使う意味がわからん
0200nobodyさん2008/10/05(日) 01:31:28ID:???
>>199
意味がわからんというのは、君のやってる事のレベルが低いからだと思うよ。

PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。
PHPはテンプレートっぽく使えるだけで、実務的にテンプレート管理を行おうとしたらかなりの量のコーディングが必要になってくる。
結局はテンプレートエンジンを作る必要はあるんだよ。
0201nobodyさん2008/10/05(日) 01:40:36ID:???
・PHP
<?php echo strlen($var) ? preg_replace("/[\r\n]/", "<br />", htmlspecialchars($var)) : "hoge";?>

・Smarty
{$var|escape|nl2br|default:"hoge"}
0202nobodyさん2008/10/05(日) 06:55:52ID:???
なぜphpのほうでnl2br使わんの
0203nobodyさん2008/10/05(日) 11:15:11ID:???
modelとviewを分けたいからじゃないの
0204nobodyさん2008/10/05(日) 18:38:44ID:???
>>203
どういうこと?
0205nobodyさん2008/10/06(月) 03:08:54ID:???
PHP単体で使う人は、 >>201なりPHPで書いたコードを想定してみれば良い。

「そんなコードを書く状況は100%ねぇよw」って言うなら、Smarty使う意味無いけど。
0206nobodyさん2008/10/06(月) 08:52:51ID:???
>>202
>なぜphpのほうでnl2br使わんの
知らなかっただけだろ。
あと preg_replace("/[¥r¥n]/", "<br />") だと "¥r¥n" があったときに <br /><br /> になっちゃうから
ここは preg_replace("/¥r?¥n/", "<br />") だよな。旧Macは無視したとして。

nl2br知らないわ、正規表現間違うわじゃ、底がしれる
0207nobodyさん2008/10/06(月) 08:55:31ID:???
>>200
>PHP単体でキャッシュ処理や、ループ処理、エスケープ処理、携帯、PC両対応を想定したテンプレートを書いてごらん。

キャッシュは専用ライブラリを使う
ループ処理はPHPのforeachやwhileをそのまま使う
エスケープ処理はhtmlspecialchars()を使うか、短い名前で定義する
携帯、PC両対応はSmartyに備わってる機能ではない


0208nobodyさん2008/10/06(月) 14:44:20ID:???
>>207
全部Smartyで出来るじゃんw
使わない理由と、他のライブラリを使う理由を述べよ。
0209nobodyさん2008/10/06(月) 14:59:38ID:???
>>204
改行が必ずしも<br />とは限らないからだろ。
ViewがHTMLとは限らない。
0210nobodyさん2008/10/06(月) 15:10:02ID:???
>>209
上段はHTML以外も想定してるけど
下段はHTMLのみ想定しているってこと?
0211nobodyさん2008/10/06(月) 17:03:58ID:???
>>210
Smartyのnl2brは拡張&動作の置換が可能。
02121962008/10/06(月) 19:40:07ID:???
全部関数書けばいいじゃん

<?=h(e(n($name)))?>
0213nobodyさん2008/10/06(月) 20:27:56ID:???
グローバル関数っすかwww

そんなの結局は劣化車輪の再発明でしかないし、Smartyを使わない理由を述べよ。
0214nobodyさん2008/10/07(火) 12:25:11ID:???
> 車輪の再発明...
実用レベルでは、してはいけない「車輪の再発明」だが、
言語の学習段階ではレベルアップのために、あえて「車輪の再発明」は必要...

論点ずれた。スマゾ
0215nobodyさん2008/10/07(火) 14:30:17ID:???
そんな段階では「発明」でも何でもないし、する必要も無い。
物理習うときにニュートン方程式の再発明から始めるのか?
0216nobodyさん2008/10/07(火) 15:03:12ID:???
物理では再発明というか、再発見をおのおのの学生がするものじゃないの?
ぶつりほうそくとは発見ではなく自然の理解であるからして。

同様に、対象を理解するために先人の真似をするのは無駄じゃない。
物理の授業でニュートンがやった実験やるのはべつに遊びってわけじゃない。
0217nobodyさん2008/10/07(火) 15:10:28ID:???
初心者の学習段階でよくやるアレは「車輪の再発明」の域にも達してないってことさ。
学習するためにやるものじゃない。
0218nobodyさん2008/10/07(火) 18:26:45ID:???
論点ズレすぎ。

車輪の再発明自体は否定も肯定もしないけど、
>>212 とか、再発明の域にすら達してないだろ。

単にSmartyを勉強するのが面倒だから、批判してるだけに見えてしまうんよ。
実際そうなんだろうけどw
0219nobodyさん2008/10/07(火) 21:01:42ID:???
patTemplate ってはやってるの?
0220nobodyさん2008/10/08(水) 08:35:32ID:???
>>208
>全部Smartyで出来るじゃんw
>使わない理由と、他のライブラリを使う理由を述べよ。

逆だよ。PHPでできるのに、なんでSmartyを使う必要があるのってこと。
0221nobodyさん2008/10/08(水) 08:44:32ID:???
>携帯、PC両対応はSmartyに備わってる機能ではない

だからなんなん?
テンプレートエンジンを利用すれば簡潔に記述できるのは事実だろ
0222nobodyさん2008/10/08(水) 14:08:02ID:???
>>220
PHPで関数集なり、テンプレートエンジンもどきを作るくらいなら
なんで既存の枯れはてたSmartyを使わないのって事。


まぁ >>212みたいなのを見ても尚、PHPで同じ事が出来る。
と感じているのであれば、何説明しても無駄だろうけどさ。
テンプレート関数毎回作って、毎回デザイナに説明して、毎回デバッグしてるんだろうねw
0223nobodyさん2008/10/08(水) 16:35:41ID:???
ああ、、、
だから毎回デスマーチになるのかw
0224nobodyさん2008/10/09(木) 09:57:36ID:???
smartyとかテンプレートエンジンのいいとこは
デザイナに渡すときも
あとはよろしくねーって言えること。
マニュアルもちゃんとしてるし。
0225nobodyさん2008/10/09(木) 11:10:47ID:???
うちの場合ページが先に出来上がってくるから、それを元にtplを作ってるな。
それでもPHPベタ書きよりはよほど楽だしあとで修正しやすい。

0226nobodyさん2008/10/09(木) 16:09:53ID:???
デザイナに include と 変数 の使い方覚えて貰うだけでかなり楽になるよね。
02271962008/10/09(木) 23:38:15ID:???
>>222
> PHPで同じ事が出来る。

逆だよ。Smartyが前提なのではない。
素のPHPに対してSmartyをわざわざ追加する必要が無い、ということ。

しかしほんと、化石みたいなスレだな。
Smarty信者はまだPHP4とか使ってるのかね。
0228nobodyさん2008/10/10(金) 00:21:33ID:???
smartyってもうはやってないの?
0229nobodyさん2008/10/10(金) 01:12:51ID:???
>>227
必死すぎwww
196のコードなんでPHP4とか以前にPGとしてウンコのレベルだろww

君が無知なのはわかったから
PHP単体じゃテンプレートエンジンとして機能しないのに、
「何故、Smartyは必要ないのか」を具体的に答えてくれよな?

もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。
初心者スレから出直してこい。


>>228
普通に使われているし、需要も多いよ。
先月にも解説新刊が出た。
02301962008/10/10(金) 09:49:15ID:???
>>229
答えは196に示してある通りなんだが。

俺もSmartyは仕事で3年くらい使ってたよ。

> 「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
> もしSmarty云々じゃなくてテンプレートエンジンがいらねーって事なら論外だ。

じゃあ俺はお前さんにとって論外らしいので、議論の余地は無いな。

SmartyじゃないとMVCが守れない開発者は現場では使えない。

もしお前さんがデザイナーなら、PHPの基礎くらい勉強しろと言いたくなるな。
うちのWebデザイナーはみんなPHP触れるよ。

> 初心者スレから出直してこい。

ここよりレベルの低いスレがあるのか。それは恐ろしいな。
0231nobodyさん2008/10/10(金) 10:34:43ID:???
>>225
それだとあとでデザイン修正があったときとかめんどくさくない?
もらったデザインを前のとdiffかけて
差分をtplに反映とか。

ただプログラマが一元的に管理してたほうが
セキュリティ的にはいいよね。
escape忘れただけで大変なことになることもあるし。
0232nobodyさん2008/10/10(金) 15:47:13ID:???
196やら212のコードを記述するぐらいなら俺はSmarty使うよ。
0233nobodyさん2008/10/10(金) 17:37:52ID:???
196が答えか、、、終わってるなw
こんな輩が得意げに宣ってるからPHPはウンコだって言われるんだろうな。
0234nobodyさん2008/10/10(金) 17:44:35ID:???
少なくとも俺の現場ではショートタグは使えない
02351962008/10/10(金) 23:28:20ID:???
212に不満があるのは理解出来るけど、196は良いと思うんだけどな。
209の要件を満たす方法の一つが212で、それは211と大して変わらない。

だけど196は、MVCさえ理解できれば、209で述べられている要件も、
201よりスマートなコードにする事も、満たすことが出来るんだ。

なんでか知らんけど、Smartyを信じる人は知識があって偉い、
そうじゃない人はみんな素人だ、という反論しか戴けないのは残念だな。

>>234
ストローク数の少なさと可読性は若干損なわれるが、
それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。
0236nobodyさん2008/10/11(土) 00:30:31ID:???
>Smartyを信じる人は知識があって偉い、
>そうじゃない人はみんな素人だ

誰もそんな事言ってないから。
君がSmartyを否定するだけの根拠を持ち出さないから素人扱いされちゃうんだよ。
(まぁ、テンプレートエンジンを否定してる時点で底が知れてるけども。)

196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい?
それなら、早急にWEB系PGを辞めた方が良い。

212の記法に疑問を持たないのであれば、
やはり、早急にPGを辞めた方が良い。

一応聞いとくけど、OOP&MVC的に開発する時、どんな構成で作ってるの?
フレームワークとかライブラリとか教えてよ。
まさかhtdocs以下に.phpファイルを量産してたりしないよね?
0237nobodyさん2008/10/11(土) 06:53:44ID:???
>それでもSmartyよりは<?php echo $name ?>のほうがマシだと思う。
ほらほらこんな書き方すると単にSmartyを叩いてるようにしかみえないよ

196が同じ人なら、その内容からとてもSmartyを理解してる人には思えないんだよね

>196は良いと思うんだけどな。
PHP(web)初心者だよね(笑)
0238nobodyさん2008/10/11(土) 12:06:19ID:???
いやだから、PHPで同じことができるのにわざわざSmartyを使う理由ってなに?
今まででたのは、<?php echo $var; ?> が短く書けることぐらい?

SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。

>>229
>「何故、Smartyは必要ないのか」を具体的に答えてくれよな?
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている

で、Smarty使う理由って何?
>>229は他人を無知よばわりしてるから、おれの知らないSmartyの利点ってやつを教えてくれ。
0239nobodyさん2008/10/11(土) 12:07:00ID:???
まちがえた、Symfonyね。
0240nobodyさん2008/10/11(土) 22:10:00ID:???
・SmartyでやろうとしていることはPHPでできる
→ PHP単体では出来ない。別個にエンジンを作る必要がある。
  キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか?
  
・Smartyは学習コストがかかる
→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。

・Smartyは遅い
→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい?
  スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw
ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw
 
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
→ ずれてないよww エラー英文すら読めないレベルかwwww
  そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。

→PHP単体でなく、Smartyを使う理由?
・テンプレートエンジンとして必要な機能を備えている
・拡張がし易い
・デザイナのコードがシステムに混入しない
・PHPテンプレートエンジンとしてはメジャーで扱える人が多い


>SymphonyとCodeIgniterを使って開発したけど、どっちもSmarty使わなかったし、それで何の問題もなかった。
良かったね。
僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。
SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
0241nobodyさん2008/10/13(月) 03:31:41ID:???
cakeを上げないあたりにひねくれものな感じがプンプンするぜ
0242nobodyさん2008/10/13(月) 10:28:16ID:???
Smartyがデフォルトのテンプレートエンジンになっているフレームワークってありますか。
0243nobodyさん2008/10/13(月) 11:11:34ID:???
>>240
>・デザイナのコードがシステムに混入しない

いくらなんでもこれは冗談でしょ。
0244nobodyさん2008/10/13(月) 11:17:06ID:???
>>242
普通は自分で選ぶ
0245nobodyさん2008/10/13(月) 11:31:25ID:???
>>240
>→ PHP単体では出来ない。別個にエンジンを作る必要がある。
>  キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか?
PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。

>→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。
んなわけない。なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。

>→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい?
>  スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw
>ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw
おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。

0246nobodyさん2008/10/13(月) 11:38:35ID:???
>・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を学習させる意味がわかんない。
0247nobodyさん2008/10/13(月) 11:41:35ID:???
>>240
>僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。
>SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
いまどきこんなこと言うのは、フレームワークを使ってないということか。
あるいはオレ様フレームワークか。
これでオレ様フレームワークつかってたら笑うなー。
0248nobodyさん2008/10/13(月) 12:01:54ID:???
>>246
要するに、「うちのデザイナはPHP理解できるからSmartyいらないんだぜ」ってことな。
前提としてる環境が違うんだからいつまでも平行線なんだろうね。他にも摺りあわない理由はありそうだが。
0249nobodyさん2008/10/13(月) 12:27:09ID:???
自社おかかえのデザイナがいるならどうでもいい話だろうが
外注に出す場合、まだsmartyの文法のほうが通じやすいと感じるがなー

既にsmartyを知ってるデザイナもちょこちょこいるし
知らない場合でもマニュアルの「II. テンプレートデザイナのための Smarty」だけ読んどいてで済む
さすがにPHPを覚えてくれとは言えない
02501962008/10/13(月) 14:37:10ID:???
やっとフレームワークの話が出てきたな。
名前もうまく書けてないレスが多いが、正しくはsymfonyと言う。

>>236
> Smartyを否定するだけの根拠を持ち出さないから素人扱い

Smartyを否定するつもりは無いよ。
「否定したら玄人」とか、どんな中二病だよw

まず前提として、Smartyの是非を議論する場合、
Smartyありきではなく、Smartyと実装Aと実装Bは対等に比較されるべきなんだよ。

>>237も同じで煽りに内容が無い。
02511962008/10/13(月) 14:56:46ID:???
さて本題だけど

> 196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい?

その考え自体がモダンじゃないんだよな。

<?=$name?>を実行するファイルの先頭に書いたら、何が表示される?
Noticeが出るだけだよね(PHP4だと出ないかも)。当たり前のことだ。

「PHP単体」という言葉自体がおかしくて、(SmartyだってPHPだしな)
<?=$name?>を実行するためには、まず$nameに値を代入する必要があるんだよ。
ロジックから$nameに値を代入する過程が必ずあり、そこで、
スコープの決定と、エスケープなどのビュー用の加工処理が行われる。

ちなみに、スコープの決定条件は、196とSmartyで等価だよ。
パーサのメソッドの中でincludeしたら、スコープはそのメソッドの中になる。

212のコードの欠点は、ビュー用の加工処理が、
本来HTMLであるべきファイルの中で行われることだ。Smartyも同様。

まあ、俺はSmartyを否定したいのではなく、
別の選択肢を提示して、それに対する意見を聞きたかっただけなので、
とにかくSmartyを褒めてくれなきゃヤダヤダ、という話なら正直困る。
02521962008/10/13(月) 15:09:46ID:???
>>248-249
DreamWeaverでしかページを作れないへぼデザイナーと仕事をするとか、
外注には出すがソースレビューしたくないという場合は、
大人しくWeb製作として依頼して、コーディングは自分でやった方がいいとおもう。

結局Smartyだろうが何だろうがビューはビューなので、
MVCが理解出来ない人にビューを作らせようとしてもうまくいかんし、
テストとデバッグは結局やらなきゃいけないんだよ。

デザイナーから見たら、実際どう描画されるかわからない記号の羅列を
マニュアルと変数名の指示書どおりにHTMLに書き込んでみたりして、
「たぶんこれで出来たと思うんですがどうでしょうか」と言わないといけない時点で、
それはプログラマー仕事としての負荷を被っているわけだよ。
実質的に、分業にもなっていなければ、責任の切り分けにもなっていない。

Smartyの良くないところをあえて挙げるならば、
「Smartyを使えば、へぼデザイナーとへぼプログラマーが協力出来る」という幻想を
蔓延させた事かも知れんねw
0253nobodyさん2008/10/13(月) 15:10:55ID:???
>>251
おまえさんはSmartyを否定してるんじゃなく、テンプレートエンジンを否定してるんだろ?
なら選択肢なんかじゃなくて具体的にどのように実装すべきかを提示してみてくれ
02541962008/10/13(月) 15:24:07ID:???
>>253
「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>229はそれを否定していたので、そこからして論外なのだ。

テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
まずそれを考えなおして、表現してみてくれ。

「必ずキャッシュ機能が無いといけない」とか
「PHPとして実行できてはいけない」とか
そういう特殊な前提があるんなら、それを踏まえないとお前さんの役には立てんよ。

俺の要件に則って具体的な実装を述べて良いなら、
196こそが「テンプレートファイル」の答えなのだ。
$nameに何をどこでどうやって代入すればいいのかについては、>>251に書いた。

そうそう、ディスパッチャの存在が前提になるんだ。そこはSmartyと同じだな。
0255nobodyさん2008/10/13(月) 15:33:22ID:???
>>254
いや、だからな
>ロジックから$nameに値を代入する過程が必ずあり、そこで、
>スコープの決定と、エスケープなどのビュー用の加工処理が行われる。
の具体例を提示してみてくれって話なんだが
0256nobodyさん2008/10/13(月) 17:04:37ID:???
ぐだぐだ言い分けしてないで、
Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。

PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
使う事を否定しないが、君なりの構築術があるわけだろ?

それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
0257nobodyさん2008/10/13(月) 17:05:33ID:???
単にSmartyに馴染めなかった、Smarty使ってる人うぜぇ!
ってだけならすれ違いだから、よそで最高のテンプレートエンジンを開発してくれよな!
0258nobodyさん2008/10/13(月) 17:10:46ID:???
>>254
>「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>>229はそれを否定していたので、そこからして論外なのだ。

うむ、同意だな。PHPはそれ自体でテンプレートエンジンとして使える。

> テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
> まずそれを考えなおして、表現してみてくれ。

テンプレートエンジンとしての要件は、ビューを分離できること、でいいと思う。

>「必ずキャッシュ機能が無いといけない」とか

キャッシュ機能はビュー層が単体で持つべき機能じゃないよな。
もつべきならコントローラ層だ。

0259nobodyさん2008/10/13(月) 17:18:03ID:???
>>256
>ぐだぐだ言い分けしてないで、
>Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。
前スレ読め。とっくに出てる。

>PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
はあ?ライブラリを使っちゃだめとか、頭どうかしてんじゃねーの。
Smartyだってライブラリだろ。なんでSmartyはよくて、他はだめなの?ばかなの?
それにPHPだけで書かれたライブラリはpure PHPだろ。言葉の意味間違ってるぞ素人さん。

>使う事を否定しないが、君なりの構築術があるわけだろ?
>
>それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
だから前スレよめって。>>193以降全部読め。

0260nobodyさん2008/10/13(月) 18:24:20ID:???
>まあ、俺はSmartyを否定したいのではなく、
別の選択肢を提示して、それに対する意見を聞きたかっただけなので、

>>193をそう解釈しろと言われても困る
0261nobodyさん2008/10/13(月) 18:40:09ID:???
>>256

>何と比較してダメなのか
→ PHPと比較して。

>要所要所わかりやすく上げてくれ。
>>238からのコピペ。
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている


で、Smarty擁護派が>>240で反論してるけど、Smarty反対派が>>245-246で再反論してて、今はSmarty擁護派の再々反論待ち。
特にエラー行番号についての見解を期待。
0262nobodyさん2008/10/13(月) 21:39:53ID:???
何が見解だよ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
0263nobodyさん2008/10/13(月) 21:48:53ID:???
>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拡張クラス組込済。
0264nobodyさん2008/10/13(月) 22:13:18ID:???
>別の選択肢を提示して、それに対する意見を聞きたかっただけなので、

解ったから、具体的に選択肢を提示してくれよ。

ショートタグで値を表示するだけじゃ甲乙つけられないだろ?
ループ、エスケープ、インクルード、条件分岐が入ったViewテンプレートサンプルを上げてくれ。
それを見て「これならSmarty使う必要は無いな」と思わせてくれよ。

俺が出すサンプルは以下だ、
「ヘッダ、フッタを合成して配列の中身をテーブルに出力するだけの簡単な処理」
0265nobodyさん2008/10/13(月) 22:16:06ID:???
===================================================
 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"}
0266nobodyさん2008/10/13(月) 22:16:56ID:???
===================================================
 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";?>
0267nobodyさん2008/10/13(月) 22:17:35ID:???
PHP側はこれでも処理が全然足りない。
インクルードファイルの管理や、ローカルスコープ化処理、エラー処理、etc。
結局細かい処理を考えるとSmartyと同程度までの実装は欲しくなってくる。(文法はおいておいて)
そこをライブラリや関数で補うって事なんだろうけど、
実際にそうした場合のテンプレートコードを上げてみてくれ。
0268nobodyさん2008/10/14(火) 01:17:27ID:???
>>262
>君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
>Smarty自体の処理ははあっておりコンパイルも通っている。

あほかお前、なんでSmartyのエラーかPHPのエラーかをここで区別する必要があるんだ?
エラーといわれた場所の行番号が違っていることが問題なんだろうが。
Smartyのエラーなんて、ただの構文解析でのエラーしかでねーじゃんか。
実行時のエラーには無力なうえ、変な行番号ででるんじゃ、使い勝手悪すぎだろ。
PHPなら実行時のエラーも行番号がずれることはない。こんなのあたりまえ。
実行時エラーを変な行番号でしか報告できないSmartyを必死に擁護するほうがどうかしてる。
「Smartyエラー」ってなんだよ、構文解析でのエラーじゃないからSmartyのせいじゃありませんって、アホか。
エラーの種類に関係なく、行番号がずれるのが問題なのに、
構文レベルエラーと実行時エラーを区別する必要がどこにある。
0269nobodyさん2008/10/14(火) 01:52:38ID:???
>>268
デザイナとプログラマの分業がなされているとき
構文エラーはデザイナ責任、実行時エラーはプログラマ責任。
PHPエラーがでたらプログラマが対処すりゃいい。

そもそも、>246のエラーは文字列に変換できないクラスをassignしないもしくは、
assignしたものが直接扱えない変数であることをデザイナに伝えていれば起きない。
0270nobodyさん2008/10/14(火) 02:36:44ID:???
>>268
アホはお前だろw
実行時エラー制御したいなら、Smartyに限らずassign時点で型判別しろよ無能w
それこそSmartyとかPHP以前の話だよ。


>エラーの種類に関係なく、行番号がずれるのが問題なのに、
ずれてねーよw コンパイル後のソースでの行数で、ご丁寧にファイル名まで出てるじゃん。
スクリプト言語しか触った事無い素人には、実行時エラーのデバッグは難しいのかもしれんが、
普通のPGなら上のエラーコード読むだけで、エラー内容もエラー位置も特定出来るわ…

むしろ構文エラーじゃなくて、実行時エラーだって理解出来て問題識別しやすいわw


無能を晒してないで、
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。

0271nobodyさん2008/10/14(火) 02:40:48ID:???
こういう無能がdisplay_errorsをonにしたまま本番公開しちゃって恥ずかし思いするんだろうねぇ('_`
0272nobodyさん2008/10/14(火) 03:44:58ID:???
>>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;
}
?>
0273nobodyさん2008/10/14(火) 03:46:43ID:???
<? // こんとろーら
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のメソッドチェインてきなやつはよいとおもいます
0274nobodyさん2008/10/14(火) 04:01:40ID:???
>>268
>エラーといわれた場所の行番号が違っていることが問題なんだろうが。

言いたいことはわかる。
でも、関数なんだから当然だろ。
引数が不適切なせいで、呼び出し先でエラーが出た場合を考えればわかりやすい。
02751962008/10/14(火) 09:31:04ID:???
いや、行番号の話はSmartyとsymfonyを混同した人の指摘?みたいだし、
エラーを追いかけたかったら良いデバッグツールを使えばいいと思うぞ。
PHP標準でスタックトレースも変数の中身も出せるわけだし。

>>263
SimplateいいぞSimplate。暢気な人には魅力がかわらんかも知れんが。
俺が考える「Smartyをわざわざ導入する際のデメリット」が結構解消されてる。
まあ、「SmartyはPHPで書かれている」という大きいメリットは殺ぐのだけど。

>>265-266はMVCを理解してない人の例という意味では良いサンプルだな。
>>271-273ありがとう。俺もせっかくなので一つ案を出す。
0276nobodyさん2008/10/14(火) 10:01:19ID:???
おはよう。

>>275
Simplateいいよね。 客先都合で使えない事が多くて泣けるけど。
>>265-266はMVC的にはどう書くのが正解?
02771962008/10/14(火) 10:20:12ID:???
レス番間違えた。272-273、素晴らしいコードをありがとう。
議論としては蛇足になってしまうかも知れないんだけど、
俺が個人的に>>212より>>196が良いと思うと言った部分を紹介します。

特徴(一長一短?)は、テンプレートファイルの可読性が高く、隠蔽されていること。
利点はHTMLからの移植性と習得の容易さ。
欠点は配列操作のコストを二重にかけていること。

改行が多いと叱られたので再挑戦。

>>276
>>272-273のように書くのが正解だと思う。
少なくとも、MとVとCがそれぞれどのファイルかわかるでしょ。
02781962008/10/14(火) 10:21:06ID:???
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>
02791962008/10/14(火) 10:30:20ID:???
>>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の処理は、コントローラに近い場所に書いているかも。
0280nobodyさん2008/10/14(火) 11:24:56ID:???
>>196
君、MVCを全く理解出来てないよ。

データの表示フォーマット等に関するビューロジックは、ビュー側で処理するべき。
コントローラは必要なデータをモデルからひっぱってデータに渡すだけで表示内容には関与しない。
君の書き方だと、各種表示フォーマットやデフォルト値が変更になった時にビューで処理出来ないでしょう?
0281nobodyさん2008/10/14(火) 11:31:38ID:???
>>265-266>>272-273の違いは何ですか?

MとCはコードに掲載していないだけでVとしては正しいと思います。
何が問題でしょうか?具体的に教えて下さい。
0282nobodyさん2008/10/14(火) 11:37:48ID:???
>>280
変更される度にtpl.phpに修正を入れるんだろうな
単純にテンプレートファイルとビュー用のデータ加工のphpを分けてるだけみたいだし

というか、やってる事はオレオレテンプレートエンジンな件について
要は生phpをテンプレートファイルにできればいいのかな?
0283nobodyさん2008/10/14(火) 11:50:37ID:???
>>282
ねw 多分中学生か高校生の熱血PG志望者だよきっと。

俺も若い頃は動作の重さに超敏感だったし、Smartyとか使う奴はアホかと思っていたw
0284nobodyさん2008/10/14(火) 12:14:00ID:???
>「Smartyをわざわざ導入する際のデメリット」

俺にはこれがわからん。
パッケージインストールもしくはダウンロード→インクルードパス下に解凍したらすぐ使えるよ?
習得の手間は人それぞれだろうけどおそらく196や周辺のPHP知ってるデザイナーは苦労したんだろうな。
0285nobodyさん2008/10/14(火) 12:15:43ID:???
>>281
んーと
「V」にだけ着目するならどっちもただしい、
それこそ全部echo文でもただしいのではとおもいます!

>>272-273は「SmartyでできることはPHPでできる」、の一部のサンプルとして
1. 変数・関数のスコープの限定の実現
2. 生PHP?のテンプレートとしての(そこそこの)書きやすさの実現
 (というかshort_open_tagの積極的な使用)
を主眼においてつくってみました。 >>266から>>273に代わって
何か問題が解決したとすれば、主にはView用変数・ユーザ定義関数がグローバルでなくなったこと
かなとおもいます(まちがってたらアドバイスください><)。

じぶんはというと今テンプレートに
Smartyを使いつづけるか(といってもまだ使って一ヶ月ですが!)
否かまよっているところなので先人さんのいろいろな意見を参考にしたいところで、
最近このスレをみつけてせっかく興味のある話題にめぐりあえたのに
煽り合いばかりでおもしろくないなーとおもっているところです。
0286nobodyさん2008/10/14(火) 12:23:17ID:???
お前が煽ってんだろが
0287nobodyさん2008/10/14(火) 12:28:17ID:???
あ、>>277さん、こちらこそありがとうございます><
最初はもっとボコボコに叩かれるかもとおもってたので…
0288nobodyさん2008/10/14(火) 12:31:26ID:???
>>286
煽ってないですが煽ってると思われたならあやまります。。
すみません
0289nobodyさん2008/10/14(火) 12:41:55ID:???
>>285
>>265-266
「V」に着目するだけというかVのサンプルですが…。
MVC的に見ても、MもCも混在していないので間違いがわかりません。
どこに違和感を感じたのでしょうか?


仕組みを学ぶのは良い事だと思います。
しかし、もう少しSmartyを使い続けてみて下さい。
不満点も沢山見つかると思いますが、メリットも沢山見つかると思います。
「SmartyでできることはPHPでできる」はパッと見出来てるように見えてるだけで、
細かい実装(商業では必須ね)考えると、相当な開発負荷がかかります。

>short_open_tagの積極的な使用
現バージョンのPHPの推奨設定ではshort_open_tag=offなので注意して下さい。
PHP6以降では廃止される可能性もあります。
0290nobodyさん2008/10/14(火) 12:42:58ID:???
>>285
Smartyでできる事を手間をかけてPHPだけで書いてもメリットないだろう
処理速度に多少のアドバンテージがあるくらいで、それも汎用的に書いていけば怪しい

個人的にはSmartyを使うメリットで一番大きいのは、使ってる人が多い事だと思ってる
0291nobodyさん2008/10/14(火) 12:46:30ID:???
SmartyもどきをPHPで作るくらいなら、俺はSmartyを使う。
02921962008/10/14(火) 18:57:31ID:???
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ほど大げさなモノは、個人的には使わないかな。
テンプレートファイル部分は出来るだけ薄いほうが好き。
0293nobodyさん2008/10/14(火) 20:46:31ID:???
>short_open_tagは俺の趣味です。
なんだ、ただのひねくれものか
お前、友達いないだろ?
お前、自分の事出来る職人だと思ってるだろ?
周りは確実に引いてるパターンが目に浮かぶ
もはやSmartyの話題でも無いので、MVCスレにでも行けや。
0294nobodyさん2008/10/15(水) 00:24:43ID:???
>>292
>>278のコードだけど、tpl.phpとbody.phpを合わせてSmartyで言うところのテンプレートだよね?
tpl.phpでデータを整形をして、body.phpは体裁のみを担当と…。

これは君の主張していた

 ・Smartyより学習コストが低い
 ・(デザイナが)Smartyで出来る事は実現出来る

には当てはまらないよね。

tpl.phpで扱える便利な関数群を提供してあげればいいんだろうけど、
それは>>290-291の言うとおり、結局は我流テンプレートエンジンを作る事態になってしまうよね。
であれば既に完成されたSmartyから乗り換える理由にはなり得ないと思うんだ。
もっとも君が我流テンプレートエンジンを完成させて、公開してくれれば別かもしれないが。
0295nobodyさん2008/10/15(水) 00:45:46ID:???
>>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を作るのは誰がやるんだ…って話になる。
0296nobodyさん2008/10/15(水) 01:03:17ID:???
>>289
じぶんは>>264-267を見てつくってみたのですが
おっしゃってることがよくわかりませんでした。。

Smartyはまだ触ってみるつもりではいます!
>>290さんのおっしゃっるとおり使う人が多いのはよいとおもいますし
たしかカスタムタグみたいなこともカスタム関数でできるんですよね??

ただSmartyに不満を持つたびに、
PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
PHPを使いはじめてから、short_open_tagとか制御構文の別構文(endif, ...)とか
テンプレートとしてのPHPはすごくいい感じだとおもったので
PHPがちゃんとテンプレートとして進化しなかったのがざんねんです。

テンプレートエンジン上にテンプレートエンジンをのっけるという感覚が
今割り切って理解できなくなっているのです。。
short_open_tagがXML処理命令の規則に合わないのはあきらめるしかないです。。
0297nobodyさん2008/10/15(水) 02:00:05ID:???
PHPはすでにテンプレートエンジンとしては不全なんだろ。
それならSmartyを良くするとかもっと良いテンプレートエンジンを作るとかしたほうが生産的だと思うのだが。

まあ、PHPを良くするというのもありか。
しかしテンプレートとプログラムを同居させるというのはどだい無理があると思う。
Smartyのプログラム的文法もかなり無理やりだしな。
0298nobodyさん2008/10/15(水) 02:42:51ID:???
>>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単体でも簡単に実装出来そうに見えますが、タグの入れ子処理等を考えると地味に面倒だったり、テンプレートの可読性が下がったりしますよね。
02991962008/10/15(水) 18:33:26ID:???
>>294
tpl.phpが難しいから学習コストが高いということかな?

・PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
・Smartyで出来る事は理論上すべてPHPで出来る(し、その手段もそれなりに用意されている)

というのが俺の意見かな。
俺の環境はsymfonyで、sfFormか、helperか、sfSmartyViewPluginかの選択が必要なので、
既にSmartyで完成されたサイトとかを、わざわざリプレースする必要は無いと思う。

「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?

>>295
なるほど、俺にとっては斬新な発想だった。
ファイルの命名規則をしっかり決めれば、関連性はわかりやすいかと思ってたんだが。

tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。
「$nameの表示はescapeしてnl2brしてください」という要件を把握出来るのが、
デザイナーなのかプログラマーなのかによって話が大きく変わるんだろうな。
03001962008/10/15(水) 19:01:26ID:???
せっかくなのでSmartyの質問をさせてくれ。

(是非はおいといて)>>278のような事をSmartyで実現したい。

MVCで言うと、new Smarty();が書かれるファイルは、
モデルでもコントローラでもなく、ビューに属する事になる。
sfSmartyViewとかZend_View_Smartyみたいな位置づけになるわけだな。なので、

コントローラ(ラッパーにテンプレート変数を渡す)

ビュー用のラッパー。内部的に$snarty->assign();が書かれる

★テンプレート変数の整形処理(Smartyの便利な構文で書ければ良い)
$name = {$name|escape|なんたら|かんたら}

テンプレートファイル(.tpl)
{$name}

みたいな風にしたいのだが、それは仕様上無理なんだろうか。
{assign}とか{eval}でいける? コストはこの際考えないことにして・・・。
0301nobodyさん2008/10/15(水) 19:38:33ID:???
>>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はその機能性より、
コードの統一性や管理体制に与える恩恵の方が大きいのかもね。
0302nobodyさん2008/10/15(水) 20:31:43ID:???
>>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();
}
}
0303nobodyさん2008/10/15(水) 20:34:36ID:???
PHPが書けないデザイナをヘボとか言っちゃう人とは仕事したくないなあ
jspが書けないデザイナもヘボなんだよね?
MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない
うーん、大変だな
0304nobodyさん2008/10/16(木) 02:49:37ID:???
>>298
> PHPは正確にはテンプレートエンジンでは無いんですよ。
そうなんですか??

> Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが)
んんーSmarty内でPHPコードを書くのは本末転倒というか本末転倒ですよね。。

あとカスタムタグ?のサンプルありがとうございます!
ttp://smarty.incutio.com/?page=foreachgroupというのがおもしろそうでした!
0305nobodyさん2008/10/16(木) 03:51:12ID:???
>>304
PHPはプログラミング言語の名称ですよ。
0306nobodyさん2008/10/16(木) 08:06:34ID:???
>>303
CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw


個人的にはデザイナはPHPとか勉強するヒマあったら、
システムに組み込みやすいスマートなHTMLコーディング技術を学んで欲しいわ。
0307nobodyさん2008/10/16(木) 17:56:46ID:???
>>305
そりゃ、そうでしょうとも…!
0308nobodyさん2008/10/16(木) 19:53:26ID:???
PHPという言語は<?php ?>タグの外をそのまま出力するという言語仕様なだけでテンプレートエンジンでは無いよね。
03091962008/10/19(日) 11:55:40ID:???
なるほど、このスレには分業指向の人が多いんだな。

>>301
{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。

>>302
やっぱり、そうなってしまうよなあ。
上で「それはMVCではない」と言われてから、内心悩んでたんだけど。
Smartyの解説ありがとう。その線で学習コストが等価になれるか検討してみる。

>>303
JavaとかMT(使ってる人いるのか?)のプロジェクトなら、そうだろうね。

>>306
HTML書けません、というプログラマーとは間違っても一緒に仕事しないよ。

というより、Smarty文法がわからないデザイナーと一緒に仕事しないでしょ?
同じことでないの?
0310nobodyさん2008/10/19(日) 15:09:25ID:???
>>309
>{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。

{php}{/php}タグは禁止に出来ます。

>デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
>へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。

逆になんで必要の無い権限を与えるの?それによるデメリットは考慮しないの?
まっとうなセキュリティの考え方だったら「必要な権限以外は与えない」のが常識だと思うんだけどね。
最低限の権限で不便させない環境を提供出来ないシステム屋こそへぼい人だと思う。


参考までにいくつか質問させておくれ

 ・プロジェクトの人数とか連携手法やらバージョン管理方法は?
 ・テンプレートPHPでエラーが出たら誰の責任になるの?
 ・テンプレートに使ってるPHP系のライブラリとかは?
03111962008/10/19(日) 15:56:49ID:???
>>310
デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
コードレビューとサーバへの設置はプログラマーがやればいいじゃん。

デザイナーにサーバへの書き込み権限を与えた時点で、
(仮にあらゆるコマンドの実行をサーバ上で絶対に行えなくしたとしても)
デザイナーはシステムの正常動作責任を一部負う事になるのは間違いない。
たとえば、必要なパラメタを渡さなかったとか、ファイルを消しちゃったとか。

だから、あらゆる操作をサーバ上で絶対に行えなくすることのメリットは、
デザイナーがサーバを壊さないようにする、という程度に過ぎないので、
それなら優秀で信頼のおけるデザイナーと仕事したほうがいいんじゃないの? と思う。


質問の答えだけど、製品が完成しなかったらチーム全体の責任。
デザイナー主導の案件でもプログラマー主導の案件でも、
インタフェース定義の必要性は発生し、それは両者(主に主導側)の責任になる。
Smarty単体ではシステムの仕様テストは行えないので、
「言われたとおりのSmartyテンプレートだけ書くからあとは知らないよ」というデザイナーは、
HTMLだけしか書かないデザイナーと大して変わらない。

なので俺はそういうデザイナーとは仕事してないし、
もしデザインを外注する事があっても、Smartyの学習を促す事は無いと思う。

あえて擁するなら、へぼプログラマーと連携する時には、Smartyは役に立ったな。
あれを安直に使えば、嫌でもビューとロジックが分離出来るから。
でも今はフレームワークを使うのが普通なので、そのメリットは感じられなくなった。
03121962008/10/19(日) 16:30:50ID:???
超極端な例として、>>310の議論にとって最も良い条件を考える。

・顧客がWebデザインを自分で更新したいと要望している
 実力はへぼかも知れないが、お客様なので無碍にも出来ない
・プログラム開発も初期デザインも業者が行い納品する
・サーバは業者が貸与するので、壊されないように配慮しなければいけない
・ssh権限は与えず、ftpsでテンプレートファイルだけ更新できるようになっている
・プログラムの動作責任は業者が負わないといけない
・テンプレート更新内容のチェックに業者の人的コストは割けないので、
 更新はノーチェックで行い、システムが正常動作しなくなった責任は顧客に負わせなければいけない
・テンプレートにはプログラムから変数を埋め込まなければいけない
・顧客はSmartyの心得と導入への理解がある
・Smartyのうち危険なタグをすべて洗い出し、設定で使用を禁止している
・テンプレートでエラーが出てもセキュリティ的に不適切な出力は行われないよう設定されている

それでも

・パラメタエラー
・クロスサイトスクリプティング

の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
お客様が |escape を書き忘れただけで。
なので>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。

でも、ここまで極端な事例でもない限り、デキル人を探した方が早いなぁ。
顧客には任意の静的HTMLを特定箇所にinclude出来る仕組みのみを提供するとか。
Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
0313nobodyさん2008/10/19(日) 17:55:19ID:???
とにかく難癖つけてSmarty叩きたいのはわかったけど、
結局君がSmarty使いこなせてないだけじゃんww
100%の対策なんて無いんだから、対策しないって言ってるだけって事に気付けww

>デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
>コードレビューとサーバへの設置はプログラマーがやればいいじゃん

 デザイン修正の度にやるんすか。

>デザイナーにサーバへの書き込み権限を与えた時点で

 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
 ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
 消される恐れがあるとわかってて何故権限を与える?w

>Smarty単体ではシステムの仕様テストは行えないので、

 わぁ、きっと君のところはMVC分けが出来てないんですね><
 フレームワーク使えば大丈夫とか思ってるんですね><
0314nobodyさん2008/10/19(日) 18:12:47ID:???
>・パラメタエラー
>・クロスサイトスクリプティング
>の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。

 default_modifiersやフィルタって知ってます? 

>Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。

もうSmarty叩きはいいからさ
その安全で扱いやすい俺俺テンプレートエンジンを見せてよ。
君の主張は前提と具体性がないから水掛け論だよ…。

まさか専門学校生じゃないとは思うけど質問に具体的、箇条書きで答えてくれよ。

・プロジェクトの人数は?
・連携手法は?
・バージョン管理方法は?
・デプロイ方法は?
・使用しているPHPライブラリは?
・使用しているフレームワークは?
・使用している俺俺テンプレートエンジンは?
0315nobodyさん2008/10/20(月) 12:22:54ID:???
こんなに活発に意見交換があるのに、
どうしてココは『隔離スレ』なの?
0316nobodyさん2008/10/20(月) 12:27:38ID:???
名目はともかくスレ独立してるのはありがたいので別にいいや。
03171962008/10/20(月) 18:54:05ID:???
>>313
煽っているように見えて>>311と同じ事を言っているように見える。
なので異論は無い。むしろ、まったくその通りだと思う。

>>314
default_modifiersは初めて知った。
nodefaultsと組み合わせれば、symfonyのescaping strategyに近い所まではいけるな。
escapeはプログラマーの責任でもなくデザイナーの責任でもなく、
フレームワークが基本的に便宜を図る、という解釈をすれば、悪くない思想だと思う。

後半については答えても意味が無いと思うし、
別にSmartyを否定する事が主目的で発言している訳ではないと言っている。

世の中にはSmartyを使うのに明らかに向かない案件もあるし、
そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。

逆に「Smartyを使うならこんな規模や状況やツールに最適だよ」という意見があれば、
それは主張してくれればいいと思う。
0318nobodyさん2008/10/20(月) 19:11:06ID:???
>>317
default_modifiersは問題がある(ソースに手を入れれば回避可能だが)から使わないって話なら聞くが
Smartyを3年使ってて知らないってどんだけ・・・

そもそもなんでこのスレにいるん?
0319nobodyさん2008/10/21(火) 01:33:33ID:???
>>317
>世の中にはSmartyを使うのに明らかに向かない案件もあるし、
>そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。

本当にそう思ってるなら196から出てくる発言はありえないと思うんだよね。

シチュエーションも取り上げずに、否定だけされても納得は出来ないじゃない?
「俺ならこうする」って意見も無しにダメだしされてもなぁ…default_modifiersすら知らないみたいだし、
単にSmartyの事知らないだけですよね?
議論では無く、相手を論破する事が目的になってませんか?
なんでこのスレにいるん?
0320nobodyさん2008/10/22(水) 10:19:46ID:???
>>313>>311が同じに見えるって、どんだけ読解力無いんだお前は…
相反する事言っているのに、なんで>>313に対しては異論唱えないんだ。
03211962008/10/22(水) 11:20:52ID:???
simplateのメンテに貢献したほうがマシな気がしてきた。

>>318
そうだっけか。じゃあ使い物にならないから忘れたのかな。
いずれにせよSmarty使ってた頃は、そこまでいじる気自体が無かったな。

>>319
俺ならこうする、という意見も、具体的なコードも書いたし、
Smartyを否定する事が主目的でも無いし、Smartyのわからないところは質問した。
発言する前にきちんと流れを読んでくれ。
直近の議論は294,299,301,309,310,311だ。

>>320
> 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
> ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
> 消される恐れがあるとわかってて何故権限を与える?w

という意向と>>311との違いは状況判断の部分だけ。
俺は手動デプロイなんていちいちしたくないので、
信頼のおける優秀なデザイナーと仕事をする。
だけど、信頼のおけないデザイナーと仕事せざるを得ないなら、
>>313の言うようにするのもわかる。
前提とか本人の置かれている状況が違うだけなので、特に反論は無い。

それとも、
「デザイナーには完全な制限と束縛を課して徹底的に管理しろ」
というのが一番言いたいことなのかな?
Smartyを使ってデザイナーを檻の中に隔離するんだ、みたいな思想なのかな。
03221962008/10/22(水) 12:12:03ID:???
俺が何故このスレに居るのかとよく問われるので、
お言葉に甘えさせて戴き、整理させていただく。

俺が思う結論
・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で納品させるというアプローチ。
  手動管理はめんどくさいし、たとえ客でも保守費用払わなかったらやりたくない。
0323nobodyさん2008/10/22(水) 13:25:17ID:???
だめだこいつ…芯の通った主張が一つもないから、結局何に結論づけてるのかもわからん。
「…で?」としか言えないわ。
0324nobodyさん2008/10/22(水) 13:32:44ID:???
default_modifiers忘れてただけとか言い訳が恥ずかしすぎるwww
結局使いこなせてないだけに一票。

「俺の環境ではSmartyが馴染まない」とか、凄くどーでもいい事なんで
こんな所でファビョってないで自作エンジンの制作作業に戻るんだ。

ここは君みたいな優秀なプログラマやデザイナが来ちゃいけない場所なんだ。
な。
03251962008/10/22(水) 18:45:58ID:???
>>324
一体どんな環境なら馴染むの?
0326nobodyさん2008/10/22(水) 20:54:01ID:???
>>325
使いこなせればどんな環境でも馴染ませられるよ。
出来ないのはヘボプログラマくらいだろうね。

君は何がしたいんだい?
Smartyを使う気がないなら、こんなスレにいる必要無いんじゃないのかな?
0327質問です2008/11/02(日) 19:17:14ID:???
PHPにて

for(i=0;i<6;i++){
echo "$_POST[$i]";
}

みたいなことをsmartyでやる場合、

{section name=i loop=5}
{$smarty.post.i}
{/section}

だと受けとれません。

$_POST[i] としてもだめなようで、
ループしてる回数を、POSTで受けとった配列のキーに割り当てるには
どう書けばいいんでしょうか?
0328nobodyさん2008/11/02(日) 19:19:30ID:JfJ9McaH
あげます。
0329nobodyさん2008/11/02(日) 20:49:20ID:???
書き方くらいちゃんと見なされ
0330nobodyさん2008/11/02(日) 21:45:09ID:???
section.{sectionname}.index でループ回数(正確にはstartから増分される値)を取得できる。
その前にpostはassignされてるのか気になるのだが・・・
03313272008/11/03(月) 23:53:06ID:CUNAecRE
329さん、330さん、ありがとうございます。

330さんの言うとおり、section.{sectionname}.index で
ループしてる回数を受けとれるのはわかるんですが、
その現在の回数をPOSTで受けとった配列のキーにするにはどのように書けばいいんでしょうか?

単なる配列をまわすときには、

{section name=i loop=$arr}
{$arr[i]}
{/section}

でいけると思うんですが、それがPOSTの配列の場合は一回assignしないといけないんでしょうか?
$smarty.post.キー で受けとれると思い込んでいたんですが。
0332nobodyさん2008/11/03(月) 23:56:08ID:???
マニュアル見てる?
0333nobodyさん2008/11/14(金) 17:52:36ID: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/"
こうしているのですが、
0334333の続きです。2008/11/14(金) 17:53:36ID: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');

?>
と持っていったのですが、どうしてエラーがでるのかわかりません。
教えてください
0335333の続きです。2008/11/14(金) 19:12:47ID: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
もう一度インストールからはじめたのですが、だめでした。
お願いします。
教えてください


0336nobodyさん2008/11/14(金) 19:56:05ID:???
はぁ?お前は何を言ってるんだ?
/usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php
の場所にこのファイルはあるのか?
0337333の続きです。2008/11/14(金) 19:56:14ID:nqLSKBoW
自己解決しました。
疲れました
0338nobodyさん2008/11/15(土) 22:34:31ID:???
もしかして、smarty使ってローカルでテストすると、
それが完成したアカツキには、レンタルサーバーにも
smartyをアップロードしないと動かないの??
0339nobodyさん2008/11/15(土) 22:40:28ID:???
そりゃあレンタルサーバーにsmartyがインストールされてるかどうかだろ
されてなきゃ自前でアップロードしろ
0340nobodyさん2008/11/16(日) 14:34:54ID:VgwBTNK+
>>338
一体何をincludeするつもりなのか
0341nobodyさん2008/11/17(月) 21:26:39ID:WEpi9J1I
smartyってのはカスタム関数が便利なんだよ
そんで、そのカスタムタグつくったから適当に使ってよ、とクライアントに投げるの。
好き嫌いは有るけど、生phpより見やすいわけね。
OK?
0342nobodyさん2008/11/18(火) 01:32:18ID:???
>>338

たいがいのフレームワークはそうなんじゃないの
0343nobodyさん2008/11/18(火) 06:18:46ID:???
>>341
テンプレートエンジンの理想型だよな。
PGにもデザイナにも優しい。
Smarty3で速度面が大幅改善されるっぽいので期待している。
0344nobodyさん2008/11/19(水) 00:19:12ID:???
>>343
テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。
まあプラグインで作れることは作れるんだが
0345nobodyさん2008/11/19(水) 04:25:55ID:???
Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?
0346nobodyさん2008/11/20(木) 11:05:10ID:WBdj1Bs+
Pearでカレンダーやメニューを作成してテンプレートに出力させたいんだが
このような場合、みなさんどうしてます?

テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?
0347nobodyさん2008/11/20(木) 11:18:04ID:???
>>346
つ{insert}
0348nobodyさん2008/12/03(水) 23:41:44ID:???
これってDjangoみたいなテンプレートの継承ってできないの?
0349nobodyさん2008/12/03(水) 23:58:50ID:???
>>348
簡易的なモノなら簡単に作れるから自作すれ。
0350nobodyさん2008/12/05(金) 11:52:26ID:jMVHCYUr
template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。

template は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。
0351nobodyさん2008/12/05(金) 13:30:34ID:???
cacheを混乱させそうだな。
03523502008/12/05(金) 14:12:47ID:jMVHCYUr
やめときます。
おとなしく対応させて作ります。

ありがとうございました。
0353nobodyさん2008/12/05(金) 20:37:51ID:???
>>350
コンパイルID指定すればOK
http://www.smarty.net/manual/ja/api.fetch.php
0354nobodyさん2008/12/06(土) 01:16:24ID:???
ほうそんな機能が・・・
メリットがまったく思いつかないけど覚えておきます
0355nobodyさん2008/12/06(土) 01:36:14ID:???
いやわかれよw
0356nobodyさん2008/12/07(日) 09:29:45ID:???
もー!ヽ(`Д´)ノ
sfCutString:5とかにすると5文字表示とかってあるよね?
これって反対に、後ろからの5文字を削除とかって出来ないの?
教えてくださいな(´・ω・`)
0357nobodyさん2008/12/08(月) 09:59:13ID:???
ないものはつくるんだ
0358nobodyさん2008/12/08(月) 16:34:14ID:???
ついでに車輪も作っとけ
0359nobodyさん2008/12/08(月) 23:18:30ID:???
あってもつくるんだ
0360nobodyさん2008/12/09(火) 12:27:40ID:???
車輪の再発明は偉大!
0361nobodyさん2008/12/22(月) 09:45:58ID:???
テンプレートエンジンの選択で迷ってるんですが、
smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか?
人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?
0362nobodyさん2008/12/22(月) 13:12:51ID:???
smarty以外を選択する理由がない
0363nobodyさん2008/12/22(月) 13:56:20ID:fwOoSy8e
自作する。
多分テンプレート変数を置換する以上のことはできないだろうけど
0364nobodyさん2008/12/31(水) 21:47:49ID:8KFb7g3b
今作ってるサイトで、smartyが動かないんですが何が原因と考えられるでしょう?
動作させてる環境は2つあり、動かないのはそのうち一つだけです。
Smarty.class.phpへのパスは相対できちんと通していて、同じファイルを
その2つにUploadすると片方でのみ動いてくれません
もちろんそちらでもphpは動いてるんですが、、

原因を探る方法はないでしょうか?
phpが動くサーバなら動くはずなんですよね?
文字コードとかは関係あるでしょうか?

現状では
$smarty->assign('testvar','テスト');
echo "ここまでOK1";
$smarty->display('sample.tpl');
echo "ここまでOK2";
とすると、 「ここまでOK1」だけ出力します「2」はしません

また、せめてassignがちゃんと成立してるかだけでも知りたいですがどうしたら
いいでしょうか?  ご意見よろしく御願いします
0365nobodyさん2008/12/31(水) 21:49:40ID:???
>>364
error_reporting
display_errors
0366nobodyさん2008/12/31(水) 23:02:30ID:???
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
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/
0367nobodyさん2008/12/31(水) 23:44:19ID:???
>>365
ありがとうございます、解決しました
0368nobodyさん2009/01/02(金) 21:57:29ID: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}

一応ちゃんと動いてますが、もっときれいで効率的な書き方はないでしょうか?
0369nobodyさん2009/01/02(金) 22:04:07ID:???
>>368
http://www.smarty.net/manual/ja/language.function.html.select.date.php
0370nobodyさん2009/01/02(金) 23:18:35ID:???
>>369
横ですがこれのselectedって現在時刻じゃないですか?
0371nobodyさん2009/01/03(土) 01:08:00ID:???
>>369
こんなのがあったんですね、ありがとうございました。
0372nobodyさん2009/01/04(日) 08:20:15ID:S9BZj0MW
フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき

{$name|escape} とすれば上記のとおり見れますよね。
これを、修正画面に持ち越したいときはどうしたらいいんでしょうか?

<input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし
<input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の
inputの表示がおかしくなるし、、
ご意見よろしく御願いします
0373nobodyさん2009/01/04(日) 08:53:47ID:???
セッション
0374nobodyさん2009/01/04(日) 17:11:37ID:???
>>373
ありがとうございます 解決しました
0375モンピー772009/01/05(月) 09:16:41ID:mGW0zuF3
Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを
しているのですが

$o_smarty->default_modifiers = array( 'escape:"html"' );

配列にも適用させること可能なのでしょうか?

みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?

0376nobodyさん2009/01/05(月) 11:59:56ID:???
>>375
default_modifires はクセがあるから気をつけたほうがよいよ。
{foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。

>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。
0377nobodyさん2009/01/07(水) 10:21:31ID:nbhiW1pd
>>375
そもそもPHP側ですませておく。
なんのために分離してるのかと
0378nobodyさん2009/01/07(水) 11:39:38ID:???
サニタイズはビュー側でもOKだと思うが。
0379nobodyさん2009/01/07(水) 12:32:40ID:???
サニタイズ(笑)
0380nobodyさん2009/01/08(木) 12:21:51ID:???
>>379(笑)
0381nobodyさん2009/01/08(木) 13:16:48ID:???
ん?反論できなくて涙目?w
0382nobodyさん2009/01/08(木) 14:37:59ID:/Ay52XkK
>>381
お前が暇人なだけだろw
0383nobodyさん2009/01/08(木) 16:01:24ID:???
>>378
誰も不可とは言ってないと思うが
0384nobodyさん2009/01/08(木) 16:03:12ID:???
>>382
必死だな
0385nobodyさん2009/01/09(金) 02:14:26ID:???
>>383
>>377ではPHP側でやれと書いてあるようにしか読めないんだがww

必死すぎて恥ずかしいな。
0386nobodyさん2009/01/09(金) 13:26:05ID:dxaSQaiQ
>>385
必死厨必死だな。

「みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?」
この意味わかるか?
0387nobodyさん2009/01/09(金) 14:19:53ID:???
「サニタイジング」じゃねーの?
0388nobodyさん2009/01/10(土) 01:02:19ID:???
>>386
スマン。日本語でお願い出来るか?

どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?
0389nobodyさん2009/01/15(木) 22:45:35ID: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させています
03903892009/01/15(木) 23:24:27ID:iReMhog8
>>389に書いたファイルをrequireした.phpで、

require_once('MySmarty.class.php');
//Smartyクラスのインスタンス作成
$smarty = new MySmarty();
echo "テンプレートディレクトリ:".$smarty->template_dir;

としたら、正しいパスを読み込みました
これはSmarty.class.phpも読み込み成功してるってことですよね?

どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?
0391nobodyさん2009/01/15(木) 23:29:20ID:iReMhog8
ごめんなさい、書き間違えです

×正しいパスを読み込みました
○正しいパスを出力しました

×一つのディレクトリに複数の…
○一つのサイトに複数の…

また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)
0392nobodyさん2009/01/15(木) 23:35:13ID:???
compile_dir,cache_dirへの書き込み権限はありますか?
0393nobodyさん2009/01/16(金) 00:01:11ID:7rtqusgx
>>392
どうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした

そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ
03943892009/01/16(金) 02:58:12ID:???
原因がわかりました! .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
という組み合わせは実用不可能というお話でした
0395nobodyさん2009/01/16(金) 06:34:07ID:???
>>394
ttp://www.phppro.jp/phpmanual/smarty/language.function.literal.html
0396nobodyさん2009/01/16(金) 14:02:35ID:???
デリミタの変更はSmarty最初の課題。
0397nobodyさん2009/01/16(金) 23:45:16ID:???
CSSは外部でいいやって思ってたけどこういう場合もあるんだな。
Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。
0398nobodyさん2009/01/19(月) 11:16:42ID:RBlPIEnm
通常のHP案件でSmartyを常用していたのですが、
みんクエのようなRPGタイプのブラウザゲームを制作予定です。
常に値が変動して最新の情報を表示しないといけないケースで、
Smartyを使用するのはナンセンスでしょうか?
0399nobodyさん2009/01/19(月) 11:19:59ID:???
ケースバイケース
0400nobodyさん2009/01/19(月) 15:19:03ID:???
cache切っても充分使えるしな。
重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・
0401nobodyさん2009/01/20(火) 18:40:01ID:???
PHP側で連想配列のキーにピリオドを含む使った

$foo['bar.baz']='hoge';

のような変数をSmarty側にassignした場合、
テンプレ側ではどういう表現をすればアクセスできるの?

{$foo[bar.baz]}

はだめだったんだけど、何か他の表現方法あるのかな?
0402nobodyさん2009/01/20(火) 20:16:27ID:???
つマニュアル
0403nobodyさん2009/02/03(火) 21:30:12ID:???
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"}}
0404nobodyさん2009/02/03(火) 21:32:58ID:???
なんで二重括弧なの?
0405nobodyさん2009/02/03(火) 21:41:22ID:???
>>404

Smarty.class.phpを継承したクラスも使ってるので、本家との差別化のためです。

継承したほうは
$this->left_delimiter = '{{';
$this->right_delimiter = '}}';
を設定してあるので大丈夫だと思うんですけども。

ちなみに括弧ひとつにしても同じエラー出ます。
04064032009/02/03(火) 21:51:04ID:???
環境書き忘れました

CentOS 5.2 Kernel 2.6x
PHP 5.1.6

preg_matchでSmartyのタグ探して処理させてるから
タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。
0407nobodyさん2009/02/03(火) 21:53:11ID:???
試してみたいから再現できるコード出してくれ
04084032009/02/03(火) 22:23:57ID:???
<?php

require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください

$a = 'test';
$mysmarty->assign('test', $test);
$mysmarty->display('test.tpl');

?>

-----------------------------------------

{{$test}}

###こんな単純なコードさえエラー出ます###
04094032009/02/03(火) 22:24:52ID:???
間違えました^^;

<?php

require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください

$a = 'test';
$mysmarty->assign('test', $a);
$mysmarty->display('test.tpl');

?>
0410nobodyさん2009/02/04(水) 01:57:17ID:???
当然ながら私の環境では再現しません
04114032009/02/04(水) 19:44:57ID:???
既にSmartyが実働してるサーバからSmarty関連のファイルを引っ張ってきて
インストールしたら正常に動きました。
公式の最新バージョンはバグ有りなんですかね?
何はともあれ、お騒がせしました。
0412nobodyさん2009/02/04(水) 22:30:27ID:???
自分の環境で試してくれる回答者放置とか最悪な質問者だな
04134032009/02/05(木) 07:13:36ID:???
大変失礼しました。
わざわざ確認していただき、ありがとうございます。
お礼?になるか分かりませんが、問題のあった方のSmartyをアップしておきます。
libsの中身を入れ替えるだけで多分再現できると思います。

ttp://www1.axfc.net/uploader/File/so/18050
0414nobodyさん2009/02/05(木) 08:52:10ID:???
問題のあったファイルがお礼とかw
0415nobodyさん2009/03/03(火) 15:33:16ID:???
値がある場合はstring_formatの%0.1,なかった場合は にしたいんだけど
{var|default:' '|string_format:'%0.1'}
だと値が無い場合には全て0.0になってしまうし、
{var|string_format:'%0.1'|default:' '}
だと値が無い場合にnoticeが出てしまって両立できないんだけど、
どうしたらいいかな?
0416nobodyさん2009/03/03(火) 15:34:02ID:???
フォーマットのf抜けてた
0417nobodyさん2009/03/05(木) 19:41:11ID:???
CakePHP1.2にSmartyView入れて使い始めてみたんだけど
$form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま?

{$form->create('Modelhoge', array('action'=>'Actionhoge'))}

モデルだけ指定すると出力されるんだが、、
0418nobodyさん2009/03/06(金) 03:16:30ID:???
>415
register_modifier 使って関数自作すればいいんじゃない?
0419nobodyさん2009/03/12(木) 20:22:12ID:???
昨日テンプレートエンジンというものを知って調べたが、こんなもん速度と品質犠牲に使う本気で奴バカすぎ。ヒアドキュメントで十分すぎ。
0420nobodyさん2009/03/13(金) 10:39:43ID:???
そうだよ?
0421nobodyさん2009/03/13(金) 10:48:04ID:???
PHP自体がテンプレートエンジンであり
速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを
419は知らないのだった
0422nobodyさん2009/03/13(金) 11:05:13ID:???
Smartyってめっちゃ便利やな!
PHP案件は全部これ使って開発してるぁるょ!
0423smarty初心者2009/03/16(月) 14:02:13ID:UpVqDdxv
Fatal error: Call to a member function assign() on a non-object in・・・*.php on line 32
というエラーがでるのですが、どういう意味なのでしょうか?
教えてください。
0424nobodyさん2009/03/16(月) 15:28:49ID:???
>>423
ggrks
0425nobodyさん2009/03/16(月) 17:22:30ID:???
変数名が違うんだろ
0426nobodyさん2009/03/19(木) 02:15:19ID:???
そのレベルだとSmartyどころかphp初心者だろ……
0427nobodyさん2009/04/12(日) 10:19:11ID:tJ4UxLsE
ヤッターマン公式サイトはSmartyを使っているようだ。
http://www.ytv.co.jp/yatterman/
0428nobodyさん2009/04/22(水) 01:10:23ID:rBHnGmhI
Smartyのファイル名が
「%%45^45E^45E480CD%%index.tpl.php」

と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか?
%%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。
しかし、それ以外の数字と記号の意味がわかりません。
0429nobodyさん2009/04/22(水) 01:44:07ID:???
Smarty::_parse_resource_nameに書いてある
0430nobodyさん2009/04/23(木) 02:53:59ID:ai/dLDOC
あいまい検索みたいな事って出来るのでしょうか?

例えば、test_file.phpというファイル名のファイルがあったとして
testで検索してもそのファイルがヒットするようにしたいのです。

opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、
preg_matchなどの正規表現でファイル名を調べる方法もありますが、
もう少し短い手順で、簡単に調べられる方法はないでしょうか?
0431nobodyさん2009/04/23(木) 02:55:05ID:???
430です。すみません、誤爆です・・。質問スレに書きます。
0432nobodyさん2009/05/03(日) 08:41:04ID:???
template_cの中身を見たら
こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php
0433nobodyさん2009/05/03(日) 12:28:14ID:???
コンパイル後のテンプレートファイル
0434nobodyさん2009/05/03(日) 14:56:11ID:???
なるほど
消しても問題なさそうですね?
ありがとうございます
0435nobodyさん2009/05/03(日) 17:01:11ID:???
( ゚д゚)ポカーン
0436nobodyさん2009/05/04(月) 18:34:03ID:bGJWbWfu
MTでPHPを使う部分にSmartyを使っているみたいなのですが、
MTのテンプレートを見ると <mt: >な独自タグを使っています。
Smartyで独自タグって定義できるのでしょうか?
0437nobodyさん2009/05/05(火) 03:15:12ID:???
>>436
できる(`・ω・´)
0438nobodyさん2009/05/05(火) 21:30:24ID:???
HTMLファイルだって定義するぐらいはできるんだぜ
0439nobodyさん2009/05/06(水) 01:41:19ID:T5mYjMeP
>>437-438
どこの設定を変更したら出来るのですか?
0440nobodyさん2009/05/06(水) 07:14:42ID:???
>>439
断る(`・ω・´)
0441nobodyさん2009/05/09(土) 23:09:48ID:???
www.smarty.netにつながらないんだけど俺だけ?
0442nobodyさん2009/05/10(日) 20:05:32ID:???
>>441
落ちてるね。こういうサイトはミラーが必要だとおもいまする。
0443nobodyさん2009/05/12(火) 01:20:58ID:???
一生落ちてればいいと思う。
0444nobodyさん2009/05/13(水) 11:19:30ID:Q3CLDrVp
{insert}
で指定する関数名に
クラスのメソッドを指定する方法はありませんか?
0445nobodyさん2009/05/13(水) 13:46:20ID:???
クラスのメソッドを指定できる関数をつくればいいんじゃあ
0446nobodyさん2009/05/13(水) 21:18:42ID:???
初心者で悪いんだが

--Hoge.php--------

class Hoge {
  var piyo;

  function Hoge() {
    $this->piyo = $_POST['some'];

    require_once 'view.tpl';
  }
}

--view.tpl---------

<p><?php echo $this->piyo; ?></p>


テンプレートとしての機能ってこれじゃ駄目なの?
0447nobodyさん2009/05/13(水) 21:46:03ID:???
>>446
こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要
0448nobodyさん2009/05/14(木) 00:07:02ID:???
>>447

イミフ
0449nobodyさん2009/05/14(木) 02:00:08ID:???
POSTで送られたデータを無加工で出力するなって事だ
そりゃそうと、普通にメソッドコール出来たと思ったけど
0450nobodyさん2009/05/14(木) 03:34:09ID:???
>>446
それでも問題無い場合もあるよ。
ケースバイケース。

複数人(特に外注)を使う場合は、記述方法の統一されたテンプレートエンジンをオススメだけどね・・・
PHPをテンプレートエンジンとして使う=テンプレートを扱う人にシステム全権限を与える。

善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。
0451nobodyさん2009/05/14(木) 03:40:17ID:???
>>450
>>447
04524462009/05/14(木) 14:32:58ID:???
>>447
ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?


>>450
とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。
0453nobodyさん2009/05/14(木) 14:45:29ID:???
Smartyならデフォルトで適用するフィルターを設置出来る
escapeを入れたら今回記述されたテンプレートでもちょっと安心

とりあえず、OpenPNEはやってた
興味があればソース眺めると良いかと
0454nobodyさん2009/05/14(木) 17:49:28ID:A4v4Hdy/
>>453
質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?

見れるんなら見たいんですけど。
0455nobodyさん2009/05/14(木) 18:51:12ID:???
HTMLソースじゃないぞ
0456nobodyさん2009/05/14(木) 20:10:22ID:???
>455
smartyでいうところのコンパイルされていないファイルって、見れるんですか?
だとしたら他人事ではないんですけど。
0457nobodyさん2009/05/14(木) 21:02:38ID:???
> それがsmarty経由でつくられてるもの

> それ
ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど
0458nobodyさん2009/05/14(木) 21:26:13ID:???
>457
あ、そういうことでしたか。
そして、ダウンロードもしてみました。
他の人がつくったsmartyのテンプレートファイル初めてみた。
勉強になるな〜
0459nobodyさん2009/05/14(木) 21:49:19ID:???
どんな風に勉強になった?
0460nobodyさん2009/05/14(木) 23:02:27ID:???
({ をデリミタタグとして使っているところとかです。
0461nobodyさん2009/05/16(土) 17:50:14ID:???
MTもSmarty使っているから、参考になると思うよ。

ただ、OpenPNEの方がわかりやすいね。
なんか日本人的な書き方のような気がする
0462nobodyさん2009/05/22(金) 09:35:19ID:???
Smartyの順序って
「PHPが苦手だからSmartyを使おう」
それとも
「PHPができるからSmartyでさらに上を目指そう」
のどっちなんですか?

わかる人からするとアホな質問かもしれませんが、
PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。
0463nobodyさん2009/05/22(金) 10:07:23ID:???
SmartyはPHPの単なるライブラリだよ・・・?
0464nobodyさん2009/05/22(金) 10:22:59ID:???
Smartyの用途はスレの上のほうで話題になってるじゃん
苦手だからとか上を目指そうとかそういう観点ではなく
04654622009/05/22(金) 11:11:41ID:???
>463,464
ご返答ありがとうございます。

スレも1から全部読みました。
そして、ここ数日ネットで調べまくったんですが、
どこも書いてあることは「デザインとプログラムを分離できるもの」ということで、
頭が悪すぎるのか、結局「smartyが何をしている」というのがわからずじまいでした。
そこで、書き込んでみたのです。

要は「工具セット」ってことですかね。
上の方で延々と行われた議論は
「使う工具(smartyの機能)なんか自分で作ればいい」派と
「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。
0466nobodyさん2009/05/22(金) 11:43:37ID:???
smarty使ってMVCのviewを強化したい派(利便性高・コスト高)と
php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな
04674622009/05/22(金) 17:49:33ID:???
>>466

!('A')あ〜
なんか少々モヤモヤが晴れてきました。
引き続き勉強します。
0468nobodyさん2009/05/23(土) 20:37:34ID:???
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;

今日一日中ググりまくっているんですが、どうしてもわかりません。
どなたかお助けください。おねがいします。
04694682009/05/23(土) 20:42:52ID:???
phpファイルだけがSJISになってました!
ほんとサーセンでした!!!
0470nobodyさん2009/05/23(土) 21:22:40ID:???
「こんにちは、文字化け!」
はワラタ
0471nobodyさん2009/05/23(土) 21:30:08ID:???
smartyのテンプレートに$hogeという配列が空じゃない場合の条件分岐処理を書きたいんですけど、
この書き方はおかしいのでしょうか

{if $hoge!==""}text{/if}

たまにif文が動かないのでおかしいと思うのですが
0472nobodyさん2009/05/23(土) 22:28:46ID:???
smarty文法のばあい
===はあるけど!==はないんじゃないか?
マニュアルに記載されてないし

!($hoge==="")
に差し替えてみよう
0473nobodyさん2009/05/23(土) 23:15:34ID:???
is_array() とかつかえなかったっけ?
0474nobodyさん2009/05/25(月) 00:05:06ID:???
>>472
>>473

どちらも動作しました
ありがとうございます
0475nobodyさん2009/06/30(火) 18:33:31ID:Cv5BCTzF
既存のソースをフレームワークを使って書き直したいんだけど、smartyは他のフレームワークと比べて
何か利点はありますか?それとも他のフレームワークを使った方がよいですか?

フレームワークを使い比べたことがある方、教えてください。
0476nobodyさん2009/06/30(火) 21:29:17ID:???
フレームワークはMVC+αを担当するものとした場合、
SmartyはVのみを担当するテンプレートエンジンでしかない。

・既存のソース+Smarty
・他のフレームワーク+Smarty

という使い方が一般的です。
04774752009/07/01(水) 02:15:48ID:FWyhhBD1
>>476

簡単ながら簡潔な意見だと思います。ありがとうございます。
0478nobodyさん2009/07/01(水) 18:56:06ID:???
どういたまして。
0479nobodyさん2009/07/06(月) 17:48:50ID:???
Smartyも大きく言えば、関数ライブラリだからな。
HTML内にPHPコードを書いているのと変わらない。
(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

でも、プログラマー以外がテンプレートを操作する環境なら凄い便利
0480nobodyさん2009/07/06(月) 17:53:06ID:???
小さく言うと何?
0481nobodyさん2009/07/07(火) 00:33:01ID:???
smarty乙php乙時代はC++俺はHTMLホームページビルダー
0482nobodyさん2009/07/07(火) 03:43:16ID:???
<small>関数ライブラリ</small>

大事なことなので小さく言いました。
0483nobodyさん2009/07/07(火) 04:18:14ID:???
>HTML内にPHPコードを書いているのと変わらない。

PHPコードを書かせない(制限する)為に、Smartyがあるわけだが。

>(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

内部的にPHPに変換及びキャッシュを行うから、きっちり設定をすればパフォ的には気にとめる程じゃ無くね?
システム規模によるだろうけど、大抵は処理全体の1割未満のリソースしか食わんよ。

上手に導入出来れば開発が相当楽になるので、結果的にコストパフォーマンスは上がるしさ。


一度Smartyの設計思想を読む事をおすすめ。
0484nobodyさん2009/07/07(火) 16:14:30ID:???
>>483
いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。

あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。
0485nobodyさん2009/07/08(水) 01:44:36ID:???
MVCでの開発経験があれば、Smartyが難しいと感じる事は無いと思う。
最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。
0486nobodyさん2009/07/08(水) 02:16:30ID:???
どの程度までCとVを分離すればいいの?
0487nobodyさん2009/07/08(水) 05:06:10ID:???
ご自由に
0488nobodyさん2009/07/08(水) 09:25:14ID:???
(1)
if ($nantoka) {
$str="yes";
} else {
$str="no";
}

result:{$str}

(2)
result:{if $nantoka}yes{else}no{/if}
04891962009/07/08(水) 09:25:17ID:???
Smarty信者はMVCフレームワークとテンプレートエンジンの区別もつかんのか
0490nobodyさん2009/07/08(水) 09:30:04ID:???
>>476で回答済の話をなぜ蒸し返す
0491nobodyさん2009/07/08(水) 10:06:46ID:???
>>487
もっと詳しく
0492nobodyさん2009/07/08(水) 12:47:51ID:???
ココでMVCの話はお門違いだけど、一寸だけ口挟む。

> どの程度までCとVを分離すればいいの?

普通、MとCを何処まで分離すればイイの?という質問が多いと思う。
" CとV "と言ってしまう時点で、MVCがまるで判っていない印象。

MVCの中心にあるのは、C(コントローラ)
何故 C かと言えば、Webアプリのエントリーポイント(プログラムの着火点)は、アドレスであると考えたから。
どんな処理でも、まずそのスクリプトにブラウザでアクセスしないと何も起こらないという事実から、エントリーポイントをアドレスと考えた。

次に、このアドレスの扱いを拡張しようと考えた。

スクリプト名 / メソッド名 / 引数 ... って感じで、アドレスから処理を操ろうとした訳だ。

この時、上記の記述を実際の処理に落とし込むのが、C(コントローラ)の役割。
C は、受け取ったアドレスから、処理の出力先を M(モデル)にするか、V(ビュー)にするか判断するだけ...

ここから、Cは只単に処理を振り分けるだけと考えれば、おのずとMVCそれぞれの割り振りも判ってくるハズ


0493nobodyさん2009/07/08(水) 12:53:19ID:???
>>492
じゃMとVはどう仕事を割り振ればいいの?
0494nobodyさん2009/07/08(水) 12:59:50ID:???
M(モデル):サーバ処理専用。主にDBがらみの処理
V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る
0495nobodyさん2009/07/08(水) 13:11:42ID:???
でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
0496nobodyさん2009/07/08(水) 13:53:41ID:???
MVCにとらわれすぎると、逆に可読性下げるからなぁ…
目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね?

使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。
0497nobodyさん2009/07/09(木) 12:40:59ID:???
>>495
> でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?

MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!
0498nobodyさん2009/07/09(木) 12:46:29ID:???
>>496

確かに可読性は下がる。また、RoRが過ぎるとフレームワークのブラックボックス化が著しくなり、
背後でどんな処理がなされているのか、まるで判らなくなる。

当然、カスタマイズしにくい...
0499nobodyさん2009/07/10(金) 17:05:35ID:???
MVCを意識する・理解するというのは大事だと思うんだが、
どうやってその理解を深める勉強をするの?
結局、自分でソースを書いて、良いか悪いか判断するしかないよね?

俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、
それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。
なら、それで良いのではないか?と思うんだけど、後で困るのだろうか
0500nobodyさん2009/07/10(金) 17:06:18ID:???
お前は何を言ってるんだ
0501nobodyさん2009/07/10(金) 17:19:26ID:???
「そこまでこだわるべきなのか」 ←言いたいこと
「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問
0502nobodyさん2009/07/10(金) 17:21:09ID:???
>>499
>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。

例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?

って話。
0503nobodyさん2009/07/10(金) 18:13:16ID:aQw5S2vU
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。
0504nobodyさん2009/07/10(金) 18:17:06ID:???
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ?
503さん、まじパねぇっす!
0505nobodyさん2009/07/10(金) 19:29:24ID:???
503さんはエスパーなんです!
0506nobodyさん2009/07/17(金) 01:42:54ID:???
>>494
サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな
0507nobodyさん2009/07/17(金) 12:08:33ID:???
>>506
入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。
0508nobodyさん2009/07/17(金) 12:24:47ID:???
>>506

大丈夫か?
頭打ったろ!

ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ
0509nobodyさん2009/07/17(金) 19:58:03ID:???
自分の頭に無い解釈=不正解

だというプログラマーが多すぎです
0510nobodyさん2009/07/20(月) 22:58:34ID:KgRJffi+
勘違いしていたかも知れないんだけど、Smarty自体がMVCフレームワークだよね?
Modelは関数の処理で
Viewの部分がdisplayやfetchでテンプレ表示で
Controllerが最初のクラス実行で

自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた
0511nobodyさん2009/07/20(月) 23:16:35ID:???
それSmatyじゃなくて
PHP+Smartyじゃん
0512nobodyさん2009/07/20(月) 23:28:34ID:???
まあ、あながち間違ってはいないがな。
0513nobodyさん2009/07/21(火) 10:38:01ID:???
いや、間違ってるだろw
その理論だと世の中全てのPHPコードがMVC実装されてる事になる。
0514nobodyさん2009/07/21(火) 10:47:00ID:???
いや、それは「PHPでMVCを書いた」って事で
Smartyみたいに元から実装されている分けじゃないんでは?
0515nobodyさん2009/07/22(水) 00:47:18ID:???
Smartyhajimemasita
0516nobodyさん2009/07/22(水) 08:22:08ID:???
Hello! Smarty
0517nobodyさん2009/07/24(金) 20:52:45ID:kF0trrBu
で、お前らキャッシュ機能って使ってる?
0518nobodyさん2009/07/24(金) 22:28:00ID:???
キャッシュって使うもんなの?
Smartyだと使わされるもんだと思ってたよ。
0519nobodyさん2009/07/24(金) 22:42:57ID:???
>>518
コンパイル済みテンプレートとキャッシュを混同してるだろw


俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。
0520nobodyさん2009/07/25(土) 00:10:16ID:???
>>519
批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?
0521nobodyさん2009/07/25(土) 01:34:19ID:???
キャッシュ使うとテンプレートの更新が反映されないんだが
更新したらキャッシュ切らないとだめなの?
05225192009/07/25(土) 05:09:32ID:???
>>520
Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。

519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。

DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。
0523nobodyさん2009/07/25(土) 11:35:37ID:???
>>521
テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな
0524nobodyさん2009/07/26(日) 02:40:29ID:???
>>523
ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?

俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!
0525nobodyさん2009/07/26(日) 03:26:35ID:???
じゃDBデータがあるサイトの場合は
その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?
0526nobodyさん2009/07/26(日) 04:04:17ID:???
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、
毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。

コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。
0527nobodyさん2009/07/27(月) 11:12:36ID:???
テンプレート自体をDBに格納してるって話じゃないの?
0528nobodyさん2009/07/27(月) 11:30:56ID:???
え?
0529nobodyさん2009/07/27(月) 12:48:51ID:???
へ?
0530nobodyさん2009/07/27(月) 17:40:06ID:???
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。

上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?
0531nobodyさん2009/07/27(月) 22:41:03ID:???
え?
0532nobodyさん2009/07/28(火) 10:37:13ID:???
テンプレートってDBとかに格納しておけるの?
できるならすごい便利なんだが
0533nobodyさん2009/07/28(火) 14:22:43ID:???
>>532
できなくはないでしょ
0534nobodyさん2009/07/28(火) 15:09:38ID:???
>>532
Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。
0535nobodyさん2009/07/28(火) 16:09:45ID:???
できなくないのは分かるけど
いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?
0536nobodyさん2009/07/28(火) 17:56:09ID:???
>>535
updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね
0537nobodyさん2009/07/28(火) 20:41:09ID:???
>>535
CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。


制作の手間暇考えたら、メリットは薄いと思うけど。
0538nobodyさん2009/07/29(水) 22:00:38ID:???
>>535
ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。
0539nobodyさん2009/07/30(木) 00:20:18ID:???
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…
0540nobodyさん2009/07/30(木) 12:07:42ID:???
>>539
DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。
0541nobodyさん2009/07/30(木) 12:13:33ID:???
少し腐ったぐらいが美味しい...
0542nobodyさん2009/07/30(木) 12:16:56ID:???
ファイルは数が増えるとどんどん大変になるんだよな
0543nobodyさん2009/07/30(木) 16:35:27ID:???
システム作る側は楽かもね。

デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。
0544nobodyさん2009/07/30(木) 16:40:57ID:???
ディレクトリ分けもせずに700個のHTMLと格闘してる奴を見てるとホント馬鹿だと思えてくる
0545nobodyさん2009/07/30(木) 17:12:18ID:???
そんな奴いねーよw
0546nobodyさん2009/07/30(木) 18:40:48ID:???
700個のHTMLって時点でテンプレートを活かしてない感じが…
0547nobodyさん2009/07/30(木) 18:50:56ID:???
テンプレどころかCSSすら使ってないんですわ、マジで。
0548nobodyさん2009/07/30(木) 18:58:17ID:???
でも場末のウェブ制作屋ってほんとひどいからね。
ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。
0549nobodyさん2009/07/30(木) 21:03:15ID:???
>>543
流し込み作業をプログラムですれば良いだけだろ
一括アップロードと変わらん
0550nobodyさん2009/07/30(木) 22:46:24ID:???
>>549
それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。
0551nobodyさん2009/07/30(木) 23:54:04ID:???
というかDBなんてある意味ファイル管理をラップしたようなもんだから
DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。

そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。
0552nobodyさん2009/07/31(金) 00:03:20ID:???
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ
0553nobodyさん2009/07/31(金) 01:55:56ID:???
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか?


って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど
0554nobodyさん2009/07/31(金) 02:04:43ID:???
>>552
制作、運用、実行コスト、全てが大きく変わるわw

検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。
0555nobodyさん2009/07/31(金) 02:43:31ID:???
ナンセンスってほどでも無いっしょ
ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし
0556nobodyさん2009/07/31(金) 03:11:10ID:???
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは
DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない

むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック
0557nobodyさん2009/07/31(金) 03:49:06ID:???
>>555
だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。

>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。
0558nobodyさん2009/07/31(金) 04:25:59ID:???
>>557
ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ
0559nobodyさん2009/07/31(金) 04:42:31ID:???
>>558
FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。

 ・DBコネクション等の負荷が無い
 ・当然PHP側のコードもシンプル
 ・SVN等のバージョン管理システムが使える
 ・使い慣れたエディタで直接編集が可能
 ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
 ・当然複雑な管理画面も不要になる為実装コストは激減

これらはFSなら特別な実装は不要。
君はDBで実装出来るか?

検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。

逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。
0560nobodyさん2009/07/31(金) 05:22:21ID:???
定量的の意味知ってるか?
0561nobodyさん2009/07/31(金) 05:56:21ID:???
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。
0562nobodyさん2009/07/31(金) 10:54:30ID:???
まぁ、喧嘩するなや。
第三者からみたら、有益な討論してるように感じるんだから。
0563nobodyさん2009/07/31(金) 11:13:51ID:???
>>561
低学歴乙
0564nobodyさん2009/07/31(金) 11:35:24ID:???
>>562
有益かはともかくSmartyの議論ではなさそうだな。
0565nobodyさん2009/07/31(金) 12:20:19ID:???
>>564
Smartyの使い方に関する議論だろ
0566nobodyさん2009/07/31(金) 15:05:22ID:???
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ
0567nobodyさん2009/07/31(金) 16:10:10ID:???
逆だと思うが。PHPを使えるプログラマー用の技術だろ。
0568nobodyさん2009/07/31(金) 18:56:10ID:???
>>563
答えられない質問には煽る…典型的な厨ですね。

定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。
0569nobodyさん2009/07/31(金) 19:46:53ID:???
>>568
俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた


> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない

> ・当然PHP側のコードもシンプル
プラグインで済むから同じ

> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ

> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと

> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで

> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん

> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分


テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。
0570nobodyさん2009/07/31(金) 19:49:07ID:???
ファイル操作用のPHPコードと
DB操作用のSQLでは、後者の方が自由度高いと思うけどな
0571nobodyさん2009/07/31(金) 20:49:32ID:???
>>568
煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?
0572nobodyさん2009/07/31(金) 20:58:48ID:???
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか
0573nobodyさん2009/07/31(金) 21:21:59ID:???
>>571
「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?
0574nobodyさん2009/07/31(金) 23:21:12ID:???
>>569
> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。

> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。

> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。

> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?

> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?

> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。

> phpMyAdminで十分
上に同じ。

> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。

>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。
0575nobodyさん2009/08/01(土) 01:20:41ID:???
だから、いちいち煽り入れるなって
お前がせっかく書いたレスも陳腐な物になるぞ
0576nobodyさん2009/08/01(土) 23:36:43ID:???
>>571はどこいっちゃったの?
0577nobodyさん2009/08/02(日) 01:41:46ID:???
お前がいい加減にしろ
0578nobodyさん2009/08/02(日) 01:48:38ID:???
>>571はどこいっちゃったの?
0579nobodyさん2009/08/02(日) 03:05:41ID:???
まぁ普通はDBを使うメリットなんて無いって事さ
DB憶えたての頃は俺も無闇にDB化したがったものだ
0580nobodyさん2009/08/03(月) 01:13:56ID:???
じゃ、大手ポータルサイト(ブログとか)って
テンプレートをDBに入れずにファイルで読み書きしてるのかな?
0581nobodyさん2009/08/03(月) 03:29:39ID:???
そんな極少数の大規模案件を例えに出されてもなぁ・・・
使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)

要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。
0582nobodyさん2009/08/03(月) 09:46:29ID:???
>>581
DB使うメリットないとか言っといて
結局要件しだいかよw
0583nobodyさん2009/08/03(月) 10:57:19ID:???
>>581
つまり、結局は「DB化した方が遥かに楽」なケースが”ある”ということですね
0584nobodyさん2009/08/03(月) 17:52:34ID:???
>>582-583
最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw

揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。
0585nobodyさん2009/08/03(月) 18:04:36ID:???
っていうか大手CMSサイトってPHP+Smartyなの?その時点でその話は破綻している。
0586nobodyさん2009/08/03(月) 18:24:53ID:???


どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。
0587nobodyさん2009/08/03(月) 18:59:14ID:???
平行線にすらなっていない。
DB厨がファビョっているだけだ。
0588nobodyさん2009/08/03(月) 20:12:30ID:???
ファビョってるのはむしろお前だろ?1人で戦っているつもりだろうがw
0589nobodyさん2009/08/03(月) 21:44:15ID:???
いちいち煽りに反応しなくていいからw 

とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?

(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!
0590nobodyさん2009/08/03(月) 22:23:10ID:???
「要件次第でDB使う」でみんな納得。
丸く納まってよかった。
0591nobodyさん2009/08/03(月) 22:34:30ID:???
以下Smarty3を語るスレになりました。
開発ペース遅すぎるよね。
0592nobodyさん2009/08/04(火) 00:10:08ID:???
htmltemplate.php で十分だしー
0593nobodyさん2009/08/04(火) 00:13:10ID:???
>>590
すまんけどどういう要件ならDB、FSを使うべきかまとめてくれないか?
0594nobodyさん2009/08/04(火) 01:04:56ID:???
>>593
大規模案件ならDB でいいんじゃないか。
0595nobodyさん2009/08/04(火) 01:51:48ID:???
>>593
基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。
0596nobodyさん2009/08/04(火) 02:01:18ID:???
すまん
結局>>581が結論でいいんじゃないかと言いたかった。
0597nobodyさん2009/08/04(火) 09:05:44ID:???
OK
0598nobodyさん2009/08/04(火) 11:09:38ID:???
>>591
ぜひ参画してくださいよ
0599nobodyさん2009/08/04(火) 11:24:56ID:???
大規模案件にはJAVAという逆説。
0600nobodyさん2009/08/10(月) 18:05:18ID:euq/7Zv+
すみません、質問です
テンプレートファイル内で、{php}〜{/php}って形で、phpのプログラムを実行出来ますが、
この「〜」の部分で、assignされた変数を操作することは出来ないでしょうか

{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}

私の名前は{$name}です

こんな感じで…
よろしくお願いします。
0601nobodyさん2009/08/10(月) 18:19:27ID:???
そのロジックはテンプレートじゃなくて、呼び出し元に書くべきでは・・・

やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc
0602nobodyさん2009/08/10(月) 18:26:43ID:euq/7Zv+
>>601
ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ
0603nobodyさん2009/08/10(月) 18:35:23ID:???
>>602
もしかしてこんな感じで解決しない?

if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);
0604nobodyさん2009/08/10(月) 18:43:35ID:euq/7Zv+
>>603
ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!
0605nobodyさん2009/08/10(月) 19:16:08ID:???
>>604
条件分岐やるとassignが増えるってどういうこと?
配列をそのまま使えば?
0606nobodyさん2009/08/10(月) 19:21:31ID:???
>テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw

アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。
0607nobodyさん2009/08/10(月) 19:38:15ID:???
>>605
例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…

でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。
0608nobodyさん2009/08/10(月) 20:32:12ID:???
>>607
if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";

って書いて、$ary変数だけassignすればいいんじゃない?


その程度の表示分岐処理なら、テンプレート側でもOKかと思う。

{$ary.faxNum|default:"-"}

でいけない?
0609nobodyさん2009/08/10(月) 20:50:18ID:???
値未入力であることを示すのに、何を表示するのかはview側の仕様だわな。

ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。
0610nobodyさん2009/08/10(月) 22:51:30ID:???
>>608-609
うーん、そうか。
ケースバイケースでどうやるべきかじっくり考えてやってみるね
ありがとう
0611nobodyさん2009/08/10(月) 23:13:31ID:???
度々申し訳ない
{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…
0612nobodyさん2009/08/10(月) 23:15:44ID:???
assignでなんでだめなの?
0613nobodyさん2009/08/10(月) 23:42:39ID:???
>>612
assignはphp側の処理ですよね、テンプレ側で値を割り当てたいので。。
0614nobodyさん2009/08/11(火) 01:09:27ID:???
{assign} タグ使えば?
0615nobodyさん2009/08/11(火) 03:32:24ID:???
>>614
ありがとう! こんなのがあったのか。助かりました!
0616nobodyさん2009/08/11(火) 03:33:31ID:???
assignassign言うから当然テンプレート側のこと言ってると思ったら
assignタグすら知らんかったのか。
0617nobodyさん2009/08/11(火) 12:14:27ID:???
だからphpタグなんぞで処理したかったのか・・・。
0618nobodyさん2009/08/12(水) 05:56:44ID:???
$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が出力されます
0619nobodyさん2009/08/12(水) 06:23:13ID:???
varAryの中を見てみたら?
0620nobodyさん2009/08/12(水) 08:01:33ID:???
ループは回ってる?「名前は:」って文字は出力されてる?

{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}

で中身表示テストしてみ。
0621nobodyさん2009/08/12(水) 10:23:00ID: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);
0622nobodyさん2009/08/12(水) 10:32:56ID:???
>>621
Smarty側に正常にassign出来てない可能性大。

1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);

2. hogeAryがSmartyにassignされてるか確認。
0623nobodyさん2009/08/12(水) 11:18:13ID: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だけがうまくいかないってことかなー
0624nobodyさん2009/08/12(水) 11:41:14ID:???
619はシカトですかそうですか
0625nobodyさん2009/08/12(水) 12:16:00ID: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つだけです)

ほんとに済みませんでした
0626nobodyさん2009/08/12(水) 12:34:49ID:???
原因切り分けてみたら?
本当にDBから値は取れてるのか、違う関数コールしてないか、
ただの配列なら表示できるのか、などなど。
可能だったら再現するコードも貼って。
0627nobodyさん2009/08/12(水) 13:54:35ID:???
{debug} タグでassignされてる変数確認してみ。
0628nobodyさん2009/08/12(水) 17:19:17ID: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は諦めてこっちで極力対応したいです。
0629nobodyさん2009/08/13(木) 16:40:28ID:???
結局原因は何なの?
0630nobodyさん2009/08/21(金) 13:05:34ID:WhelcFIU
質問させてください。
テンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか?
これまでは、php中で
$hoge=$instance->method($hoge1,引数1,引数2);
として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。
{$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は
見つけられませんでした。無理なんでしょうか?
assign 前に実行すべき?
0631nobodyさん2009/08/21(金) 14:42:48ID:???
修飾子プラグインの中でメソッド呼べばよいのでは
0632nobodyさん2009/08/21(金) 18:37:07ID:???
>>631
どうもありがとうございます
修飾子プラグイン、知りませんでした! 勉強になります、ありがとう
0633nobodyさん2009/08/21(金) 22:16:33ID:???
プラグインの中で他のプラグインの機能を呼び出すことってできますか?
0634nobodyさん2009/08/21(金) 22:16:56ID:???
できるよ
0635nobodyさん2009/08/22(土) 00:43:33ID:qs0RE9DR
修飾子プラグインの勉強始めたんですが、引数を2つもたせる方法がわかりません。
{$num}というsmarty変数に対して、

function smarty_modifier_NUMtoTEXT($num,$aryName){
 return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。
0636nobodyさん2009/08/22(土) 00:59:28ID:???
>>635
http://www.smarty.net/manual/ja/language.modifiers.php
0637nobodyさん2009/08/22(土) 05:08:49ID:???
>>634
kwsk
0638nobodyさん2009/08/22(土) 12:26:11ID:???
>>637
ggrks
0639nobodyさん2009/08/22(土) 23:19:02ID:???
>>636
返事遅れました。うまくいきました、ありがとう
0640nobodyさん2009/08/25(火) 00:15:56ID:???
foreach だの sectionだのって、なんで素直にfor文用意してくれないんだろね
php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな
0641nobodyさん2009/08/25(火) 06:09:04ID:???
>>640
Smarty3で追加される
0642nobodyさん2009/08/25(火) 13:55:26ID:???
>>641
ほんとに? 情報ありがとう、気分が楽になったよw
そういう情報を仕入れる前向きさがないとイカンなぁ
0643nobodyさん2009/08/26(水) 12:19:29ID:???
キャッシュしてできたファイルの中にSmartyタグって入れられないよね?

検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">

として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。
0644nobodyさん2009/08/26(水) 13:37:23ID:???
>>643
insertタグで出来るんじゃね?

あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。
0645nobodyさん2009/08/26(水) 14:37:50ID:???
そのキーワード毎にキャッシュしたいのならば、それをキャッシュIDにすれば。
0646nobodyさん2009/08/26(水) 23:01:41ID:???
>>644-645
ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。

やっぱり、設計に問題あるかも・・。
0647nobodyさん2009/08/28(金) 14:54:05ID:45fY5t7E
サイドバーの質問が出てるので聞きます
dbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…

部分的にデザインパターンを読み込むなど、他の解決方法はないですか?
0648nobodyさん2009/08/28(金) 15:03:05ID:???
コントローラ側で制御すれば?
0649nobodyさん2009/08/28(金) 15:25:18ID:???
テンプレートを数パターン用意すれば?
0650nobodyさん2009/08/28(金) 16:29:28ID:45fY5t7E
>>648−648
そうですね、それがいいですね
ありがとうございました
0651nobodyさん2009/08/28(金) 16:30:15ID:45fY5t7E
>>648-649でした
ありがとう
0652nobodyさん2009/08/28(金) 17:53:20ID:MIAE9vSw
Smartyテンプレif文条件式で、自作のSmartyプラグイン関数を
呼び出すことはできないのでしょうか?

0653nobodyさん2009/08/28(金) 19:07:18ID:???
できるんじゃね?
0654nobodyさん2009/09/02(水) 05:34:35ID:55UeyG/q
{assign}の中で、修飾子プラグインをvalueにもたせることできますか?

{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。
0655nobodyさん2009/09/02(水) 09:19:59ID:???
タグがモロ出し の意味がわからない。
0656nobodyさん2009/09/02(水) 09:35:13ID:???
>>654
capture
0657nobodyさん2009/09/03(木) 08:24:48ID:???
>>655,656
ありがとうございました
0658nobodyさん2009/09/06(日) 21:25:22ID:???
負荷テストで調べたんだが、キャッシュって結構効いてるな
1000アクセスある場合を想定してテストしたんだが、
約10〜15%ほどページの読み込みが早かった
0659nobodyさん2009/09/07(月) 08:07:01ID:???
なにをいまさら・・
0660nobodyさん2009/09/07(月) 22:10:32ID:???
>>659
まあ、実感するのはなかなか難しいからな。
0661nobodyさん2009/09/07(月) 23:17:57ID:K7GASBY+
二次元配列を出力しようとすると、
Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
http://questionbox.jp.msn.com/qa4209668.html
http://pcmemorogu.blog14.fc2.com/blog-entry-20.html など

が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません
0662nobodyさん2009/09/07(月) 23:25:11ID:???
アウトプットフィルタにhtmlspecialcharsが指定されてるんじゃないの?

つか二次元配列を出力しなければならない例が思いつかないけど
0663nobodyさん2009/09/07(月) 23:49:42ID:K7GASBY+
>>662
ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。

if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました

お騒がせしました。ありがとうございました
0664nobodyさん2009/09/08(火) 00:19:32ID:???
modifier.escape.phpを修正する方が早いよ
0665nobodyさん2009/09/08(火) 00:25:48ID: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さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…
0666nobodyさん2009/09/08(火) 00:43:09ID:???
>>665
if (is_array($string)) return $string; 
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。

plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。
0667nobodyさん2009/09/08(火) 00:47:00ID:qSoCHGpf
>>666
詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。
0668nobodyさん2009/09/20(日) 18:33:32ID:???
だれか公式以外でsmartyダウンロードできるところ知らない?
クソ公式落ちまくっててDLできないんだけど
http://www.smarty.net/
だれかソースくらいは分散しとけって忠告してやれよ
0669nobodyさん2009/09/20(日) 18:55:26ID:???
落とせるじゃん
0670nobodyさん2009/09/20(日) 19:52:57ID:???
復旧した
0671nobodyさん2009/09/24(木) 18:00:24ID:???
初心者なのであまり良く分からないのですが、テンプレートエンジンはSmarty以外に別のテンプレートも同時使用出来るのでしょうか?
JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?

また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1〜数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?
0672nobodyさん2009/09/24(木) 18:07:40ID:???
まずテンプレート抜きでPHPを身に付けたほうがいいかと
0673nobodyさん2009/09/25(金) 14:31:20ID:???
SmartyってPHP習得した後にやろうとするとハッキリ言って困惑するよな
何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った

0674nobodyさん2009/09/25(金) 14:34:03ID:???
PHP習得した後にやらないでいつやるんだよ
0675nobodyさん2009/09/25(金) 15:24:47ID:???
誰もが通る道さ・・・
それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。
0676nobodyさん2009/09/25(金) 15:39:52ID:???
いや普通につくればphpのforeachもsmartyのforeachも必要だろ。
0677nobodyさん2009/09/25(金) 21:46:51ID:???
そういう事言ってるんじゃないだろ。
0678nobodyさん2009/09/25(金) 21:47:21ID:???
じゃどういうことよ
0679nobodyさん2009/09/25(金) 22:57:18ID:???
同じforeachでも書き方が違って、最初戸惑うってことだろ?
0680nobodyさん2009/09/25(金) 22:59:20ID:???
えっ
0681nobodyさん2009/09/25(金) 23:47:30ID:???
ちゅう
0682nobodyさん2009/09/26(土) 02:10:40ID:???
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:
0683nobodyさん2009/09/26(土) 04:04:41ID:???
早くなるのはいいな。でも、100%書き直したとなると、いろいろ仕様変わってるのかな。
0684nobodyさん2009/09/26(土) 09:50:48ID:???
100パー書き直したのと、仕様が変わるかどうかは直結しない話でしょう。
むしろ直結するのはバグ率。
0685nobodyさん2009/09/26(土) 15:22:15ID:???
3触ったけどまだ重くて使い物にならないよ。パーサがまともになったせいだろうけど、レンダリングがかなり遅い。
まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。
0686nobodyさん2009/09/28(月) 02:57:25ID:???
>>684
直結はしないがPHP周辺ではよくある話だな。
関数を修正してみたら引数の書き方が変わったでござるの巻
0687nobodyさん2009/09/28(月) 17:38:33ID:???
Smarty以外で他にいいテンプレートって何?
0688nobodyさん2009/09/28(月) 19:12:27ID:???
>>687
ttp://www.mimoi.com/product/53
0689nobodyさん2009/09/29(火) 19:25:53ID:???
一応技術板なんだしせめてこのぐらいは・・・
http://www.j-tsugawa.com/jt-020621-EB3101-G.jpg
0690nobodyさん2009/09/29(火) 19:36:34ID:???
プラスチックが乾いてて、持ち上げようとしただけで割れてしまいそうだ・・・
0691nobodyさん2009/10/01(木) 12:03:22ID:???
流れ図記号は全部○を使っているのは俺だけだろうか。
0692nobodyさん2009/10/01(木) 18:28:48ID:KASc2bqu
//PHP側
$list[0]["text"] = '{ImageBox file="test.jpg"}';

//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}

独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。

指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。
0693nobodyさん2009/10/01(木) 20:50:56ID:???
PHP側では展開されません。
0694nobodyさん2009/10/01(木) 21:02:54ID:???
そりゃ$list[0]["text"]の内容を書き出してるだけだからな。

phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。
06956922009/10/02(金) 00:20:33ID:???
>>694
foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。

プラグインで実装させるとか、難しそうだ・・・
0696nobodyさん2009/10/02(金) 00:35:40ID:???
そのImageBOXで出力されるものを$out_ImageBOXとか変数に入れ込んでおけば?
0697柏アラフォーパパン& ◆.d6LNJ2fbM.9 2009/10/02(金) 15:06:34ID:bCUcRsfE
dsd
0698nobodyさん2009/10/03(土) 17:55:56ID:???
文字列をテンプレート処理出来るメソッドでも作ればいいんじゃないかね。
$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');
0699nobodyさん2009/10/03(土) 17:57:12ID:???
$list[0]["text"] = 'test.jp';

{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}

じゃ駄目なのか?
0700nobodyさん2009/10/03(土) 18:51:58ID:???
よほど特殊な処理をさせたいのでなければ>>699に落ち着くと思う。
まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。
07016922009/10/04(日) 00:06:35ID:???
>>699-700
その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。

それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました
07026922009/10/04(日) 00:08:43ID:???
ちなみに以下のサイトを参考にしました。
ttp://d.hatena.ne.jp/lapis25/20080908/1220861488

>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。
0703nobodyさん2009/10/11(日) 13:15:33ID:gYB28ahJ
すみません、質問です
smartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?
0704nobodyさん2009/10/11(日) 14:25:24ID:???
{strip}{/strip}
で囲うべし。
0705nobodyさん2009/10/11(日) 15:23:00ID:???
>>704
かっこわるいです。次の方お願いします。
0706nobodyさん2009/10/11(日) 15:43:55ID:???
反論ではないけど、
おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。
0707nobodyさん2009/10/11(日) 16:11:57ID:???
意図した改行を入れたい場合はどうしてるん?
<textarea>の中身とか
0708nobodyさん2009/10/11(日) 17:59:26ID:???
>>704
おおー、そうだそれがありました
ありがとうございました

>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?
0709nobodyさん2009/10/11(日) 18:22:54ID:???
改行を残したい箇所を
逆にliteralで囲う。
0710nobodyさん2009/10/12(月) 00:52:20ID:???
JavaScriptとか、改行に意味を持つ言語が混在する可能性を考えると一括して{strip}するのは得策じゃない気がする。
0711nobodyさん2009/10/13(火) 01:13:00ID:???
>>703
そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>
0712nobodyさん2009/10/13(火) 23:52:48ID:B+0jNtpm
Smarty3期待アゲ
0713nobodyさん2009/10/14(水) 00:10:46ID:k/3ZY/k4
質問です。

↓の、アンパサンドって何の意味があるのでしょうか?

$smarty =& new Smarty;


0714nobodyさん2009/10/14(水) 00:27:06ID:???
参照代入
0715nobodyさん2009/10/14(水) 00:36:04ID:???
>>713
ないよ。

PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。
0716nobodyさん2009/10/14(水) 00:47:30ID:???
>>715
ほんとに? 俺も参照代入だよって説明どこかで読んだなぁ
あの解説ウソついたのかしら?
0717nobodyさん2009/10/14(水) 01:06:18ID:???
4なら意味あると思うが
0718nobodyさん2009/10/14(水) 01:30:24ID:???
>>715
つ ttp://jp2.php.net/manual/ja/language.oop.newref.php
どこでそんな嘘をきいたん?

ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)
0719nobodyさん2009/10/14(水) 03:14:45ID:???
ちょっとコード書いて実験すればわかるだろ
俺面倒だからパスね
0720nobodyさん2009/10/15(木) 18:15:01ID:???
みんなこんな曖昧なままに済ましてきたってことはあまり使ってない機能ってことかな
俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。
0721nobodyさん2009/10/16(金) 11:58:47ID:???
オブジェクトのリファレンスか。
使い道が思いつかんでもないが実際に
使う場面ってそうそうなさそうな。
0722nobodyさん2009/10/20(火) 06:10:16ID:???
Smarty 3だれか使ってみた??
0723nobodyさん2009/10/20(火) 10:43:32ID:???
使ってみた
0724nobodyさん2009/10/21(水) 00:53:52ID:???
Smarty3微妙だなぁ・・・相変わらず癖の強いコーディングで読むの疲れる。
extendリソースがあるんだけど、使い方解る人いる?
0725nobodyさん2009/10/21(水) 10:25:55ID:???
結局Smartyなんてassign、display、{if}、{foreach}だけで十分じゃん
というかコレが核だと思う
後は必要に応じて・・・って感じで十分だし
0726nobodyさん2009/10/21(水) 10:59:25ID:???
Smarty3のプラグインは何故グローバル関数なんだろ?
どこら変がPHP5 OOPなんだよ
0727nobodyさん2009/10/21(水) 22:34:20ID:???
プロパティもメソッドも全部publicは鬼だ
一方、__callでメソッドの外部化をしてる

extendリソースってどれ??
0728nobodyさん2009/10/22(木) 01:31:12ID:???
>>727
sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw

getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ
0729nobodyさん2009/10/22(木) 11:33:30ID:???
>>725
そんなこといったらPHPだって
0730nobodyさん2009/10/24(土) 20:08:39ID:???
smarty使ってるレンタルブログサイトとかないの?
0731nobodyさん2009/10/25(日) 04:49:32ID:???
>>730
あるとしてもユーザにSmartyフォーマットでのカスタマイズを許可するとは考えにくいな。
0732nobodyさん2009/10/25(日) 08:28:37ID:???
>>730
別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。
0733nobodyさん2009/10/27(火) 00:14:32ID:???
中身はsmartyだけど、smartyフォーマットは使わせないようにして
<%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない
大体は自前でやってるか、MovableTypeの改造版じゃないかな
0734nobodyさん2009/10/27(火) 12:20:20ID:???
>>725
それだけしか使わないならもっと速いテンプレートエンジンあるんじゃない?
0735nobodyさん2009/10/27(火) 12:23:42ID:???
>>734
それなんてPHP?
0736nobodyさん2009/10/27(火) 20:55:46ID:???
カラーミーショップ プロ
ttp://shop-pro.jp/

ブログじゃなくてネットショップだけど、テンプレートにsmarty使ってるね
EC CUBEの改造版なんだろうけど
0737nobodyさん2009/10/27(火) 21:04:25ID:???
Smartyでレンタルブログ運営したら重くてしかたないんじゃない?
ユーザー大量にいたらキャッシュ効かせても厳しい気がする
0738nobodyさん2009/10/28(水) 05:06:51ID:???
それは設計の問題であり、Smatyが原因にはなり得ない。
0739nobodyさん2009/10/28(水) 11:11:33ID:???
Smartyの設計の問題ってことですね
0740nobodyさん2009/10/28(水) 13:46:19ID:???
おしい。Smartyを使う人の設計の問題。
0741nobodyさん2009/10/28(水) 15:26:33ID:???
>>737
気のせい
0742nobodyさん2009/10/29(木) 11:06:44ID:???
いい話題がありませんねー
0743nobodyさん2009/10/29(木) 21:54:28ID:???
gooブログの有料版の説明のとこにこんな記述がある
{include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"}

パスにSmarty入ってますがな
0744nobodyさん2009/10/30(金) 22:56:36ID:???
実際にロジックとテンプレート合わせないとテンプレート側の文法の間違い分からないの?
0745nobodyさん2009/11/01(日) 07:20:38ID:ZF01kyEW
Smarty 3.0 Beta 1 Released
0746nobodyさん2009/11/01(日) 10:57:23ID:???
>>744
確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745
モノリンガルの俺には厳しいようだ
0747nobodyさん2009/11/01(日) 11:05:45ID:???
>>745
突撃してみるか
0748nobodyさん2009/11/09(月) 13:54:09ID:jgJG5jOb
テンプレートに定義していないコード(例えば{test}など)がある場合、
Smarty errorが表示されます。

このエラーを表示しない方法はないのでしょうか?
PHPのエラー表示をしない事で対処するしかないのでしょうか?
0749nobodyさん2009/11/09(月) 14:06:20ID:???
trigger_errorしてるところをスキップしちゃえば?
0750nobodyさん2009/11/09(月) 20:59:58ID:I33d9sv+
$error_reporting
↑これ?
0751nobodyさん2009/11/11(水) 19:01:43ID:0BFUpwQj
Smartyって、テンプレートの中にテンプレートを読み込むようなことできる?
ある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど
変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね

外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?
0752nobodyさん2009/11/12(木) 03:03:02ID:???
そのレベルも調べられないお前には無理だ。
0753nobodyさん2009/11/12(木) 07:44:56ID:dv0ticwo
Smarty 3.0 Beta 2 Released
0754nobodyさん2009/11/12(木) 11:31:04ID:???
>>752
おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね
0755nobodyさん2009/11/12(木) 12:04:54ID:???
test
07567542009/11/12(木) 19:22:51ID: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(){… とやってもダメだ。
何が問題かな? ご意見よろしくお願いします
0757nobodyさん2009/11/12(木) 19:58:44ID:???
書き間違えた
× smarty_hogeAction
○ insert_hogeAction
でやってます
07587562009/11/12(木) 22:52:47ID:???
どうも、自己解決しました。
お騒がせしました
0759nobodyさん2009/11/13(金) 13:18:08ID:???
どういう解決方法?
07607562009/11/13(金) 14:36:48ID:???
勘違いしてたというか参考にしてたページがわかりにくかったというか、
要するに
.tplでの記述は {insert name="hogeAction"}
スクリプトファイルは insert.hogeAction.php
ファイルの格納場所は /pluginsディレクトリ
として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。
insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、
関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて
変なことやりまくってたよ。恥。
0761nobodyさん2009/11/13(金) 14:58:34ID:???
公式マニュアル見ればよかったのにね
07627562009/11/13(金) 15:11:57ID:???
>>761
うん、公式がイマイチわからなくて他のサイトみてたらハマっちゃって。
今また公式見返してるけどやっぱりよくわからない
http://www.smarty.net/manual/ja/language.function.insert.php
「{insert} 関数の名前は、 ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。」
ってあるけど、それじゃ上手くいかなくて
smarty_insert_hogeAction() って形でやっと上手くいったからなぁ…

こっちの方が公式よりわかりやすかった、俺が物わかり悪いんだろうけど
http://www.y2sunlight.com/ground/?PHP5.0%2F8.Smarty%A4%F2%CD%FD%B2%F2%A4%B9%A4%EB
0763nobodyさん2009/11/13(金) 15:22:56ID:???
そりゃプラグインとしてファイルを自動読み込みさせてるからだ
http://www.smarty.net/manual/ja/plugins.naming.conventions.php
>PHP ファイル内で定義する プラグイン関数 は次のように指定します。
>smarty_type_name()
07647562009/11/13(金) 16:02:41ID:???
>>763
そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ
0765nobodyさん2009/11/13(金) 16:19:30ID:???
偉そうなので教えん
0766nobodyさん2009/11/13(金) 20:01:32ID:???
自分で試せばいいのに。
0767nobodyさん2009/11/14(土) 14:51:09ID:???
キャッシュ効かせても速度あんまり変わらなくね?なんなのこれ
0768nobodyさん2009/11/14(土) 19:37:58ID:???
下記のように、フォームでエラーがあれば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から読み出して利用すると比較的キレイな気もしますが、
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。
0769nobodyさん2009/11/15(日) 03:44:59ID:???
>>767
Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2〜3倍速くなる程度だけど。
>>768
ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。
0770nobodyさん2009/11/15(日) 07:22:36ID:???
自分はクラスだけでやってる。

エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。

div p{ display:none }
div.error p{ display:block }

これでエラー時のテキストもデザイナー側で書ける。

親要素は
<div class='{$error.title}'>
って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。
0771潔癖プログラマ2009/11/15(日) 10:24:50ID:???
>>769
やはり3.ですか。

ただその場合
$errors.mailに値があればいいんですけど、
値がなくifがfalseになると、その行末の改行が無視されて
次の行のインデントが崩れちゃうのが気になります。
{/if}のあとに空白1文字入れとくと回避できますが、
「よろしくないテクニック」っぽくて好きになれません。
>>703でも話題にでていたようですが、
このsmartyの仕様は気に入りません(苦笑)。

{if $errors.mail}
    <p class="error">{$errors.mail}</p>
{/if}

こんな感じで3行使うのがいまのところ最善か。
テンプレートファイルがますます煩雑に…(苦笑)。


>>770
CSSのdisplayだけで制御するのは、
自分も一瞬頭をよぎったことはありますが、
やはり気持ちが悪いですごめんなさい。

あとエラー時のテキストが「入力内容をご確認ください」程度ならいいけど、
「メールアドレスが正しくありません」
「必須入力項目です」
「文字数が多すぎます」
とか丁寧に表示してあげる場合に対応しにくい気がします。
0772nobodyさん2009/11/15(日) 21:24:49ID:???
>>770
CSS切っている環境とか携帯対応を考えた場合は向かない仕様だな
0773nobodyさん2009/11/15(日) 22:48:09ID:???
んなもん、{$err} にしといて、
errに <p class="error">エラーメッセージ</p> ぶち込みだわ。
0774nobodyさん2009/11/16(月) 00:55:30ID:???
>>768
汎用性やら考えると3じゃないかな。
他の方法だと、特定箇所だけ見た目を変えたい時にデザイナ側で対応しにくい気がする。
テンプレートを関数もどきとして使うような方法もありかもしれない。

// エラー表示箇所
{include file="error.tpl" error=$errors.mail}

// エラー表示テンプレート error.tpl
{if $error}
<p class="error">{$error}</p>
{/if}
0775潔癖プログラマ2009/11/16(月) 09:18:08ID:???
>>774
なるほど。4.の別解のような感じですが、
それだとincludeするテンプレファイルまでデザイナさんに任せられるので、
複数パターンのテンプレファイルが用意できたり汎用性が高そうですね。

図らずも(?)、{if}による改行問題も、
別ファイルに追い出すことで解決できてるし、
なかなか良いかもしれません。
0776nobodyさん2009/11/16(月) 12:51:37ID:tubifOLG
Smartyは遅いって意見ありますが、体感レベルで明らかに遅いですか?
1秒2秒遅くなった経験がある人いるんでしょうか?
0777nobodyさん2009/11/16(月) 23:39:48ID:???
そんなに遅くないよ。
「遅い」って感じるのは鯖が悪いんだろ
0778nobodyさん2009/11/17(火) 02:12:17ID:???
>>776
古いサーバPC上でキャッシュを無効にして使っても、0.001秒の処理が0.002秒になる程度。
数値的には2倍だが、体感的にはまずわからない。

素のPHPコードに比べたら遅いと言えるが、
個人的にはメリットの方が桁違いに上かな。
0779nobodyさん2009/11/17(火) 02:16:05ID:???
>>777,778
よかったー。いかにもノロノロしてるような状態になるのかと思いました。
安心して作れます、ありがとう
0780nobodyさん2009/11/17(火) 03:18:29ID:???
じゃキャッシュのメリットって何?って感じだな
0781nobodyさん2009/11/17(火) 06:08:10ID:???
Smarty 3.0 Beta 3 Released
ペース早いな
0782nobodyさん2009/11/17(火) 13:05:14ID:???
>>780
更新が少ないもしくは、更新タイミングが決っている場合にキャッシュ有効にすればいい。
大規模サイト用のチューニング項目だと思えばいいんじゃないかね。
0783nobodyさん2009/11/17(火) 15:47:08ID:???
>>780
769にも書いたけど、負荷テストした時は効果合ったよ。
同時アクセス100とか1000の場合に。
0784nobodyさん2009/11/19(木) 15:56:07ID:???
多数の他人に更新させる場合はキャッシュオフ?
掲示板とかね
有効にしといて書き込まれたタイミングでキャッシュ削除するのかな
0785nobodyさん2009/11/20(金) 13:27:52ID:???
ぴーえちぴー5.3.0
りなくす

Smartyでテンプレートが無い場合に白い画面になっちゃうんで、エラーをハンドリングしたいんですけど出来ないでしょうか?
テンプレートがあるか判定なんてめんどーなことしないといけないんですかね?
0786nobodyさん2009/11/20(金) 13:53:02ID:???
できるでしょ
そもそもfatal errorなり出るはず
0787nobodyさん2009/11/20(金) 13:55:42ID:???
PHPのerror_reportingが0になってるとかじゃね?
0788nobodyさん2009/11/20(金) 14:07:49ID:L1RHfQMx
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
みたいにやりたいです。
エラーレポ調べてみます。
0789nobodyさん2009/11/20(金) 14:24:17ID:L1RHfQMx
error_reportingはnullのようです。ログに出して確認。
3に設定して見ましたが例外はキャッチできませんでした。3が間違いなんでしょうか?

>>786
それは戻り値として出るということですか?
0790nobodyさん2009/11/20(金) 14:27:34ID:???
>>789
error_reporting(E_ALL);
0791nobodyさん2009/11/20(金) 14:30:40ID:???
>>789
もしかしてxampp?
0792nobodyさん2009/11/20(金) 14:32:43ID:L1RHfQMx
displayのソース見ましたが、エクセプションはスローされないようですね…
素直にtemplate_exist使いたいとおもいます。

>>786
voidですね。
0793nobodyさん2009/11/20(金) 15:02:58ID:???
fatal error出るでしょに対する返答がvoidですとか謎い
0794nobodyさん2009/11/20(金) 15:05:46ID:L1RHfQMx
display_errors = Off

display_errors = On
httpd restart

error_reporting(E_ALL);
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}

>>791
XAMPPじゃないです。それぞれソースからいれました。
0795nobodyさん2009/11/20(金) 15:09:05ID:L1RHfQMx
あ、794の結果はダメでした。同じ結果で白い画面になります。

>>793
789への自己レスです。
0796nobodyさん2009/11/20(金) 15:12:27ID:???
ちょろっとググってみたらこんなんもあった

(2)Smartyのファイルを調べてみる
画面が真っ白になった原因として、Smartyのファイルが壊れていることがあるのです。
http://xoops-manual.net/modules/smartsection/item.php?itemid=17
0797nobodyさん2009/11/20(金) 15:14:35ID:???
>>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じゃないとのことなので真面目に答えてみました
0798nobodyさん2009/11/20(金) 15:25:36ID:L1RHfQMx
>>797
おぉ、まさに欲しかった回答です。
ありがとうございます。
そのワーニングで間違いないです。

1…書き換えるのは好きじゃないです。
2…うーん、処理に悩みそうです。
3…これが簡単そうです。

ちょっとがんばってみます。
たすかります。
0799nobodyさん2009/11/21(土) 10:25:34ID:???
fetchってどういうとき使うの?
0800nobodyさん2009/11/21(土) 11:47:09ID:???
自動送信・返信メールの文面とか。
0801nobodyさん2009/11/21(土) 13:04:20ID:???
>>800
ありがと、メールのテンプレか
就活してたときの毎ナビか何かの企業からメールに
『こんにちわ寒くなりましたね、{$username}さん』
とか、書いてあったのを思い出した
0802nobodyさん2009/11/21(土) 15:18:41ID:???
>>798
普通は三番
サンプルは沢山見つかる
0803nobodyさん2009/11/26(木) 11:34:27ID: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に譲渡しそこから必要データ取得→出力の流れです。
もっとスマートなやり方ないでしょうか? アドバイスお願いします
0804nobodyさん2009/11/26(木) 15:51:29ID:???
>>803
何を言ってるのか良く分からないけど
>変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが
すればいいのでは?
0805nobodyさん2009/11/26(木) 15:52:24ID:???
補足、テンプレートファイルで解釈するのではなくPHP側でという意味で。
0806nobodyさん2009/11/26(木) 16:04:59ID:???
余計意味がわからない。
なぜmodifier?function作れば?
08078032009/11/26(木) 23:09:48ID:tP8Fcb0C
皆さんありがとうございます
>>804
header.tplって、単独のページとしては存在しないあくまでパーツのテンプレートなので、
index.tplに対するindex.phpの様なコントローラ(?)のファイルってheader.tplにはないのではと
考えたのですが…(header.phpにアクセスすることはないと思うので)
思い違いなのでしょうか?
>>806
勉強不足なのかもしれません、functionについて調べてみます。ありがとうございます。
0808nobodyさん2009/11/26(木) 23:58:18ID:???
>>807
includeするんだからindex.phpでやればよいのでは?
08098032009/11/27(金) 01:09:41ID:???
>>808
あ、親のページでってことですか、、なるほど!
1)ページのテーマ(animalとか)を引き渡されてDBに働きかけるphpを外部化し、
2)それをheader.tplの親のanimal.php, car.phpなどに読み込んで、
3)結果をincludeタグ渡す
って感じでいいかな。
これならデータの取得部分が複数にばらけることもないのか。。
これのデータ取得の順番を変えたものがfunctionでやるってパターンかもしれない

ありがとうございます。チャレンジしてみます
0810nobodyさん2009/11/29(日) 07:42:11ID: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 …{〜} の外に書かれたものは正常に処理されないという仕様なんでしょうか?
申し訳ありませんが、ご意見宜しくお願いします
0811nobodyさん2009/11/29(日) 13:22:28ID:???
お前は何を言ってるんだ
0812nobodyさん2009/11/29(日) 14:16:45ID:???
return "abc";

してみればいいじゃない。
08138102009/11/29(日) 23:16:09ID:???
>>812
functionの中でreturn "abc"; すると、それは返すんです。
なんでかなぁ
>>811
わかりにくかったみたいですみません
0814nobodyさん2009/11/30(月) 09:19:43ID:???
functionの中で

・print_r($_GLOBALS)してみる
・echo $varしてみる
0815nobodyさん2009/12/02(水) 14:25:43ID:1PNbu+TX
http://www.youtube.com/watch?v=lsPL2QoElmw
http://www.youtube.com/watch?v=DyzzLwlIcpE
http://www.myspace.com/ametsub3110

http://www.youtube.com/watch?v=BDD9MZUTQzs
http://www.myspace.com/serphinjapan

http://www.apple.com/jp/quicktime/download/
http://www.jimbeard.com/boomer.html
http://www.jimbeard.com/Beard%20mp3s/Song%20of%20the%20Sun%20128/Camieff%20Wb.01_01.mp3
http://www.jimbeard.com/Beard%20mp3s/Song%20of%20the%20Sun%20128/Parsley%20Trees%20Wb.01_01.mp3
http://www.jimbeard.com/Beard%20mp3s/Truly%20128/Hand%20to%20Hand%20Wb.01_01.mp3
http://www.jimbeard.com/Beard%20mp3s/Truly%20128/Gonna%20Tell%20on%20You%20Wb.01_01.mp3
0816nobodyさん2009/12/04(金) 17:16:31ID:???
smartyのキャッシュを有効にするとサイドバーにinsertしておいたプラグインが上のほうに来てしまうんだけど、何か原因わかりませんか?
ブラウザで見るソースとcacheフォルダのキャッシュを見ると、DOCTYPEタグより上にプラグインの中身が出てしまってるんです
08178162009/12/05(土) 18:55:21ID:???
あー、すげー馬鹿なことやってた
insertプラグインって中でechoしちゃダメなのかreturnしないとイケないのか
キャッシュオフのときは正常に見えるから気付かなかった
0818nobodyさん2009/12/07(月) 16:47:15ID:???
だからいったじゃん
0819nobodyさん2009/12/09(水) 10:32:51ID:AWY/enbH
一部キャッシュして欲しくない部分があるんですが、そこだけ{insert}にして外に出すしかないんでしょうか?
08208192009/12/10(木) 15:56:47ID:???
なさそうですね
0821nobodyさん2009/12/13(日) 22:00:00ID:???
>>820
これだとだめなん?
ttp://www.smarty.net/manual/ja/caching.cacheable.php
0822nobodyさん2009/12/13(日) 23:07:04ID:???
>>821
ありがとうございました
0823nobodyさん2009/12/15(火) 15:00:29ID:???
Warning: Smarty error: unable to read resource:

のエラーが出る際に、

自分で作った404エラーページ(のテンプレ)を読み込むことはできますでしょうか?
0824nobodyさん2009/12/15(火) 15:56:24ID:???
とりあえずそれは404じゃない。
$error_reportingを参照したらいいとおもう。
08258232009/12/15(火) 16:39:30ID:???
自己解決しました。
0826nobodyさん2009/12/25(金) 18:27:23ID:???
SmartyってWebで検索してもマニュアルかその複製しか全然情報が出てこないけど、どっかいいサイトないですか?
マニュアルはサンプルとか説明が簡単すぎて知りたい情報が出てこないのですが・・・

例えばdefault_resource_typeプロパティで、デフォルトのfile以外の値を知りたいのに、それどころかサンプルすら書かれていなかったり困ります
リソースプラグインの事ももっと知りたいんですが見つかりません

PEARでも感じましたが、なんでこう情報が少ないんでしょうかね?
マニュアルとそのコピー以外の情報が出てきません
0827nobodyさん2009/12/25(金) 19:02:01ID:???
PEARもSmartyも情報は溢れてるよ。
無いのは君の理解力だろう。

Smartyに至ってはマニュアルあれば大抵は事足りる。
リソースプラグインに関しても、マニュアル読んでわからん人には無縁なんじゃねぇかな。
あれ以上丁寧な解説求めるなら金払ってスクールにでも通えばいい。
0828nobodyさん2009/12/25(金) 21:36:44ID:???
ソースも結構シンプルだから
謎があったら追い掛けてみたら?
0829nobodyさん2009/12/26(土) 18:39:45ID:???
>>827
溢れているとまではいかないんじゃないかと俺は思う
0830nobodyさん2009/12/27(日) 00:20:26ID:???
具体的にどんな情報が欲しいの?
「俺の知りたい情報が無い」ってだけじゃ、教える側もわからんだろう

default_resource_typeにしたって、リファレンスのテンプレートリソースとリソースプラグインの項目に十二分な情報載ってると思うしなぁ
ここまで枯れた技術なのに、情報が足りないってのは調べる力か理解力が無いとしか思えないんだが
0831nobodyさん2009/12/27(日) 11:58:44ID:???
もし情報がなかったとしたらこのスレがもっと賑わってると思うんだ
0832nobodyさん2009/12/27(日) 13:02:13ID:???
いやそもそもSmarty使いの絶対数がすくなうわなにをするやめ
0833nobodyさん2009/12/27(日) 19:56:19ID:???
>>831
「もし情報があったとしたら〜」なら同意できるんだけどな。

ブログなんかでちょこっと取り上げているサイトはあっても
ユーザー同士で語り合うようなコミュニティは無い。
マニュアル見ろよってのは当たり前の行為で、
Smartyはそれ以上の使い方(サイト構築のテンプレ利用など)があるから
使い方やアイディアをまとめたサイトがあれば良いとは思う。
0834nobodyさん2009/12/27(日) 21:01:57ID:???
コンパイルせず使う方法ないのかな
0835nobodyさん2009/12/29(火) 11:19:04ID:???
>>833
コミュニティか・・・
たとえば2chにSmartyスレたてたらいいんじゃないかな
0836nobodyさん2009/12/29(火) 11:34:24ID:???
名案だな。
0837nobodyさん2010/01/06(水) 21:51:18ID:???
俺もSmartyのしっかりとしたサイトってないなとは思ってた
マニュアルって簡潔にまとめられてるからね

>>833の言ってるようなことは俺は分かるね
Webだけじゃなく、他にも構築する時にここどうすればいいんだっけ?って時に調べられないからね
情報が少なすぎて
0838nobodyさん2010/01/07(木) 09:11:46ID:???
書籍は?
日本語で複数出版されてるのは恵まれてる方だと思う。

まとめサイトは自分で立ち上げて、ある程度充実させられれば
他の人も情報を集めてくれるようになるかもよ。
0839nobodyさん2010/01/07(木) 15:20:10ID:???
Smartyの本ってある?
Smarty入門しか知らないけれど・・・?
0840nobodyさん2010/01/07(木) 16:37:46ID:???
PHPのウェブアプリの本だとSmarty出てきたりするな
0841nobodyさん2010/01/07(木) 23:58:21ID:???
Smartyのキャッシュ機能ってなにをキャッシュしてるん?
$smarty->assignで割り当てるのは変数だからキャッシュじゃないし
0842nobodyさん2010/01/08(金) 00:03:40ID:???
すまんアホなこと書いた
0843nobodyさん2010/01/08(金) 09:13:25ID:???
だから具体的にどんな情報が欲しいんだよw
WEBに溢れている情報を漁るだけで、大抵の事は答え一歩手前まで調べられるだろ・・・

0844nobodyさん2010/01/08(金) 10:58:43ID:???
Smartyをカッコよく使いこなす方法
0845nobodyさん2010/01/08(金) 11:57:09ID:???
2chで教えて君をしてる時点でかっこわるい
0846nobodyさん2010/01/08(金) 12:11:21ID:???
もっとSmartyをスマートに使う方法
0847nobodyさん2010/01/09(土) 17:17:11ID:???
使いこなし方まではWebで出てこないな、確かに
0848nobodyさん2010/01/17(日) 19:36:43ID:???
Smarty使う場合はdisplay()以降に処理は記述しない方が吉?
0849nobodyさん2010/01/18(月) 03:14:17ID:???
0850nobodyさん2010/01/18(月) 11:28:14ID:???
別にそんなことはないかと思うが
2枚以上のテンプレートをdisplay()する場合もあるし
0851nobodyさん2010/01/18(月) 14:06:09ID:AGLkXiCO
smarty2では
$smarty->assign('pref', array('01' => '北海道', '02' => '青森'));

{$pref.01}
で北海道が取れていたのだけど、
Smarty3Beta板では
{$pref['01']}
としないと取れなくなったのは仕様変更ですか?
0852nobodyさん2010/01/18(月) 14:06:25ID: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}を使おうと思ってるんですが・・・
0853nobodyさん2010/01/18(月) 14:25:16ID:???
>>852
html_checkboxes使うの?それとも手動でやるの?
0854nobodyさん2010/01/18(月) 15:07:42ID:???
>>853
手動です
html_checkboxesのほうがやりやすいのでしょうか?
0855nobodyさん2010/01/18(月) 15:59:06ID:???
>>854
foreachでやるなら普通にループさせて
要素を出すところでifで比較してchecked入れればいいんじゃない?
$fugaのデータ構造がそのまま使えなくてちょい面倒だけど
予め使いやすいように変換するか、更にループさせて全件比較すればいいかと
0856nobodyさん2010/01/20(水) 22:11:47ID: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のコードを追加するのは無理でしょうか。
08578562010/01/20(水) 23:35:47ID:???
すみません、しばらく考えていたのですが、断念することにしました。
拡張も考えてみたのですが、もとがphp4ですから、こちらのPHP環境と合わせて考えると
サブクラスで定義した"クラス定数"をテンプレートから呼び出すことは
おそらく無理と判断しましたm(_ _)m

確かなことは言えませんが、クラスを変数で参照できるphp5.3以降でなら
プラグイン等で機能追加できるような気がします。
0858nobodyさん2010/01/21(木) 04:40:11ID:???
php4だから無理ってどういうこっちゃ?どこに書いてあるん?

マニュアルの例はもうちょっと落ち着いて見直してみたほうがいいと思うけど
0859nobodyさん2010/01/29(金) 18:46:34ID:???
インサートプラグインの中でもテンプレート指定してキャッシュさせてるけど
インサートプラグインが1ページに5、6個あるとかなり速度低下してきてしまう
0860nobodyさん2010/01/30(土) 00:48:00ID:???
>>859
そんな、あなたにsmarty3の出番ですよ。
プラグインを書く必要ないぞ。
08618592010/01/30(土) 10:34:45ID:???
え、そうなの?プラグイン書かなくていいってどういうことですか?
今は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だと改善されてるんでしょうか?
0862nobodyさん2010/01/30(土) 11:59:30ID:???
Smarty3だと{nocache}で囲むだけでいいらしいよ。だから、インサートプラグインいらず。
0863nobodyさん2010/01/30(土) 12:29:50ID:???
nocacheなら↓で実現できたヤツですね、最初からあるのとないのでは大違いでしょうが。
http://www.smarty.net/manual/ja/caching.cacheable.php
0864nobodyさん2010/01/30(土) 14:12:57ID:???
Smarty2より遅いSmarty3なんてゴミにしかなりえない
08658592010/01/30(土) 14:45:10ID:???
>>862
キャッシュしたいのでnocacheは用途が違う気がします
0866nobodyさん2010/01/30(土) 15:09:07ID:???
あらかじめオブジェクトをシリアライズしておいて、それをアンシリアライズして読めば早いよってことなんだけど
方法がよく分からない。
結局require_once "Smarty.class.php"しなきゃいけないんだよね?
意味分かる人教えてください

Smartyの読み込みコスト(時間)を削減する
ttp://code.xenophy.com/?p=73
0867nobodyさん2010/01/30(土) 16:02:16ID:???
意味わかんない記事ですね
効果も0.01秒だし
0868nobodyさん2010/01/30(土) 16:56:45ID:???
0.01秒って結構大きいんじゃね?
0869nobodyさん2010/01/30(土) 16:57:37ID:???
なんで?
0870nobodyさん2010/01/30(土) 17:23:46ID:???
あれ?デカくね?
0871nobodyさん2010/01/30(土) 17:31:09ID:???
なんでと聞いているんだ
0872nobodyさん2010/01/30(土) 18:09:30ID:???
1回表示するたびに0.01秒だろ
うちのサイトだと0.01秒早くなったら速度2倍だぜ
0873nobodyさん2010/01/30(土) 18:11:35ID:???
感じられねーだろw
0874nobodyさん2010/01/30(土) 21:26:36ID:???
>>873
濡れ濡れよ
0875nobodyさん2010/01/31(日) 16:37:31ID:tjv1ZgGA
compile_dirのディレクトリがなかったり、書き込み権がない場合
コンパイルエラーになりますが、たまにパーミッション設定を忘れたりして
こういう現状が度々あります。

忘れず確認すれば良い事ですが、なにか効率の良い方法はないでしょうか?
0876nobodyさん2010/01/31(日) 16:53:46ID:???
どんな風にできたらいいの?
0877nobodyさん2010/01/31(日) 17:59:24ID:tjv1ZgGA
・コンパイルエラーを出さない
・コンパイル用のディレクトリがない場合、自動的に作成

と言うぐらいしか思いつきません
後者はis_dirでチェックすればいいと思うのですが、前者は方法自体わかりません・・・
0878nobodyさん2010/01/31(日) 18:01:14ID:???
>>877
エラーメッセージでファイルを検索→当該行をコメントアウト
0879nobodyさん2010/02/01(月) 13:24:00ID:???
>>878
そんな凄い事が出来るんですか?
当該行をコメントアウトって、文字列の置換とは違うんですよね?
0880nobodyさん2010/02/02(火) 14:53:16ID:???
Smarty2.6からSmarty3への移行ってlibsの中身変えるだけでいいんですか?
0881nobodyさん2010/02/02(火) 14:54:00ID:???
えっ?
0882nobodyさん2010/02/02(火) 16:28:53ID:???
string:リソースとforが欲しいだけなんだが、Smarty2に入れてくれ
0883nobodyさん2010/02/03(水) 00:29:48ID:???
>>880
互換性はあるとかないとか、
廃止される構文もあるとかないとか
0884nobodyさん2010/02/03(水) 01:26:14ID:???
stringリソースは自分で作れ。

PHPっぽく数学処理出来るのはいいよね。Smarty3。
開発に時間かけ過ぎてて、既に腐り始めている気がするけど。

extend欲しいな。
0885nobodyさん2010/02/05(金) 12:00:27ID:1wZyvV1Q
default_modifiersでescape:htmlやってたらforeachでエラー出るとか{debug}ができないとか
そういうのは最新版では治ってるの?
0886nobodyさん2010/02/05(金) 16:09:07ID:???
debugとescapeプラグインを数行書き換えるだけで治る。
0887nobodyさん2010/02/05(金) 18:17:12ID:???
Smarty3のstringリソースってキャッシュしてくれないのか、ファイルの更新日時とか取得できないから当たり前か・・・
0888nobodyさん2010/02/06(土) 16:55:05ID:???
smartyとquickformの組み合わせでdefault_modifiers escapeするとフォームが全部エスケープされてしまうね
じゃ、nodefaultsにすりゃいいかというと、フォームのユーザが追加できるようにしている場合、
デフォルトの値(フォームのセレクトとか)にエスケープしたい文字があると途端に無理が出る
結局ロジック側でh()するしかなくなる
0889nobodyさん2010/02/09(火) 13:31:36ID:Af+mgrun
Smartyで画像の出力ってできる?
"Content-Type: image/jpeg"的な意味で。
0890nobodyさん2010/02/10(水) 09:26:09ID:???
プラグイン作れば?
0891nobodyさん2010/02/10(水) 11:02:43ID:???
>>889つーか、ここは正攻法でMLに投げるんだ!
0892nobodyさん2010/02/12(金) 16:19:32ID:???
>>889
テンプレートファイルの内容を画像データにすればいいんじゃないかな・・・
0893nobodyさん2010/02/12(金) 21:11:24ID:???
パーサーが変なの拾って壊しちゃうかと
displayやfetchしてる所でget_file_contentするだけだろ
しょーもな
0894nobodyさん2010/02/12(金) 21:12:15ID:???
関数名違うかも
0895nobodyさん2010/02/17(水) 16:31:45ID:???
file_get_contents()だな。
確かにSmartyが有用なケースが思いつかない。
0896nobodyさん2010/02/20(土) 12:34:03ID:???
MTってSmarty使ってるのか
0897nobodyさん2010/02/20(土) 12:44:55ID:???
気のせいか
0898nobodyさん2010/02/20(土) 17:16:25ID:0jUjLrgq
ファイルではなく
変数に格納されたテンプレートを使うために
変数用のリソースプラグインを使って試行錯誤してるのですが
相談させてください。

このリソースプラグインに変数(テンプレートの内容)を渡す方法ですが
2つ思いつきました。

1つは
$hoge = "ここにテンプレートの内容";
$smarty->fetch("var:hoge");

のように変数名を渡して
プラグイン側で グローバル変数の$hogeの内容を取得。
しかしグローバル変数を使うというのがちょっと気になります。

もう1つの案は
$smarty->fetch("var:{$hoge}");
としてテンプレートの内容自体を渡す方法。

しかしこれだと長い名前の中間ファイル(template_cにできるファイル)
が作られてなんだか気持ちが悪いです。

毎回コンパイルでいいので中間ファイルは作られないほうがいいのですが
それもできない感じ。

みなさんはどうしてますか?
0899nobodyさん2010/02/20(土) 22:01:34ID:???
リソースプラグイン側で
グローバル変数じゃなくてSmartyにassignされた変数を見るようにすればいいんじゃねーの?
09008982010/02/24(水) 09:57:22ID:???
>>899
規制でかけなかった・・・

結局Smartyを拡張してプロパティを追加したら
プラグイン側で普通に見れました

>>899
ありがとうございます
なるほど、それは気づきませんでした
そのほうが手軽ですね
0901nobodyさん2010/03/03(水) 01:14:47ID:???
Tenjin使い始めた。smartyより3倍早いらしい。
フレームワークをやったことなかったけど、比較的わかり易い。
0902nobodyさん2010/03/03(水) 16:18:29ID:???

http://www.kuwata-lab.com/presen/LL2007LT.pdf

14-15ページを見た感じだと制御はPHPそのままで
PHPタグ外部分はわざわざechoするのか・・・
0903nobodyさん2010/03/04(木) 15:15:33ID:jG8+9EsN
Smarty3はいつになったら出るんだよ。
0904nobodyさん2010/03/05(金) 09:36:42ID:???
遅い3はいらない
0905nobodyさん2010/03/06(土) 00:22:27ID: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 です
0906nobodyさん2010/03/06(土) 01:54:29ID:???
UTF-8テンプレートにBOMが入ってんじゃねーの?
0907nobodyさん2010/03/06(土) 08:38:23ID:???
ありがとう
その通りでした
0908nobodyさん2010/03/06(土) 10:16:09ID:???
自己中マルチはシネよ
0909nobodyさん2010/03/06(土) 11:56:50ID:???
すまんね PHPはあんまり慣れてないんだ
普段はGAEでjavaなんだよ
これあげるからシネとかいわないで
http://mix-tube.appspot.com/
0910nobodyさん2010/03/06(土) 12:20:22ID:???
そういう問題じゃないけど許す
0911nobodyさん2010/03/06(土) 13:54:43ID:???
さらに宣伝かよ
0912nobodyさん2010/03/07(日) 07:30:25ID:???
β8はfinal betaらしいので、次はRC版か
0913nobodyさん2010/03/11(木) 09:30:07ID:???
俺の勉強不足かも知れないんだけど、
cache_lifetimeって以下の仕様じゃないんだね

10秒に設定→10秒経ってるキャッシュファイルは全て削除
0914nobodyさん2010/03/11(木) 17:23:06ID:TZPJnNmb
削除されるわけないだろ。
0915nobodyさん2010/03/12(金) 13:20:51ID:???
じゃ、キャッシュ溜まりまくるけど
どの段階でclear_all_cacheするの?
0916nobodyさん2010/03/12(金) 15:48:13ID:???
>>913
同じく削除されると思うのが普通な気がする
セッション管理みたいに

>>915
必要なら好きなときにどうぞ
0917nobodyさん2010/03/12(金) 17:14:35ID:???
削除というよりは、要求されたページのキャッシュがlife timeより古かったら
再生成(上書き)されると思ってる。
つまり、要求されなきゃそのまま放っておかれる(わざわざ消さない)と。
0918nobodyさん2010/03/12(金) 21:49:30ID:???
マニュアル良く読めw
0919nobodyさん2010/03/13(土) 05:31:12ID:???
>>918
ん?
0920nobodyさん2010/03/13(土) 13:02:36ID:???
cache_lifetime = -1;にしてるオレには関係のない話だな
0921nobodyさん2010/03/13(土) 15:04:04ID:???
負荷だいじょうぶか?
0922nobodyさん2010/03/13(土) 16:11:14ID:???
-1は無期限でキャッシュし続ける
0が毎回作成
CMSみたいに管理画面から更新するなら、
そのタイミングで必要な分だけキャッシュを削除すればいいしね
0923nobodyさん2010/03/13(土) 16:11:51ID:???
×キャッシュし続ける
○キャッシュを使い続ける
でした
0924nobodyさん2010/03/19(金) 17:17:56ID:KC5byG0j
前のほうに出てた変数によるテンプレートについてなんですけど
コンパイルしたときの中間ファイル(templates_cにできるやつ)
を作らないようにはできないでしょうか?
メモリ上で生成みたいな。
0925nobodyさん2010/03/19(金) 17:23:37ID:???
924さんの質問は良い質問ですね
私も気になります
どなたかご教示お願い致します
0926nobodyさん2010/03/19(金) 18:34:41ID:???
出来ないよ。そもそもコンパイルファイル作るから、
Smartyテンプレートに変数を反映できるのに。
0927nobodyさん2010/03/19(金) 19:03:47ID:???
sectionとか使うとコンパイルファイルに複雑なphpが・・・
これをforの代わりに使うのか
09289242010/03/19(金) 20:10:50ID:???
>>926
なるほど納得です
ありがとうございました!
0929nobodyさん2010/03/19(金) 20:39:12ID:???
まぁよく読み込むファイルは、OSが勝手にメモリにいれてくれるから、気にしなくてもいいんじゃね?
0930nobodyさん2010/03/20(土) 13:06:36ID:???
変数テンプレートやってみたけど
コンパイルのときのファイル名が長すぎるってエラーになったぞ?
どうしてんの?
ファイル名固定にすると同時アクセスでやばそうな気がするし
0931nobodyさん2010/03/23(火) 11:45:21ID:???
どんだけ長い変数名にしてるんだw
0932nobodyさん2010/03/24(水) 02:39:29ID:???
>ファイル名固定にすると同時アクセスでやばそうな気がするし 

これの意味がわからん・・・
0933nobodyさん2010/03/24(水) 10:07:49ID:???
smarty使い始めた初心者の方いますか?
0934nobodyさん2010/03/24(水) 12:08:34ID:???
いたら何か教えてくれるの?
0935nobodyさん2010/03/24(水) 13:29:48ID:???
はい、教えますよ
0936nobodyさん2010/03/24(水) 14:41:59ID:9Owlir6z
>>935
default_modifiersの挙動がおかしいっす。
出力するものすべてにescapeをかけたいが、配列があるとうまくいかないようです。
あとdebugも同時使用不可。
いじくって直したいが、どこをどういじくるべきですか?
0937nobodyさん2010/03/24(水) 15:22:58ID:???
俺も2日前からここに出入りしているSmarty初心者だが、
このスレを default_modifiers で検索するくらいはしたほうがいいと思うぞ・・・
0938nobodyさん2010/03/24(水) 15:40:56ID:???
>>937
ホントだ〜
すいませんでした。
0939nobodyさん2010/03/26(金) 10:19:43ID: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の時にうまくいかない。
もう一個階層があるのをどうにかしないといけないと思う。
どうしたら良いか誰かご教授願えますか。
09409392010/03/26(金) 11:42:31ID:LJ/oTT1k
PHPの方で場合分けにより階層を浅くしました。
0941nobodyさん2010/03/27(土) 04:53:37ID:???
{if $hoge == 0}
 {assign var="var" value=$c.a.b}
{else}
 {assign var="var" value=$c.a}
{/if}

{foreach from=$var item=item}

じゃだめなのかい。
0942nobodyさん2010/03/27(土) 18:31:55ID:???
今時Smartyも無いだろ。
どれだけ時代遅れだよ。
0943nobodyさん2010/03/27(土) 18:53:46ID:???
じゃあ何が有るんだ
0944nobodyさん2010/03/27(土) 19:54:09ID:???
>>942
お勧め教えて下さい♪
0945nobodyさん2010/03/27(土) 20:27:45ID:???
Smarty隔離スレにきて言うあたりが面白い。

多分、Smartyすら理解できなくてファビョっちゃったんだろうな。
0946nobodyさん2010/03/27(土) 20:40:56ID:???
>>942さんまだー?
通は何を使うのか教えてくださいよ〜ねえ〜
0947nobodyさん2010/03/27(土) 20:45:23ID:???
お薦め?本物のバカなのかこいつはw
PHP自体がテンプレートになってるんだから
PHPそのまま使うに決まってんだろ。
0948nobodyさん2010/03/27(土) 20:46:17ID:???
>>946
通は自作のフレームワークだろw
0949nobodyさん2010/03/27(土) 20:46:54ID:uuG3/ncY
フイタからバカ晒し上げ

947 名前:nobodyさん[sage] 投稿日:2010/03/27(土) 20:45:23 ID:???
お薦め?本物のバカなのかこいつはw
PHP自体がテンプレートになってるんだから
PHPそのまま使うに決まってんだろ。
0950nobodyさん2010/03/27(土) 22:07:06ID:???
>>949
こいつwww
本物だwww

Smartyは使い心地いいですか?www
超雑魚wwwww
0951nobodyさん2010/03/27(土) 22:16:56ID:???
まだそんな事言ってる奴いたのかww

PHP自体がテンプレートww
下手したらMVC分けすれしてねーんじゃね?w
0952nobodyさん2010/03/27(土) 22:33:37ID:uuG3/ncY
>>950先生はPHP自体がテンプレートであるとおっしゃってますあげ
0953nobodyさん2010/03/27(土) 22:43:47ID:???
PHPは間違いなくテンプレートエンジンそのものなのだがw
Smarty信者はPHPを知らない半可通が多いから面白いね。

あと、Smarty信者はMVC理解してないだろw
そもそもSmartyってぜんぜんMVCじゃないじゃん。
反論あるならSmartyにおけるMVCというものを解説してみwwww
0954nobodyさん2010/03/27(土) 22:47:39ID:???
まぁ、価値が判らない人には不要だね
テンプレート編集権限も与えたくないが
0955nobodyさん2010/03/27(土) 22:50:44ID:???
SmartyはVだけだよー
MとかCは別途用意してください
0956nobodyさん2010/03/27(土) 22:50:54ID:???
おやおや、こわいこわい。Smartyスレでガキが暴れとるね
0957nobodyさん2010/03/27(土) 23:01:27ID:???
Smarty信者の恥ずかしい主張
・PHPはテンプレートエンジンではない
・PHPではMVCできないが、SmartyではMVCできる
・SmartyはVしか出来ないので、MとCは別途用意する
・変なコピペでPHPユーザーを馬鹿にして悦に浸るガキの集団である

SmartyがPHPで書かれてるって知ってた?w
0958nobodyさん2010/03/27(土) 23:15:56ID:???
なんだ、釣り人か
0959nobodyさん2010/03/28(日) 00:12:24ID:???
PerlとかRubyみたいなテンプレート機能がないような言語が
テンプレートエンジンを使うのは分かる。
が、PHPはそれ自身がテンプレートの機能を持っているので、
Smartyがとっても阿呆に思える。

CakePHPやsymfonyなどのフレームワークのビュー層は
テンプレートエンジンを使わずに
生PHPを使うような前提になっている。
(当たり前のことだよね)

ただ、PHPのテンプレートとしての機能は
非常に貧弱なのでSmartyのようなアホライブラリが出てきてしまったのも
しょうがないとは思うがな。

PHPにもJavaの標準ビュー層であるJSPのように
もうちょっとマシな機能が揃っていれば良かったのにね。
09609592010/03/28(日) 00:23:05ID:???
ちなみにこういうアホ共は→>>949>>954
そこら辺のことがまったく分かっていないので
今後まともな技術者になることは有り得ないと思うね。

ビュー層の話なんか本当に底辺の話なので
本当は雑魚共と議論なんかしたくもないんだw

関係無いけどこいつらDIとかORMとかのロジック層、DAO層とかの
アプリケーションの本質的な部分の技術をちゃんと理解してるんだろうか?
ムリカナァw
0961nobodyさん2010/03/28(日) 00:27:47ID:???
>>959-960
アホはこのスレで暴れてるお前
0962nobodyさん2010/03/28(日) 00:54:30ID:???
>>961
情けないなぁ。反論しろよ。まるで俺がいじめてるみたいじゃないか。
どうしようもないね。
何故自分がSmartyを使ってるのかも理解してないのか?
ただ「これいいらしいよ」って人に言われて使ってるだけなんだろうな。
だから反論しようにも出来ない。信念とかポリシーとか無いから。
スレタイに「隔離」って付いてる意味が分かったよ。
0963nobodyさん2010/03/28(日) 01:13:19ID:???
>>962
煽っている最中すんません。
自分はホント初心者なんですけど、
ソースが見やすくなる、っていう理由だけで使うのはダメですか?
0964nobodyさん2010/03/28(日) 01:23:29ID:???
>>949 >>952 >>954 >>955みたいな煽りとかアホは、
迷惑だからこのスレに書き込まないでほしい
0965nobodyさん2010/03/28(日) 01:50:45ID:???
急に活気が出てきたな
まだまだ廃れてなかったってことか
0966nobodyさん2010/03/28(日) 04:29:49ID:???
>>963
複数の人間で作るプロダクトだと大抵デザインとプログラムが分かれる
デザイナーに直接書いてもらえる可能性が高い

データ生成とHTML生成で分離するから問題が起きたときに切り分けしやすい

エスケープ処理などを一括で行えるから楽

何より言う様に構造が把握しやすい=ソースが見やすい
0967nobodyさん2010/03/28(日) 06:00:49ID:???
どーでもいいから、Smartyサイトの説明読んでから出直してこいや。
http://www.smarty.net/manual/ja/what.is.smarty.php

PHPがテンプレートエンジンとして使えるからSmarty糞とか言ってる低脳共よ…
美しくロジックを切り分けるためのライブラリでしかない事に気がつけや。

0968nobodyさん2010/03/28(日) 10:08:58ID:???
>>960
なんだオメー
あげられてさらし者にされたのが悔しかったと言え
0969nobodyさん2010/03/28(日) 10:40:14ID:???
>>967
お前みたいな奴がいちいちほざくからスレが荒れる。
消えろ。二度と書き込むな。
0970nobodyさん2010/03/28(日) 17:03:36ID:???
>>963
ソースが多少きれいになるとかいう妄想にとりつかれて
それ自身がテンプレートエンジンであるPHPから
わざわざテンプレートエンジンを使って表示するとか
これほど滑稽なことはない。

>>966
>複数の人間で作るプロダクトだと大抵デザインとプログラムが分かれる
>デザイナーに直接書いてもらえる可能性が高い
>データ生成とHTML生成で分離するから問題が起きたときに切り分けしやすい

妄想も大概にしとけや。
君、本当にWeb制作の仕事したことあるの?
俺は今まで色々な現場で色々な言語でWebの仕事をしてきたが、
デザイナーが直接ビュー層をいじることなんてありえない。
デザイナーが作ったHTMLをビューに変換するのはプログラマーの仕事。

>エスケープ処理などを一括で行えるから楽

なんのエスケープ処理か知らんが、
フレームワーク使ってればFilterとか色々とあるんだから
それでやればいいじゃん。

>何より言う様に構造が把握しやすい=ソースが見やすい

Smartyのコードが入ったHTMLが見やすい?
妄想にとりつかれてんな。
頭冷やしてもう一度よーく見てみろ。
生PHPで書かれたHTMLと比べてそんなに変わるか?
09719702010/03/28(日) 17:09:48ID:???
あと、一言。

PHPのテンプレートとしての機能は非常に貧弱なので
Smartyのようなテンプレートエンジンが出現しちゃうのも
しょうが無いとは思ってる。

こればっかりは言ってもしょうが無いんだけど、
PHPにJSP2.0相当の機能があれば
こんなことは起こらなかった。
Smarty使ってるお前らも是非JSP2.0について
少しは知ってみてくれ。

0972nobodyさん2010/03/28(日) 17:11:20ID:???
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
0973nobodyさん2010/03/28(日) 17:18:54ID:???
>>970
>生PHPで書かれたHTMLと比べてそんなに変わるか?
ぜんぜん違うね
Smartyみたいにロジックとビューが分離できてないコードがいかに多いことか

一定のルールを作って自由な書き方をさせないところに意味があるんだよ
それぞれの開発が決めたオナニーなルールで仕様書やソース追うより、
Smarty使ってるって書いてあるだけでだいたいのルールの想像がつく

webアプリの仕事をいろいろやってきてこんなことも気づかないなんて
アホすぎる
0974nobodyさん2010/03/28(日) 17:22:48ID:???
>Smartyみたいにロジックとビューが分離できてないコードがいかに多いことか
言いたいことが逆になった

Smartyみたいにロジックとビューが分離できてるコードがいかに少ないことか
0975nobodyさん2010/03/28(日) 19:18:58ID:???
>>973
>Smartyみたいにロジックとビューが分離できてるコードがいかに少ないことか

お前はSmartyを使えばビューにロジックを混入させないことができるのか?
すげーな。分岐の処理もループの処理も記述せずにビューを書き上げることができるのか?
妄想ぬかすなカスが。

>一定のルールを作って自由な書き方をさせないところに意味があるんだよ
>それぞれの開発が決めたオナニーなルールで仕様書やソース追うより、
>Smarty使ってるって書いてあるだけでだいたいのルールの想像がつく

Smartyが決めたオナニールールにしたがってると
Smartyの仕様を知らない人はソースが読めないよねぇ。

そんなことも気づかないなんてアホ過ぎるw
0976nobodyさん2010/03/28(日) 19:25:20ID:???
>>975
まともな反論ができなくて壊れたなw
これがこいつの限界
0977nobodyさん2010/03/28(日) 19:34:29ID:???
>>975

>お前はSmartyを使えばビューにロジックを混入させないことができるのか?
デザインを構成するためのループや分岐処理とロジックを混同してないかな?

>Smartyが決めたオナニールールにしたがってると
>Smartyの仕様を知らない人はソースが読めないよねぇ。
その為の分離ですよ〜
0978nobodyさん2010/03/28(日) 19:40:52ID:???
>お前はSmartyを使えばビューにロジックを混入させないことができるのか?
>すげーな。分岐の処理もループの処理も記述せずにビューを書き上げることができるのか?

これはないわ
0979nobodyさん2010/03/28(日) 21:00:02ID:???
>>976
壊れてるのはお前のオ・ツ・ム

>>977
>デザインを構成するためのループや分岐処理とロジックを混同してないかな?

混同してねーよ。
生PHPでデザインとロジックの分離が出来ないとか訳の分からん言ってるから
そっちが混同してると思ったんだよ。

>その為の分離ですよ〜
意味不明
0980nobodyさん2010/03/28(日) 22:14:41ID:NiX4hAxZ
フレームワークもテンプレートエンジンもろくに使いこなせないのかWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

負け犬の遠吠えさらし上げ!
0981nobodyさん2010/03/28(日) 23:02:03ID:???
>>980
フレームワークは使いこなしてるけどな。
逆にSmarty使ってますなんて言ってると
あぁレベル低い人なんだなって思われるぞ?

あと何をさらし上げてんのか知らんけど文章から
幼稚さ加減がただよってんな。
0982nobodyさん2010/03/28(日) 23:06:36ID:???
どんな風にフレームワーク使いこなしてんの?
0983nobodyさん2010/03/28(日) 23:32:42ID:???
>>979
>生PHPでデザインとロジックの分離が出来ないとか訳の分からん言ってるから
>そっちが混同してると思ったんだよ。
うわ、そんな馬鹿が居るんだ!
時間の無駄なのでそんなアホに付き合うのは止めた方が良いかと

>意味不明
ごめん、はしょりすぎました。
逆に、Smartyの仕様を知ってればテンプレートが書けるんですよ。
PHP仕様を知るよりSmartyを理解する方がはるかに楽です。
ぶっちゃけ「こう書けばこの値が表示されるから入れといて」で済みます。
プログラム判らない人にSQLサーバーからどうこうして、HTTP通信してあーだこーだとか、説明してられないです。

何度も書かれてますが、Smartyの利点は「影響範囲が限定される」に尽きると思います。
だから、良く判らない人に作業を振れる
だから、一年後の自分が見てもすぐに把握できる
0984nobodyさん2010/03/28(日) 23:40:33ID:NiX4hAxZ
>>981
コテハンつけろ市ね
0985nobodyさん2010/03/28(日) 23:52:53ID:???
俺は970じゃないけど、
Smartyってテンプレートフレームワークとしてはすべてが中途半端なんだよね。
記法も制約も機能もパフォーマンスもMVCも全部中途半端。

デザイナーに適切な権限と制約を与えるには多くのカスタマイズをしなくちゃいけないし、
それをすると「Smartyを使ってる人同士ならソースが読める」ということも無くなる。
命令の書式ひとつ取ってもポリシーが無い。あるとしたらパイプくらいか?
でも、パイプにも統一感が無いし、テンプレートエンジンでパイプってどうなのよ?

PHPでifもforeachも書けるし、short_open_tagという優れた記法もあった。
何よりPHPの知識があれば学習コストが少ないし、関数も素直に呼び出せる。
JSPもASPも同じだよね。標準的な言語環境をすべて敵にまわして、
「デザインとロジックの分離が出来るのはSmartyだけ!!」と主張してるのだとしたら、恐れ入るわ。
0986nobodyさん2010/03/28(日) 23:57:34ID:???
だれもそんなことゆーてへんと思うが
09879852010/03/29(月) 00:06:20ID:???
俺はSmartyを5年くらい前に使っていたことがある。
パフォーマンスが要求されずデザイナが学習済みなら使えるケースもあるのだろうね。
でも大抵のデザイナが完璧なtplをよこしてこなかったので結局プログラマが修正していた。

そのうちフレームワーク全盛期になったら、もっと高度なキャッシュとヘルパーが手に入った。
Smarty pluginをしこしこ作らなくても、よく使う機能はすべて揃うようになった。
もちろんMVCフレームワークだから「デザインとロジックの分離」なんてお題目は当然クリアしている。

Smartyのノウハウは、今の時代に引き継げるものは何一つ無い。
文法的な利便性と美しさはJavaのTaglibsの方が上だしね。
新卒の子にSmarty教えるくらいならEL式とTaglibsを教えたらいいじゃないかと思う。
さもなくば、PHPそのものの初歩を教えたほうが、ずっと本人のためになる。

今でもちょくちょくSmartyが使われているシステムを見かける。大抵はメンテ不能の糞システムだ。
冗談なのか無知なのか知らないけど、Smartyユーザーがフレームワークユーザーを見下しているのを見ると、
こういう奴らがコピペだらけの糞システムを作ってるのかと嫌気も差す。

このスレで「古い知識にしがみついてないで、新しいことを勉強したら?」という旨の書き込みを、
「Smartyってどうよ」みたいな話題になった際に何度か挙げたんだけど、このスレの人たちには残念ながら、
アプリケーションフレームワークとテンプレートフレームワークの違いがまったく理解できないんだよな。
そして、「SmartyでMVCが出来る」とか、わけのわからないことを言っちゃう。

もっとPHPでも真面目にテンプレートフレームワークの進化に取り組む人が増えればいいのにね。

> ぶっちゃけ「こう書けばこの値が表示されるから入れといて」で済みます。

こいつは問題の本質を理解してない。生PHPだって出来るじゃん、そんなこと。
意味を理解せずにコピペを要求しているのだとしたらお前のレベル自体が低いだけだよ。
0988nobodyさん2010/03/29(月) 00:18:17ID:???
そんだけテンプレートのこと理解してて
「生PHPだって出来るじゃん」はないわ
生PHP触らせたくないのがまず一番の理由だから
不便なの承知で一枚噛ませてるんじゃねえの?
09899852010/03/29(月) 00:23:06ID:???
>>988
> 生PHP触らせたくないのがまず一番の理由だから

本当に?
何のために?
そんなことをする意味ってあるの?

他のSmartyユーザも「生PHP触らせないためにSmartyを使わせている」の?
0990nobodyさん2010/03/29(月) 00:33:45ID:???
そりゃそうだろ
そんなこともわからずに今まで何の話してたんだ
09919852010/03/29(月) 01:08:57ID:???
>>990
テンプレートフレームワークの根幹を否定するような発言に見えるがw

やりたいことって「生PHPを触らせたくない相手」が「HTMLだけ触ってればいい」んだよね。
あまつさえ「プログラムを埋め込みたい部分」は「コピペさせる」んだよね。
それってstr_replaceで済む話だよね・・・。

全くポリシーも判断力も無い人相手に改善を求めても、そりゃ無駄だわな。
よくこんなレベルでMVCなんて単語が出てきたな。そっちのほうが驚きだわ。
0992nobodyさん2010/03/29(月) 01:26:24ID:???
フレームワークってsymfonyの事?
重くて使ってられないよ
0993nobodyさん2010/03/29(月) 02:07:12ID:???
相手が言ってもないことを捏造してまで叩きたい気持ちはわからんなぁ。
>>991のことだけど。
0994nobodyさん2010/03/29(月) 02:14:40ID:???
>>982
なにその抽象的な質問?
Smartyとか使ってるからアホになるんだよ。

>>983
>>988
デザイナーにテンプレートを書かせんなよ。
上でも書いたけどビュー層を書くのはプログラマーの仕事だ。
デザイナーはテンプレートの元となるHTMLを書くのが仕事なの。
お前ら本当はWebのシステム開発したことねーだろ?

>>992
俺は>>985じゃないけど、symfonyを使うのは中規模開発以上の場合だ。
重さと開発効率のトレードオフをクリア出来る場合に使えばいい。
君みたいな小さな仕事しかしないような人には無縁。
0995nobodyさん2010/03/29(月) 02:23:57ID:???
何だかデザイナーにテンプレート書かせちゃってる馬鹿がいるみたいだから
言っておくが、普通デザイナーはテンプレートは書きません。
デザイナーが書くのはテンプレートの元になるHTMLまで。

テンプレートを書くのはプログラマーなんだから
わざわざSmartyなんか使わなくても生PHPで書けるだろ?

デザイナーがテンプレートを書くことを前提で話してる奴がいるから
話がおかしくなる。分かった?
0996nobodyさん2010/03/29(月) 02:40:32ID:???
そういうことにしたい、しておかないと自己の存在意義にかかわる
という切実な思いだけは伝わってきます
0997nobodyさん2010/03/29(月) 02:42:02ID:9oVnqM8g
Symfonyのテンプレート
http://www.symfony-project.org/jobeet/1_4/Doctrine/ja/06
Smartyのテンプレート
http://www.phppro.jp/school/smarty/vol5/4

どっちが見やすいかって聞いたら100人中99人が後者って言うと思うがな
しょせん道具なんだから好きなものを使えばいいし

あとJSPとかELとかtaglibとかそれ自体がテンプレートエンジンみたいなものだろ
馬鹿みたいに全く別の文法をどんどん追加するのやめてほしいわ
0998nobodyさん2010/03/29(月) 03:35:36ID:???
Smartyのコードが見やすい云々で無く、デザイナ部にロジックが混入するのを防ぐ意味が大きいかな。
ちょっとPHPかじったデザイナがウンコみたいなPHPコードをテンプレートに書いてきたらどうするの?
安全だっていう保証出来ないでしょう。




俺はSmarty始めてから背も伸びたし、彼女も出来た。
心にゆとりが産まれたおかげか、部活と勉強の両立も出来た。
今度産まれてくる新しい家族にもSmartyを習得させようと思っているよ。
0999nobodyさん2010/03/29(月) 03:38:41ID:???
Smartyを始めたおかげで999もゲットしちまったよ(笑)
>>1000を他人に譲るゆとりも出来たみたいだ。
>>1000おめでとう。君もがんばってSmartyを学んでくれよな。
1000nobodyさん2010/03/29(月) 03:45:03ID:???
初心者だけどがむばります!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。