【Smarty】PHPのテンプレートエンジン【Flexy】
1000get
4 :
前スレ984:2005/06/15(水) 22:16:41 ID:???
たてやがった
それは絶対パスではないと思うのだが。
fileとbasedirをちゃんと設定してみてください。
8 :
nobodyさん:2005/06/24(金) 23:10:25 ID:pYTM6kF2
smartyを使って作ったものを有料で配布してもいいんですか?
販売は可能ということでいいんですか?
ということは、例えば掲示板を作ったとして
書き込むのにお金を取るみたいなことも可能ですか?
mojavi+flexy のばあい、どこにtemplate保存してる?
モジュール毎か?
>>1 Smarty専用スレにしなかったことを
褒めてつかわす。
でも盛り上がってねーじゃん
時代はフレームワークへと移行。
複数のサブテンプレートを中に入れたテンプレートを
スマーチィで実現させる場合、
capture関数を使うみたいだけど、
スマーチィ内で使用する変数名が、各テンプレートでバッティングしないように
気を遣わなくちゃいけないよね?
なんか面倒くない?
スマーチィ内で使用する変数名→テンプレート内で使用する変数名
だった
つかsmartyクラスにfetchがあるじゃん
何だこれ使えばいいじゃん
馬鹿だ俺テヘヘ
ウヘラウヘラ
19 :
13:2005/06/26(日) 13:20:03 ID:???
こんな感じに盛り上げていくから
よろしくメカドック
>>15 フレームワークというのはあくまで骨組みであって
その中ではテンプレートエンジン使うだろ。
うむ。
中心や辺境など存在しない
そろそろSmartyネタも尽きたってこったな
Smarty と Flexy
両方使ったことある人どっちがおすすめですか?
最強テンプレートエンジンはSigma
Sigmaは遅いんじゃなかったっけ
中間言語にしてるから遅いと伝え聞いた。
関係ないけどSmarty他のファイルベースのキャッシュってどうなんだろ?
UNIXって同じディレクトリにファイルが何千もあると遅くなるって
聞いたことがあるし
inode使いまくりだから抵抗がある。
特にコンテンツ構成が変わる動的生成のページだったらキャッシュが山ほど増えそうだし。
SQLiteでやればいいんじゃないかなぁと思ってるんだけど。
DBクラス等でSQLiteをキャッシュに使ってる人いない?
>>28 inodeの実装によるような。
ディレクトリを線的探索する場合はファイル数に比例して
パフォーマンスは落ちるだろうけど、数千程度で実感する
パフォーマンスの低下は起きないんでないかな?
10年程前のLinuxのカーネルは確か1つのディレクトリに確保できる
ファイル数が限られるという制約があったと思うけど今はそんなこと
ないはずだし。
> SQLiteでやればいいんじゃないかなぁと思ってるんだけど。
それは本末転倒ではないか?素直にディレクトリ走査した方が早い気がする。
お二方ともコンパイルキャッシュと出力キャッシュがごっちゃになってる悪寒。
いやコンパイルキャッシュは問題ないでしょ、
1テンプレート1キャッシュだし
>>31 いや、>28はごっちゃになってる発言に読めるんだが。
いや28だがごっちゃにしてないよ。
一体どこらへんが?
>中間言語にしてるから
ここらへん。
やったことないからわかんないんだけど、動的生成のキャッシュ作るんなら
パラメータでキャッシュID振るんでしょ?そんときキャッシュディレクトリも
分けちゃえばいいんじゃないの?
Smartyで、{$array[$obj->name]}と言うような書き方って出来ますか?
この書き方でsyntaxエラーが出てしまったんですが、クラス変数を使って配列から取得したいんですが
書き方間違ってたら教えてください。
ちなみに、{$array.$obj->name}でも{$array[$obj]->name} こう変換されてしまってだめでした。
>>37 {$assing var=obj_name value=$obj->name}
{$array.obj_name}
40 :
38:2005/07/15(金) 06:33:06 ID:???
>>39 俺は>37のやりたいことを実現する方法を提案しただけだ。
41 :
nobodyさん:2005/07/15(金) 08:38:00 ID:UMRZ8BPd
いや俺のほうがキモと言ってるだろうが
お前のほうが肝?
43 :
nobodyさん:2005/07/15(金) 09:42:30 ID:sLsGcdbz
すみません質問させてください。
SMARTYの特定のテンプレートから外部サイトへリダイレクトさせるにはどうしたらいいでしょうか?
{PHP〜でLocationヘッダ出力してもダメでした。
>>43 html: <meta http-equiv="Refresh" content="10;URL=
http://www.yahoo.com/">
smarty: {if $redirect}<meta http-equiv="Refresh" content="{$redirect.sec};URL={$redirect.url}">{/if}
>>89 Smartyでオブジェクトは扱うなって事なのか?
そんなロングパス俺には返せない
47 :
43:2005/07/15(金) 15:13:39 ID:sLsGcdbz
>>45 オブジェクトのメソッド仕様が限定されていることについて?
Flexyのテンプレート内で直接PHPを書くにはどうしたらいいでしょうか?
smartyで session.use_trans_sid を有効にするにはどうしたらいいんじゃろ
smartyではsession.use_trans_sidは有効にならないの?
SEOだろ。
>>52 喪前もこのスレに書いたことで、上位へのポイントに加担してる訳だが。
>>55 Smartyだけじゃなく、色んなテーマで無内容な広告サイト作ってるのかよ
氏ねばいいのに
57 :
nobodyさん:2005/08/17(水) 04:04:43 ID:zG9hS4+h
キー名が変数に入った連想配列は
どうやって参照できるの?
$assoc.$key
って適当にやったらエラーになった
教えてクリクリ
58 :
57:2005/08/17(水) 04:06:40 ID:???
いや、これで合ってた
なんでさっきエラーになったんだろ
すまんこ
59 :
57:2005/08/17(水) 04:12:54 ID:???
いやあってねーや
エラーにならないだけだ
どうしたらいいの?
61 :
57:2005/08/17(水) 04:23:31 ID:???
いやスマーティーのテンプレート上での話です
マニュアルにも載ってないところを見ると無理ぽ?
>57
$assoc.$key => $assoc.key
マニュアルに載ってルゾルゾ
>>61 試してみたら$assoc.$keyでも$assoc[$key]でもOKだったんだが、
$keyにassignしてないとかいうオチじゃないよね?
>>63 Smartyで連想配列のキーを変数でアクセスしたいってことだと思う
$hoge = array('a'=>1,'b'=>1)
$moe = array('a','b');
こんな感じので、
{foreach form=$moe item=i}{$hoge.$i}{/foreach}
こういう感じでしょ?
$iが$i.1とかだと{$hoge[$i.1]}にしないとだめなんだっけか。
66 :
nobodyさん:2005/08/18(木) 10:13:17 ID:k8qTuvh+
smarty lightってどうなん?
ほとんどそのままリプレースできんの?
使ってる人いる?
Linux上で aliasのpipe から渡されたメールのテキストを
Smartyの $smarty->fetch() を使って整形した文字列を取得するスクリプトを組もうとしてるんですけど
Linuxのコンソール上で php ./test.php としてスクリプトを実行した時には問題なく動作するんですが
メールからパイプで呼び出すと
Warning: Smarty error: unable to read resource: "test.tpl"
となってしまい fetch でテンプレートをコンパイルしてくれません。
パイプからだと実行位置が違うか template_dir へのパスがうまく通ってないのかな?
と思って テンプレート指定の部分を
$smarty->fetch("file:/path/to/test.tpl");
とフルパスを与えて試したんですけど同じ結果になってしまいます。
テンプレートファイルのアクセス権も 777 にしてるのですがだめぽです。
テンプレート内のfetch関数は、セキュリティが有効な場合は$secure_dirにあるファイルしか読めないみたいなのですが
$smarty-fetch() でも何か同じような制限があるんでしょうか?
>> 67 はフルパスの指定が間違ってた。 昨日1日ハマッたのに欝だ orz
69 :
nobodyさん:2005/08/20(土) 00:26:52 ID:CuJMKX6q
各ページの一部分にアクセスカウンターみたいに随時更新されるものがある場合、
その部分だけ、キャッシュを無効とかにできますのでしょうか。。
乱数とかで対応出来ないかな
insertを使うか、カウンタは画像にして外部読み出し。
72 :
69:2005/08/24(水) 01:24:29 ID:???
>>70,71
どうもありがとうございますー。
71さんのinsertがモロそれ用の関数っぽいです。勉強不足でちた。。
73 :
nobodyさん:2005/08/30(火) 02:00:43 ID:Z/2p1wcU
テンプレートに使うHTMLをコーディングする場合、画像のパス/リンクは
読み込み元PHPを基準?と考えて作る必要があるのでしょうか?
例えば、
/usr/local/apache2/htdocs/index.php
が
/usr/local/apache2/htdocs/templates/index.html
を読み込んで、
/usr/local/apache2/htdocs/templates/img/
中にindex.htmlで使う画像がある場合は、、、
…ドキュメントルート以下からのフルパスで全て指定するようにすれば、無問題なのかな?
どうでしょうか?
書いてる途中で気付いた、、、orz
>>73 HTMLで使う画像のパスはURIなわけで。
アクセスされたURIから見た(絶対|相対)URIになるわけだな。
75 :
SmartySmile:2005/09/01(木) 09:52:14 ID:x5rzeuMl
Smartyでframeは使えないんでしょうか?
framexxx.tplで<frame src=xxx.tpl>みたいに指定して、
xxx.tplに<td>{$item}</td>みたいな感じで書いておいて、$itemに値をセットしてから
display(framexxx.tpl)って表示させると、
{$item}の部分がそのまま{$item}って表示されちゃいます。
srcで指定したtplの中までは解析してくれないのかな?
いい方法ないでしょうか?
>>75 君はSmartyうんぬん以前にHTMLを覚えなさい。
てか、釣り?
Simplateが面白そうだなーと思うんだけど、Unix以外にも対応してPECLにでも入れてくれないかなぁ
ピュアPHPだとどうしても速度的にネックになりやすい部分だったDBの抽象レイヤやO/Rマッピングも
PDOが標準モジュールになったり、DB_DataObjectがPECL入りしたりしてるから、
テンプレートエンジンもモジュール化されて高速に(できれば標準に)なると嬉しいんだけど。
いくらHTML埋め込みが特徴だからって<?=を使うわけにもいかないし・・・
Smartyとか使ってみたけど、使わない機能が盛り沢山で、
結局、<?=...なテンプレートをincludeする形に落ち着いたんだけど、
>>77 > いくらHTML埋め込みが特徴だからって<?=を使うわけにもいかないし・・・
なんでなんでー
flexyのキャッシュってあるの?
>>78 short_open_tagをOnにしないと使えないから。
可搬性を考えるとOn前提のコーディングは出来ないからね
>>79 PEAR::Cache や PEAR::Cache_Lite を使うのが Flexy流じゃないかな。
>>80 <?php echo ...
これで可搬性も担保できるお。
タイプ量が増えるからいや?
読みにくくなるいや?
>>77 >DB_DataObjectがPECL入りしたりしてるから、
ソース( ゚д゚)クレ
DBDOのこといってるの?
>>83 うん、DBDOのこと
中の人はFlexyの人でもあるから、テンプレートのPECL入りもありうるかなぁと思ったり
調整能力皆無な人が突っ走る可能性にかけるしかないんじゃ
http://sunset.freespace.jp/smarty/SmartyManual_2-6-5J_html/api.display.html 「それぞれの $template_dir のために別々の compile_id をセットしなければ、
同名のテンプレートはお互いに上書きされてしまいます。」
DocRoot/templates_c/
DocRoot/templates/index.tpl
DocRoot/templates/hoge/index.tpl
DocRoot/templates/hoge/piyo/index.tpl
DocRoot/index.php -> $smarty->display(DocRoot/templates/index.tpl);
DocRoot/hoge/index.php −> $smarty->display(DocRoot/templates/hoge/index.tpl);
DocRoot/hoge/piyo/index.php −> $smarty->display(DocRoot/templates/hoge/piyo/index.tpl);
2.6.1なんですが、これってやっぱり各々のindex.phpでcompile_idセットしないといけないですか?
実際"%%C5^C5B^D5GFCD64%%index.tpl.php"とか接頭語で別ファイルになってるけど。。。
>>86 その接頭語はdisplay()に渡されたパス全体のCRC。あなたのやり方ならまあ大丈夫でしょう。
DocRoot/index.php
$smarty->template_dir='DocRoot/templates';
$smarty->display('index.tpl');
DocRoot/hoge/index.php
$smarty->template_dir='DocRoot/templates/hoge';
$smarty->display('index.tpl');
こういう使い方はまずい。
>>87 ありがとうございます。なるほどCRCだったんですね。
って事はまずバッティングする事は無いですね、0%では無いけど(笑)
どうやら続きができそうです(^^)
89 :
nobodyさん:2005/09/13(火) 00:11:30 ID:+9gUXOxC
DocRoot/index.php
$smarty->template_dir='DocRoot/templates';
$smarty->compile_dir ='DocRoot/compdir/hoge';
$smarty->display('index.tpl');
DocRoot/hoge/index.php
$smarty->template_dir='DocRoot/templates/hoge';
$smarty->compile_dir ='DocRoot/compdir/fuga';
$smarty->display('index.tpl');
こういう使い方はどう?
fugaとhogeにそれぞれのコンパイルされたindex.phpができるでしょ
「1つ以上の $template_dir を持っているが $compile_dir が1つしかない場合です」
に該当しないから普通に大丈夫だと思われ。
DocRoot/index.php
$smarty->template_dir='DocRoot/templates';
$smarty->compile_dir ='DocRoot/compdir';
$smarty->display('index.tpl');
DocRoot/hoge/index.php
$smarty->template_dir='DocRoot/templates/hoge';
$smarty->compile_dir ='DocRoot/compdir/hoge';
$smarty->display('index.tpl');
俺ならこっちの方が管理しやすケド
91 :
nobodyさん:2005/09/15(木) 05:08:57 ID:4GZtFUq5
94 :
nobodyさん:2005/09/22(木) 15:28:15 ID:7V8YpZLH
漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ ∧_∧ age
(・∀・∩)(∩・∀・) age
(つ 丿 ( ⊂) age
( ヽノ ヽ/ ) age
し(_) (_)J
95 :
nobodyさん:2005/09/26(月) 16:31:10 ID:/MkqbBhF
config_loadで読んだファイルからさらに
config_loadで読み込むことはできない?
96 :
nobodyさん:2005/09/27(火) 22:45:48 ID:G3cqNu07
幼い頃に父が亡くなり、母は再婚もせずに俺を育ててくれた。
学もなく、技術もなかった母は、
個人商店の手伝いみたいな仕事で生計を立てていた。
それでも当時住んでいた土地は、まだ人情が残っていたので、
何とか母子二人で質素に暮らしていけた。
娯楽をする余裕なんてなく、日曜日は母の手作りの弁当を持って、
近所の河原とかに遊びに行っていた。
給料をもらった次の日曜日には、クリームパンとコーラを買ってくれた。
ある日、母が勤め先から愛・地球博のチケットを2枚もらってきた。
俺は生まれて初めての万博に興奮し、
母はいつもより少しだけ豪華な弁当を作ってくれた。
愛・地球博の会場に着き、チケットを見せて入ろうとすると、係員に止められた。
母がもらったのは割引券で、これでは入場できないと言われた。
帰りの電車賃くらいしか持っていなかった俺たちは、会場の周辺を夕方まで散歩した。
電車の中で無言の母に「楽しかったよ」と言ったら、
うつむいた母は「母ちゃん、入場チケットだと思った。バカでごめんね」と言って
少し涙をこぼした。
俺は母につらい思いをさせた貧乏と無学がとことん嫌になって、
一生懸命に勉強した。
親元を離れて新聞奨学生として大学まで進み、
いっぱしの社会人になり毎月少しばかりの仕送りもできた。
結婚もして、孫を見せてやることもできた。
そんな母が去年の暮れに病気で亡くなった。
死ぬ前に一度だけ目を覚まし、うわごとのように「愛・地球博、ごめんね」と言った。
俺は「楽しかったよ」と言おうとしたが、最後まで声にならなかった。
愛地球博じゃなくて
万博にしたら泣けたのにな。
こないだ終わったばっかじゃん。
人間交差点に東京オリンピックの話あったよね。
99 :
nobodyさん:2005/09/30(金) 03:18:14 ID:+J65W0vg
Smarty中のループでネストがあった時ってどうしてる?
字下げしたら、それがHTMLにも出力されるし、
字下げしにくいと見にくい。どうしたものか…
>>99 かまわずタブで字下げしてるけど
気になるなら
一度文字列として取得したあとに
タブを除去して出力するとか
メールのテンプレートにもsmartyを使ってるけど
メールの場合はダイレクトに反映されてしまうのでそうしてるよ
>>99 前はコメント文を使って段下げしてたなー
今は詰め詰めで書いてるけど
{literal} で囲んでも駄目だっけ?
あ、{literal} じゃなくて {strip} だった…。
ソース上の事だし、インデント程度は殆ど気にしてない。
昔はソースも綺麗じゃないと!と思ってやってたけど、めんどくさくなって来た。
ただ、CSSで「display:inline」使ったりとか、インデントは入るとレンダリングされた時にも余計なスペースも入るような場合だけ気にしてる。
105 :
99:2005/10/03(月) 12:46:20 ID:???
レスさんくすぽ。
俺も気にしないで字下げすることにしたよ。
ソースのキレイさなんてたいした意味ないもんな。
106 :
nobodyさん:2005/10/07(金) 00:51:44 ID:OUR64i5+
Smartyで、他のテンプレートからも参照できる変数を
テンプレート中で定義するにはどうすればいいの?
107 :
nobodyさん:2005/10/07(金) 07:51:59 ID:j2nZGy0l
さあ…
参照方法によるんじゃない
普通に呼びたいテンプレート(または設定ファイル)をincludeすればいいかと。
109 :
nobodyさん:2005/10/14(金) 04:03:34 ID:IJV8gZED
∧ ∧
ヽ(・∀ ・)ノ <TALをつかいなよー!
(( ノ( )ヽ ))
< >
110 :
nobodyさん:2005/10/27(木) 19:57:17 ID:Q3CXlK3D
Smartyのsectionてloopに配列入れるのとスカラー値入れるので
動作変わるんだね
分かりにくいわBOKE(><)
グローバル空間汚すのが嫌でSmarty使ってたんだけど
よく考えたらクラスのStatic変数をネームスペースとして使えるじゃん。
糞重いSmartyなんていらねーよバキャロコノヤロ
だが考えすぎではないか
何だよメソッドの中からincludeするだけでも
グローバル空間汚れないじゃん。
今まで何だったんだバキャロコノヤロ
PHPでも
if-endif
foreach-endforeach
なんて書き方があったんだとはじめて知った。
PHP自体がテンプレート的存在として生まれているのに、
テンプレートエンジンなど必要だろうか。
否、いらない。
>>116 例えば、次のような感じで表示に使うテンプレートを切り替えられれば便利じゃね?
if($status){
setTemplate('success.html'); // 成功時のテンプレートファイル
}else{
setTemplate('error.html'); // 失敗時のテンプレートファイル
}
>>116 その勢いでJSPのカスタムタグを否定してきてくれ。
PHPの似非PIが目障りだろ
116みたいなレスが定期的にあるけど、なんで?
なんか否定されてるんじゃっていう強迫観念があるんだろうな
予防的防衛というか
テンプレエンジン要らないOOP要らないコンテナ要らないSOAP要らない
Struts要らないモデリングツール要らないデザパタは無駄・・・etc
個人的に以下の二点かなあとか思った
これを満たす新技術には「どこがいいんだよ馬鹿」厨が発生するような
・誰にでも利用価値があるわけじゃないもの
・学習コストのかかるもの
・世間的に(・∀・)イイって言われてるもの
これ大事。
だが今必要なのはAjaxPagesではないか
質問です。
Smarty の html_select_time で各 select リスト同士を区切る文字を指定したいのですが、
html_select_date の field_separator のようなものが発見できません。
なので時間の場合、00:00:00のような表示ができないのですが、
皆様はどのようにされていますか?教えてください。
function.html_select_time.php をいじって html_select_date2 ってしてる。
プラグイン実装なんだから好きに変えれ。
125 :
123:2005/11/15(火) 14:05:51 ID:???
> 124
そうですよね。
やっぱ自分で実装するしかないみたいですね。
ソース見たら簡単にできたので、自分で実装しました。
ありがとうございました。
126 :
nobodyさん:2005/11/17(木) 06:59:13 ID:bEealcPT
Flexyの $factory->freeze() ってどういう意味ですかいね?
>>126 例えば
<input type="text" name="foo" value="hoge">
を表現するElementをfreezeすると、レンダリング結果は
hoge
になる。
ただしdepreciatedなメソッドだし、
Elementの種類によってはうまく動かない。
(マニュアルにも「this probably needs more thought..」とある)
要するに、使わない方が良いし気にしなくても良い。
128 :
nobodyさん:2005/11/17(木) 11:02:53 ID:bEealcPT
>>127 ありがとうございます。
しかし、どういう用途に使うのか、よくわかりませんね・・
>>128 入力フォームの確認画面とかに使う
HTML_QuickFormにも同様のメソッドがあるよ
でもフォームであれこれしたいならFlexyで全部やるよりQFに任せたほうがいいと思う
130 :
nobodyさん:2005/11/17(木) 15:00:34 ID:bEealcPT
>>129 そかそか、なるほどー
QFの方は、使ったことあります。でもちょっと微妙〜な感じでした。
FlexyよりQFがいいと言われると、うーん、となりますねぇ。
131 :
nobodyさん:2005/11/17(木) 18:42:41 ID:Z3PKuVv1
smartyで出力するときの文字コードを指定する方法って
ありますか?
派生クラスでini_set、charsetをいじる
PHPでテンプレートを使う必要性がわからないんだけど・・・
HTMLの中に<? ?>を入れるのとどう違うのかがいまいち理解できない。
プログラムの量が巨大な場合、主体をプログラムにするため。
PHPで巨大なプログラムを書く是非については論じない。
定期的にその話が出るな
>>133 配布してるスクリプトならshort_open_tagはOffでお願いします(;´Д`)人
136 :
nobodyさん:2005/11/19(土) 18:43:18 ID:ZxbspkY2
本来、HTML整形は、XMLとXSLTを使うのが、本流である気がするのだけど、
ほとんど使われていないのはどうして?
137 :
nobodyさん:2005/11/19(土) 18:57:11 ID:ZxbspkY2
138 :
nobodyさん:2005/11/19(土) 19:02:01 ID:ZxbspkY2
SmartyとFlexyで速度違いますか?
おれagaviつかうわ。
>>143 RSS とかならともかく、全部クライアント側でやらせるわけじゃないだろうし...。
145 :
nobodyさん:2005/11/25(金) 18:34:56 ID:jDxpSmO4
書籍化されていない技術は普及しない。
これ定説。
よって、Smartyの勝ち。
やっぱりドキュメントの存在がでかいんじゃないの?
Flexy も日本人でがんばる人が出てくれば。
>>146 maple関連のエロイ人も使ってるのかな?Flexy。
ちょろっとマニュアル見たけど、良さそうだよね。
Smartyと違って、PEARコマンドでインストール、アップグレード
出来るの便利だし。
>>148 なるほど、channelね。
このページ知らなかった。サンクス。
150 :
149:2005/11/27(日) 22:21:40 ID:???
今S2Baseをちょこちょこ弄ってるんだけど、
Viewの部分、SmartyとFlexy両方使えるようにしようと思ってる。
やっぱこの二つが今HOTかなぁと思うし。Smartyは前からだけど。
151 :
nobodyさん:2005/12/02(金) 18:48:49 ID:GbypoETy
Smartyのテンプレートファイルで配列変数をassignする方法ありませんか?
append()関数みたいなのがあればいいのになー
{assign var="foo[bar]" value="hoge"}
{assign var="foo.bar" value="hoge"}
どっちもダメ
またお前か
153 :
nobodyさん:2005/12/02(金) 19:10:32 ID:GbypoETy
なぜこのスレをはじめて見たことが判ったのだ?
それもプラグイン実装
compiler.assign.php 見たらびっくりするぐらい簡単。
適当にいじってcompiler.append.php とかってすれば?
155 :
151:2005/12/04(日) 14:03:53 ID:Mar0sa+P
>>154 ありがとうございました。
実体はreturn行だけなんですね。
assignをappendに置換したらそのまま。
わかってみればびっくりするぐらい簡単でした。
156 :
nobodyさん:2005/12/04(日) 16:57:43 ID:Lg1lZNcA
smarty+JpGraphを使えてる人いますか?
双方単体では使えるのですが、
<?php
require_once("/var/www/common/xxxx/MySmarty.class.php"); //smarty本についてたファイル
require_once("jpgraph-2/src/jpgraph.php");
require_once("jpgraph-2/src/jpgraph_radar.php");
echo "testdayo";
?>
という、実処理なしのスクリプト(EUC-JP)でもエラーが出てしまいます。
JpGraph Error
General PHP error : var : Deprecated. Please use the
public/private/protected modifiers
環境は、
fedora core 4
Apache/2.0.54 (Fedora)
PHP Version 5.0.4
JpGraph2.0rc2/1.19 ※両方でテストしてみた。双方単体では動く。
λ...タスケテ
JpGraphとやらにE_STRICTでも入ってんだろ
158 :
156:2005/12/04(日) 17:05:43 ID:Lg1lZNcA
ごめん。自己レス
MySmarty.class.phpが悪かったみたい(?)。
Smarty.class.phpにしたらエラーでなかったです。
もちょっと頑張ってみます。
FlexyのCompilerって
Flexy,Regex,Standardありますが、どのような違いがあるのでしょうか。
テンプレートエンジン全般の質問です。
サイト構築に、mod_rewriteを使ってルートのPHPにパスを渡して
それぞれのページを表示させているのですが、
PHPのテンプレートエンジンの中に、各ページのHTMLファイルに
PHPスクリプトを書いたときに適用させられるようなエンジンはないでしょうか?
鮎川さんのテンプレートクラスを使ってみたのですができませんでした。
わかりにくいですね…
・mod_rewrite
(RewriteRule ^(([0-9A-Za-z\-\_\/]+)\.html)$ default.php?file=$1 [L])
・default.php?file=test/index.html (ルートのPHP)
・main.html (ページ全体のHTML テンプレートタグを使って書いてある)
・test/index.html (default.phpが呼び出しているファイル)
↑このなかに<?php ほにゃらら ?> のPHPスクリプトを書いて実行させたい
(´・ω・`)わかりますでしょうか… よろしくお願い致しますm(_ _)m
161 :
nobodyさん:2005/12/09(金) 00:22:35 ID:8G0pq1Va
テンプレートエンジン全般の質問です。
サイト構築に、mod_rewriteを使ってルートのPHPにパスを渡して
それぞれのページを表示させているのですが、
PHPのテンプレートエンジンの中に、各ページのHTMLファイルに
PHPスクリプトを書いたときに適用させられるようなエンジンはないでしょうか?
鮎川さんのテンプレートクラスを使ってみたのですができませんでした。
わかりにくいですね…
・mod_rewrite
(RewriteRule ^(([0-9A-Za-z\-\_\/]+)\.html)$ default.php?file=$1 [L])
・default.php?file=test/index.html (ルートのPHP)
・main.html (ページ全体のHTML テンプレートタグを使って書いてある)
・test/index.html (default.phpが呼び出しているファイル)
↑このなかに<?php ほにゃらら ?> のPHPスクリプトを書いて実行させたい
(´・ω・`)わかりますでしょうか… よろしくお願い致しますm(_ _)m
162 :
nobodyさん:2005/12/09(金) 00:23:13 ID:8G0pq1Va
ごめんなさい、重複です
ようはテンプレート内にPHPを直接書きたいってことね?
Smartyの{php}があるが、そういうのはコントローラで処理して
テンプレートには結果だけ渡すのが普通じゃないかな
164 :
nobodyさん:2005/12/09(金) 02:20:36 ID:8G0pq1Va
>>163 感謝です。
これを機にsmarty入門いたします。
なんか間違ってる
166 :
163:2005/12/09(金) 17:51:16 ID:???
やっぱり違うみたいです…(´・ω・`)
「テンプレート内」じゃなく、「テンプレートに埋め込む文章内」の
PHPを適用させたいのです。
無理でしょうか?なにか代替案があれば教えてくださいm(_ _)m
Smartyなら内部でevalして結果返すプラグイン書きゃいいじゃん。
パカじゃねーの?
今ウンコしてて気付きました。
すごい勘違いしてたようです。
なかったことに
169 :
nobodyさん:2005/12/13(火) 00:37:27 ID:+LOMjCdo
テンプレートファイルとPHPの内部エンコードを、
別々にすることはできますか?
>>169 間に変換するフィルタを噛ましてやれば可能。
半素人なデザイナーとか、どうしてもSJISじゃないと
と言い張ったりするから。
携帯用とかぐるぐる変わるよ
この中のどなたかPHP部分とHTML部分を完全にわけたblogtoolを作ってくださいm(_ _)m
いいだしっぺがやってくださいm(_ _)m
174 :
nobodyさん:2005/12/15(木) 00:54:10 ID:Ehe3PQsA
>172
探せばあるよ、ガソバレ!
サイボウズ ガルーン 2絡みでsmartyを調べているが大した事は無いね。orz
ただのテンプレートエンジンに何を期待してたんだ?
独自文法の変な癖にイライラすることはあるな
文脈の読めない人に文法を扱う能力があるのか疑問です^^;
たとえばsectionのパラメータに
step=$var*2+1
等の式を指定したら変になる。
そのくらいうまいこと処理しろや!BOKENASU!
>>180 マジレスしとくと、
そんなことしなければ実現できない設計をした誰かが悪い。
テンプレートエンジンの第一目的は HTML とプログラムの分離なんだから。
綺麗に分離できる設計&プログラミングが要求される、と思う。
ツールを使いこなすには技術がいる。
最近、Smarty使ってるサイト(もちろん階層は分けてますが、
10万以上のファイル書き出ししてます)が激しく思くなって
きていて、PHPオーバヘッドになっているのは確認したので、
何らかの対処をしようと思っています。
で、一度eAcceleratorとかと組み合わせて使ってみようかなぁと
思っているのですが、Smarty+eAcceleratorで動かしている方
いますか?
183 :
nobodyさん:2005/12/19(月) 11:13:10 ID:dKcxa4c0
>>181 確かに、HTMLファイルの上で演算なんかするべきじゃないな。
PHPで全て処理するのが理想だ。
とはいえ、繰り返しなどの処理は{foreach}などに頼るしかなくその上でプログラミングに
近いことをしないといけないのは仕方ないと思う。
そこで質問なんですが、smartyの連想配列の添字に変数を使えませんか?
PHPでいうところの $hoge[$fuga] に相当するような書き方が見当たりません・・・
$hoge.$fuga
なんか最近、明らかに業務の質問が出てきてるんだが
qmailスレとかでコンサル雇え、って煽り見て馬鹿だ、って思ってたけど気持ちがわかってきた。
djb教信者キモい。
言われて思い出したけどサポートセンターじゃなかったなここ
使うのは無料だけど、サポートはぼったくりますよってのがオープンソースビジネスだからね。
努力もせず、金も出さずでは答えは得られない罠。
まぁ、扱えないのに業務で使うなよって話だな。
190 :
nobodyさん:2005/12/21(水) 15:14:44 ID:hWyv/SEQ
俺はqmailは嫌いだが、djbdnsは好きだ。
こういうのもdjb信者というのだろうか。
>>191 信者は「○○の製品なら完璧!」と妄信し突っ切るヤツであり馬耳東風でありアナタは無問題
djb先生の製品は完璧です。
愚弄しないでください。
〃∩ ∧_∧
⊂⌒( ・ω・) はいはい信者信者
`ヽ_っ⌒/⌒c
⌒ ⌒
でも信者って盲目で人の言う事聞かないしねえ。周りは迷惑しまくり。
盲者
198 :
nobodyさん:2005/12/23(金) 19:45:53 ID:OyeIk+oi
エラーハンドリングして表示するようにしたら
Smartyのコンパイル時に
var: Deprecated. Please use the public/private/protected modifiers
が出るようになってうざい。
何かいい方法ないかな?
199 :
198:2005/12/23(金) 20:03:18 ID:???
ハンドラ内でファイル名に
Smarty_Compiler
が含まれていたら無処理にすればいいだけだった
ゲヘヘ
>>183-184 関数中に配列変数を使うにはどう書くのですか?
{assign var="abc" value="$def.$ghi"} //失敗
そりゃ無理だ・・・
{assign var="abc" value=$def.ghi} //成功
{assign var="abc" value=$def.$ghi} //失敗
ですよろしく
それ前にも挙がったけど無理だった気がす。
設計を考え直そうという結果になったんだっけか。
単に$ghiがassignされてて、代入だけだったら↓
{assign var="abc" value=$def.$ghi}
{assign var="abc" value=$def[$ghi]}
でいけた気もする。 ループの時とかがだめなのよね。
203 :
nobodyさん:2006/01/04(水) 12:10:03 ID:fhuv2FvB
Smartyで
{section name=x loop=$TotalDepartment}
{section name=i loop=$DepartmentRest}
・・・
{/section}
{/section}
とネスト構造にさせて、{section name=i loop=$DepartmentRest}のループが終わったら
一番上のループに戻って、再度iの値を0に指定したいのだけど、{$i=0}では当然エラーになるし
どうすればいいか試行錯誤しています。どなたかご教示ください。
普通にループごとに0になるんじゃないの?
あと代入は{assign}でできる。
{section name=i loop=$DepartmentRest start=0}
でいいんじゃないか?
Amazonの検索結果画面のソース見たら、変な空白や改行だらけだった。
これって多分Smartyみたいなテンプレートエンジン使ってるんだろうな。
単に行志向プログラミングしかできないアフォな香具師が作ってるだけかもよ。
文字列操作分のパフォーマンス落ちを回避したいだけかも知れないけど。
発注元にSmarty使って納品しろと指示され若干困惑気味のSmarty初心者です。
おおよその概略は理解できたのですが、例えば、
全ページで共通なメニューのHTMLを一元化し各ページで読み込む、
その際、リンク先のURL等を変数で動的に置き換える、
ようなことって実現可能でしょうか?
サンプルでは、データ取得処理→テンプレートに適用、のような簡単な例しかなくて…
>>208 > 全ページで共通なメニューのHTMLを一元化し各ページで読み込む、
{include}で別口のテンプレートファイルを読み込める。
複数のページから同一のテンプレートを使うこともできるし。
> その際、リンク先のURL等を変数で動的に置き換える、
メニューからのリンクは絶対パスに統一すれば無問題。
ちょっとナビーゲーションとか高機能にするのに相対パスが必要ならPHPで頑張ってロジック書いた上で変数にassignすればいい。
>>210 レスありがとうございます。
include調べてみました。なるほどこれで大丈夫そうです。
リンク置き換えに関しては、開発環境と実運営環境の差を吸収するために
常に変数からの動的生成でやっておりました。
include元の変数が全て利用可能ということなのでこれも問題なく実現できそうです。
212 :
nobodyさん:2006/01/07(土) 18:14:21 ID:53dkxsiL
Smartyのテンプレートって基本的には、Shift_JISで記述できないの?
>>212 "基本的"には。やりたければInput/Outputフィルタで変換を掛ける。
>>212 エラーになる箇所を{literal}で囲めば良いのさ
215 :
nobodyさん:2006/01/08(日) 11:53:42 ID:MOiqJ8HA
Flexyの話がまったくでないな・・・・
>>217 ・シンプル&高速
・WYSIWYGなエディタで編集してもぶっ壊れない
が利点じゃなかったかな
219 :
nobodyさん:2006/01/08(日) 16:04:14 ID:7XLo98xz
前にSmartyとFlexyで簡単なパフォーマンス比較したら、
Smartyの方がちょっと速かったよ。
Smarty はテンプレートなのにゴリゴリにロジック書けるから
テンプレートエンジンのメリットが薄れると思う
Perl の Template::Toolkit とかも
そこでsmarty-lightでつよ
>>220 俺の場合はテンプレートにロジックは書けたとしても書かないようにしてる。
テンプレート内に書くのはHTMLを生成すること自体に必要な条件分岐とループと変数の表示以外には基本的に何もしない。
その他必要なロジック(例えばリンクのURLを文字列操作とか)は全てViewでやってる。
>>222 それが普通だし、そうじゃないとテンプレートエンジン使ってる意味ないしなぁ。
>>220はゴリゴリ書いたりしてるの?
>>224 なるほど。基本的にコンパイラ(というかコードジェネレータ)だからFlex+Bison使ってCで実装したほうが賢いってわけか。
Smartyの字句解析+構文解析ってムチャクチャだもんなw
flexyのほうが構文解析いいよ
227 :
nobodyさん:2006/01/09(月) 13:02:31 ID:m48rbPvo
>>212 あれ、俺Smarty+SJISテンプレートで使ってるけど、今のところ何の問題もないみたい
(たしかに一昔前のバージョンまではSJISダメだったけど)
この文字が入ってたらエラーになる、みたいなのがあるのかな?
どんな制限があるのか詳しい人いたら教えて
SJISの2バイト目に { があったらダメそうな気がするけど、どうなんだろう?
開始タグと終了タグを変更すりゃ大丈夫そうだけど。
229 :
nobodyさん:2006/01/09(月) 15:50:33 ID:0a34r5jX
RSSフィードをPHPで読もうとしてsmartyに
<td>{$san.$k.0.TITLE}</td>
<td>{$san.$k.0.DESCRIPTION}</td>
<td>{$san.$k.1.DC:DATE}</td>
のように書いてみた。
TITLEやDESCRIPTIONは読めるけどDC:DATEは読めない
syntax error: unrecognized tag: $san.$k.1.DC:DATE
ほぼ間違いなく「:」を誤読されてるみたいだけど解決できませんか?
これでどう?
{assign var="date" valud="DC:DATE"}
<td>{$san.$k.1.$date}</td>
もしくは$smarty->assign()するときにDC:DATEの方をいじるとか。
>>230 アリガd
やっぱストレートには行かないですねー
PHP側で$sanを作るときにkeyを変更しました(汎用性が・・ ;_;)
232 :
227:2006/01/11(水) 00:22:37 ID:62rgCa7x
うちはテンプレをEUCで書いてload_filterでSJISに変換してる。
携帯端末向けのときだけSJISにしたかったので。
Smartyのタグを<?と?>にしてる。
JavaScriptとかStyleSheetのために{literal}使うのはまずそれ自体面倒臭いし、JavaScriptやStyleSheetの中にSmartyの変数を入れたい時とかもっと面倒臭い。
<? ?>にしたらエディタの色分けがPHPのままでもある程度ちょうど良かったってのもあるし、SJIS問題も一気に解消。
問題はXHTMLくらいだろうけど、今のとこ使う予定なし。
> 問題はXHTMLくらいだろうけど
XMLだね
<? ?>ってまた打ちづらそうだな。
人それぞれなので別に止めないけど。
漏れ的にはcssとjsは外部ファイルなので問題茄子。
リンク先書くとき基準ディレクトリがphpファイル側にあるのは若干辛いものがある。
うちは {{ と }} にしてるよ
んで、テンプレートをごりごりSJISで書いてます・・
そのうち問題起きるんだろうなぁ
238 :
nobodyさん:2006/01/12(木) 00:57:03 ID:F7HO2NXc
デフォルトが { } ってのがわけわからん。
javascript の所 {literal} で囲まないとすぐエラーになるし。
<{ }>にしてる。どっかで見たのでパクった。
242 :
nobodyさん:2006/01/12(木) 22:09:37 ID:F7HO2NXc
時代は<!--{ }-->
<php:PHPCode xmlns="
http://~~~"><![CDATA[
]]></php:PHPCode>
これならどうだ!
(^ω^;)
Smartyのループって何でこんなんなんだろ
単純なforループでたいがい何とかなるのに
sectionのキモい仕様は何なんだよ。氏ね。
だが section と if が一番役に立つ・・・。
あと定数への参照機能な。
普段foreach使ってるからsectionって慣れてないんだけど、sectionの方が便利だったりするものなの?
>>248 $hoge[1] = 'one';
$hoge[0] = 'zero';
$hoge[2] = 'two';
てなってるとforeachとsection動作違うと思われ。
>>249 なるほど。そういうとこは注意しないとだね。
参考になった。thx!
foreachですむところはforeachでいいんじゃね、と思う。
252 :
nobodyさん:2006/01/14(土) 02:42:28 ID:YyEEFPbb
smarty使って数年になりますが、
section の使い方覚えるのめんどうなのでforeachしか使った事ありません。
なんであんな仕様にしたのかホント理解に苦しむよ。
>249 ならソートすればいいと思うんだけど、sectionってどういうときに使うの?
255 :
247:2006/01/14(土) 13:35:15 ID:???
ありゃ?
最初に section を使い始めて、foreach 使ったことないや。
逆に聞くけど foreach を使う理由ってなに?
俺はレコード内容を行番号と列名の連想配列に格納して色々な形で出力するのに section のネストを使ってる。
データベースから取り出した通りに並んでるから別に他の命令にする理由がないだけなんだが・・・。
>>254 テンプレートとロジックを別の人間が作った場合、ソートされてることを保障させるより
単純にsectionで処理した方が安全だと思うんだが。
そこまでsectionを嫌う理由を聞きたい。
>>255 キーが未知の連想配列をキーとともに出力するとき。
> キーが未知の連想配列をキーとともに出力するとき。
やっぱりそうですか。
個人的に気持ち悪いんで、そういう配列はつくらないんですよ。
テスト仕様書書くとき期待値を設定できないし。
{section name=row loop=$table}
{section name=col loop=$table[row]}
{$table[row][col]}
{/section}
{/section}
{foreach from=$table item=row}
{foreach from=$row item=col}
{$col}
{/foreach}
{/foreach}
キー名を出力しなければこんなもんか
漏れはforeach派だが、単に統一してた方が分かりやすいからという理由だな
sectionはぱっと見で処理が分かりづらいというのもある
三年くらいSmarty使ってるけどsectionは一度も使ったこと無いなー。
結局どっちでもいいんじゃないか?
>>258 を一目見て、どちらも分かりにくいと思ったぞ。
無理してSmartyを使う必要はない
$array1 (1,2,3)
$array2 (a,b,c)
とか別の配列に入ってるのを同時に回したいときに便利なのがsectionでしょ
$array (array(1,a),array(2,b),array(3,b))
とかだったらforeachでいいかと。
>>262 そうすると全部 section でいいのでは・・・。
foreach 使ってる人は無理して転向しなくていいけど。
>>260 テンプレートエンジンは使ったほうがいいぞ。
圧倒的に管理しやすくなる。
でも所詮はテンプレート。フレームワークほど使い勝手は良くならない。
フレームワークよりテンプレートエンジンのほうがPHPでは有用だとおもう。
266 :
265:2006/01/14(土) 16:41:58 ID:???
言い方が悪いな、有用じゃなくて重要な。
部品化を進めるならJavaに勝るものはないし。
効率だけを考えるならC, PHP, Java, その他スクリプトで一番手っ取り早いのを適宜使うしなぁ。
>255
foreach を使うのは簡単だから。
配列まわすならforeachってのは直感的にわかりやすいと思うんだけど
section を使ったほうがシンプルに書ける場合があるってことですね。
>256
好みの問題かもしれないですがソートはロジックで保障すべきだと思うけど。
そこをテンプレートでってのがsectionを嫌う理由かもしれません。
単なる好みですね。
フレームワーク使ってSmarty使ってる俺は?
>>266 逆じゃない?
ほかのjava,rubyなどと違ってもともとhtml埋め込み型言語なのだから、
webprogでのテンプレートエンジンの重要さはほかの言語より重要度では劣るのでは?
php自体が独自タグによるテンプレートエンジンであるという主張ならわかるが。
おれは 266 じゃないが、
PHP 生書きでテンプレートもどきってのはあんまり感心しない
ただ、Smarty でロジック書きまくってるのは PHP そのままで
いいじゃんと思うこともあるな、確かに
言語増えただけじゃん、みたいなね
274 :
266:2006/01/14(土) 21:01:42 ID:???
>>272 他の言語とは比べてない。
PHPにおけるフレームワークとテンプレートエンジンの重要度について言ってる。
htmlを生成するための道具として作られたphpなんだから、
htmlを生成するための道具としてのテンプレートエンジンの重要性ってそれなりに低い気もするが。
どちらも使ってるけど、どっちかっていったら無くなって困るのはフレームワークかな。
いざとなれば生書きにもそれなりのメリットはあるし。
というか、2つは矛盾しないし、目的も違うから比べること自体アレだけど。
う〜ん、個人的にはプロトタイプ画面をさっさと書いて提案書に貼り付けられるのがいいんだよね。
自分がプログラム書くにせよ、他人に流すにせよ、プロトタイプコードをそのまま渡せるから。
Smarty より手軽なものがあればそっちを使うけど。
>>273 それがPHPの特性でもあるわけだから別にいいんじゃないの。
完全な見本htmlを全ページ用意してくれるようなプロジェクト用に、
xmlcとまでは行かなくても、amritaかkwartzライクなテンプレートエンジンがphpにも欲しいな。
kwartzも期待してたけど開発停止状態のうえphpコンパイラはobsoleteみたいだしなぁ...
>>278 guesswork用のテンプレートにちょっぴり期待してる
物が出れば触ってみるつもり。出ればね・・・
280 :
nobodyさん:2006/01/17(火) 01:42:35 ID:ZnOPSUo7
smartyから簡易に$GLOBALSの値を取得する方法はありますか?
281 :
nobodyさん:2006/01/17(火) 02:31:48 ID:ZnOPSUo7
Smartyでは
{include file=$includeFile}
のようにして include に変数を渡せるのですが、
これと同じようなことをFlexyでも可能でしょうか?
foreach使うと
$hoge1[n]->hoge2[n]->xxx
みたいな変数でも
二重にして回せるよ
sectionはそれができないから使わない
ネタなんだろうが、そんなコーディングするプログラマとは絶対仕事したくないな。
普通にあると思うが
>>279 Subversionにそれらしきものが・・・
287 :
nobodyさん:2006/01/19(木) 00:38:24 ID:qu6lGv13
Flexyってテンプレートから定数参照できないの?
>>288 globalfunctionsオプションをtrueにして
{GLOBALS.constant(#CONSTANT_NAME#)}
で参照はできる。
if文の中に使ったり複雑なことしようと思うと難しいけど。
あんまり細かいところめんどくさいと、
もうテンプレートエンジン使わなくても、PHPでいいやんって思ったりするね。
つか使い方がそもそもテンプレートの域を超えたがっているように見えるが
PHPのテンプレートエンジンはJavaScriptと組み合わせて、PHPのコーディングが殆ど無しに画面遷移まで実現できるのがいいと思う。
index.php に画面遷移先に必要な定数だけ書いて、後は画面単位で大雑把なスケルトンコードを書けばいい。
逆にいえばそれ以外にはメリットがない・・・。
んまー、コードはすっきりするけどね。
{$form.radio1.label}
{$form.radio2.label}
...
...
みたいにカウンターでraidoの値を増やしていきたいのですができますか?
{counter start=1}
{$form.radio$counter.label}
とかforeach使ってみましたがダメでした。
>>293 なんで配列にしないで変数名に1,2,3,....をもってるの?
>>294 mojavi, HTML_QuickForm + Smartyを利用していて addElementするとそうなるからです。
296 :
293:2006/01/23(月) 03:07:43 ID:???
{foreach}で分解して {if $counter == "hoge"}
みたいにして無理やり解決してみました。
addGroup
>>297 addGroup使っても同じかと思って気にしていなかったんですけど…
どうやるんですか?というかどう違うのですか?
phpのstr_repeatみたいなのはsection使うしかないですか?
>>282-283 これってなにが悪いの?
デザイナーには嫌がられてるの?
理由があるなら使わないようにするけど
>>301 単純に構造が分かりにくいから。
同じ [n] で回すなら、別の変数に分けた方がいい。
優れたプログラマなら自分の死んだ後のことも考えとけ。
>>304 そこかよw
$hoge1[m]->hoge2[n]->xxx
これならいいか?
306 :
nobodyさん:2006/01/24(火) 21:53:48 ID:H58eWtwf
_、_
( ,_ノ` )y━・~~~
>>304 smarty側でどう書くか
理解できてないとみた
308 :
nobodyさん:2006/01/24(火) 22:15:47 ID:H58eWtwf
_、_
( ,_ノ` )y━・~~~
SmartyLightって終わったんだな
乗らなくてよかった
開発が。
313 :
nobodyさん:2006/01/26(木) 11:25:03 ID:7udzlJtl
Smartyで
for ($i=0;$i<10;$i++){
echo "<br>"
}
みたいな単純なループをしたい場合どうしたらいいですか?
配列の要素数のループは出来るのですが
このような単純なループの書き方が分かりません。
{section name=i loop=10}
<br>
{/section}
で出来ました。
flexyで
radioエレメントへsetValueして動いた方いますか?
>>315 どう動かないのか良く分からないけど…
radioに対するsetValueは、
同じnameを持つ全てのElement全てに対して実行しないと
以前のチェックが解除されない。
<input type="radio" name="foo" id="foo1" value="1" checked="checked">
<input type="radio" name="foo" id="foo2" value="2">
があったとして、foo2だけにチェックを入れるには、
foo1, foo2両方にsetValue(2)を実行しないと駄目。
フォーム要素に値入れる時は
escape:html
でおけ?
318 :
nobodyさん:2006/01/31(火) 11:29:21 ID:RWHeKAHi
html_select_timeのall_extraってどのように使用するのでしょうか?
>全てのselect/inputタグにさらなる属性を追加
とあるんですけど、html_select_dateのyear_emptyみたいな使い方ができるのでしょうか?
ちなみに「all_extra=""」と記述してみたりしたのですが何も変化がありません。
319 :
nobodyさん:2006/02/01(水) 23:35:59 ID:BABJfEVv
FATAL [C:\Apache Group\Apache2\htdocs\Accounting\mojavi\smarty\Smarty.class.php:1251] fetch(templates_c\Login.html.php): failed to open stream: No such file or directory
Smartyでキャッシュファイルを出力していますけど、ファイルがこのメッセージのように見つからないと出ます。どなたかご教示願います。
320 :
nobodyさん:2006/02/01(水) 23:37:58 ID:BABJfEVv
>>319 補足ですが、実際このファイルは存在しています。
HTML時の文字コードへの変換をプラグインで実装したのですが
(**.php、**.tpl 共にEUCで記述し、HTMLではShift_JISで出力)、
postfilterでEUC→SJISを登録しただけではHTMLがEUCのままで失敗し、
outputfilterで変換プラグインを登録するとうまく動作しました。
それぞれのフィルタの適用されるタイミングをよく理解していないのですが、
postfilterで出力がEUCになった理由はなんなのでしょうか?
prefilter → [コンパイル] → postfilter → [キャッシュPHP] → outputfilter → [HTML]
という順序と認識しているのですが…
キャッシュPHPからHTMLを吐く際にさらに文字コードの変換が内部で行われている、のでしょうか?
324 :
nobodyさん:2006/02/03(金) 21:14:43 ID:Gniyc3tZ
smarty って関数呼び出しが冗長なのがいやです
何かいい方法ないですか?
全部自前で汁
SmartyとFlexyを軽く使ってみたけど、
結局、テンプレートエンジン使わなくなったよ。
テンプレートエンジンは異なる文法を使うのが面倒くさかったり、
制約やバグがほげほげだったりして、
利用する価値はたいしてなかった気がする・・
デザインの分離はしてるけど、記述は生のPHPでいいよ。
自分一人でやるならなんでもいいわな
一人でやらなくてもPHPでいいと思うよ。
デザインを分離して書けば、
PHPのコードもテンプレートエンジンのコードも
たいして変わらないものになる(もしくはそうできる)
>PHPのコードもテンプレートエンジンのコードもたいして変わらないものになる
その辺は徹底させてるから問題ない。と言うかそんなもん持って来られたら怒鳴って付き返s(ry
まぁ、それで問題なくやれてるんならいいんじゃね?
俺の所ではコレでやれてるから、おまいのとこでもやれるに決まってる。ってのが常に成り立つわけじゃないし
<?= の記述使ってるんだろうか
漏れはあんまり好きじゃないなぁ
デザインの分離は完璧だぜ!って言う人のPHP混在のテンプレートを見てみたい
<?= ?>は使ってないです。
<?php echo ?>でやってます。
ちょっと冗長な感じはあります。
そいつはまた見通しが・・
例えばテーブルの出力とかどうやってんの?
ちょっと長いだけで、構造は変わらないので、基本的に見通しも変わらないですよ。
でも見た目すっきりしてほしい感じはありますけど。←ここだけ生PHPだと微妙なところ。
テーブルの出力については、テンプレートエンジンも生PHPも同じでは?
フォームなどの定型HTMLはViewクラスで生成させることもあります。
デザイナにサーバ側のリソースへのアクセスをある程度抑制したいときはテンプレートエンジン使ったほうが楽だね。
記述が比較的短いってのも利点かな。
PHPテンプレートってのはSmartyとかが世の中にまかり通った後で(つまりテンプレート化の重要性が認識されるようになった後で)、「PHPでも同じじゃね?」派の人たちによって広まった概念じゃないかと思ってみたり。
まあどっちも得手不得手があるだろうし、好きなほう使うってことで問題ないと思う。
俺の場合は個人的にSmarty使ったほうがソースの見た目が断然すっきりするっていうくだらない理由でも気持ちいいから使ってるよ。
ソースの見た目がすっきりするのは重要だな。
PHPテンプレートって考え方はテンプレートエンジンとの対比で生まれたんだろう。
でもまぁ、そもそも PHPがHTMLにロジックを埋め込む って目的で生まれたんだから、
PHPテンプレートなんて当たり前といっちゃ当たり前だな。
つーかテンプレートいじるやつが PHP を破壊しないってことが
大前提で、それが成り立つ現場でなきゃ使えないっていうことが
なんだかスルーされてる気がするんだが。
あとテンプレートにしておけば htmlspecialchars 強制適用とか
やりやすいし「より安全」だと思う。
337 :
336:2006/02/06(月) 09:25:37 ID:???
ごめん、意味が分からんな。
「いわゆるPHPテンプレート」より「テンプレートエンジン」の方が
安全ということが言いたかった。
うちのデザイナー達は、smartyテンプレート自体を破壊しますが何か?
いや、特に何も。
Smartyのテンプレの問題点をデザイナーにちゃんと説明して
理解させてない
>>338が使えない子なだけです
341 :
nobodyさん:2006/02/06(月) 19:31:22 ID:AJx7JA/M
>>326 OOPできない奴がそういう事言うよね。
デザイナーさんたちカワイソス
>>340 それを言い出すと、
生のPHPの問題点をデザイナーにちゃんと説明して
理解させてない
>>340が使えない子なだけです
も同様に成り立つんで、揚げ足取りとしてはダメダメだな。
>>343 まあ揚げ足取りの揚げ足取っても意味ねーよ。
と、揚げ足取りの揚げ足取りの揚げ足を取ってみた。
Smartyで
<?php $request = $_REQUEST; print($request[$req['name']]); ?>
というのを
$request, $reqにはassignできているとして
$request[$req['name']]の部分はテンプレートにどう書けばいいでしょうか。
>>345 assign使って2段構えかな。
{assign var="tmp" value=$req.name}{$request.tmp}
347 :
345:2006/02/07(火) 10:53:47 ID:???
上げ忘れましたすみません。
もうひとつ、345と同じかもなのですが、2次元以上の配列の指定の仕方が
わからないです。初心者ですみません。
たとえばPHPで $data[1]['error']['name']というのは
{foreach from=$data item=results}
として
{$results.error.name}
でアクセスできると思ったのですが、違うみたいで…。
どなたか教えてください。
349 :
345:2006/02/07(火) 11:09:29 ID:???
>>346 早速ありがとうございます。試してみます。
>>348 ええ、違うようです。でも違っているかどうかを尋ねているのではなく、
2次元以上の配列の指定の仕方を尋ねていますので
ひとつよろしくお願いします。
>350
でも1コ足りなくない?
>>351 足りなくなくない?
foreachの中で$results は $data[*]相当の配列じゃなくなくない?
353 :
345:2006/02/07(火) 13:58:46 ID:???
>>346 {$request.$tmp}でいけました。ありがとう。
>>350-352 ごめんなさい。私の配列の数が違ってました。ありがとう。
>assign使って2段構え
これ気持ち悪いよね
無駄な部分が増えるっていうかさー
>>354 まあね。
嫌なら
>>345の$request[$req['name']]みないなものは初めから$smarty->assignしないってのが得策かな。
つーか普通に使っててそんなの登場したことないよ。
テンプレートに突入する前にいじくってでも変な構造のものは除去したい性分だし。
2次元以上の配列自体ほとんど皆無だな。(←これはかなり人によるだろうけど)
オブジェクトの配列ならいっぱいあるけど。
テンプレートにはなるべくビューティホーなデータしか渡したくない。
なるべくシンプルなifとforeachだけで解決できるのがベスト(ちなみにsectionは食わず嫌いw)。
だからSmartyの機能ほとんど使い余してる。
smartyで
とある配列の件数をif文で使うことってできますか?
{if $hoges|count > 0}
こんな感じで使えるといいのですが
できないですよね?
配列とは別に他の変数として件数を渡すのでしょうか?
{if count($hoges) > 0} でいいんでない
>>357 ありがとうございます
知らなかった・・・orz
普通にそこにPHPの文かけるんですね
メールも送れた
359 :
名無しさん@お腹いっぱい。::2006/02/08(水) 10:19:25 ID:Lc3DPQ+B
初の投稿になります。
よろしくお願いしますm(_ _)m
携帯電話でsmartyを使ったサイトを作っているのですが
ページが表示できません。
怪しいと思った部分($smarty->debugging = false)など設定
してみたのですが・・だめでした。
原因と思われる理由って何かわかりますでしょうか?
よろしくお願いします。
360 :
& ◆h9Bn.Lr5Ro :2006/02/08(水) 10:25:12 ID:Lc3DPQ+B
359の追記です。
エラーの内容については
端末が吐き出しているエラーのようです。
kddi --- このページは表示できません(未対応)
docomo --- 接続できません
Smarty以外の部分に原因がありそうな希ガス
携帯コンテンツ用の正しいHTMLかどうかとか
そのサイトでスタティックなHTMLを置いた場合に携帯で閲覧できるかとか
IE等のPCブラウザでは閲覧できるかどうかとか
確認してみては?
364 :
nobodyさん:2006/02/08(水) 14:00:57 ID:Lc3DPQ+B
お返事ありがとうございます。
検証した結果smartyの問題でなく
headerの問題ということがわかりました
皆さんアドバイスありがとうございました。(_ _)m
smartyで配列数分ループさせる記述ってどうするのでしょうか?
phpではforeach()でやってたんですが
{section name=hoge loop=$a}
〜
{/section}
↑上の$aのところにassign('a',配列数);
と変数渡すしかないのでしょうか?
366 :
365:2006/02/22(水) 14:19:24 ID:???
自己レス
smartyにもforeachあるんですね、失礼しました。
誘導されて来ました。
各種処理の結果を表示するhtmlのテンプレートを_template.htmlとして用意し、
それを利用してブラウザに情報を挿入したhtmlを表示させるにはどうすればよいのでしょうか?
今までは表示用のhtmlを、あとから情報を挿入したい部分毎に細切れにしたものを変数に入れておき、
情報を挟みつつ順番につなげてからechoで出力していたのですが、
デザイン面の変更にかなり手間がかかっていました。
そこで次に試してみたのは、
_template.htmlの情報を挿入したい部分に{$hoge}と入れておき、
$hoge = "output test";
$output = file_get_content("_template.html");
echo $output;
としてみたのですが、ブラウザにも「{$hoge}」とそのまま表示され、$hogeに格納した文字列は表示されませんでした。
たとえば$output = "テスト{$hoge}";とやると$hogeの内容が表示されます。
どうすれば_template.html中の{$hoge}のような部分に変数の内容を表示させることが出来るのでしょうか?
よろしくお願いします。
>>368 ここへ来たって事は、
テンプレート園児を使うように仕様変更するつもり
って事だな?
370 :
368:2006/02/22(水) 16:49:35 ID:???
>>369 くだ質スレで質問したところこちらに誘導されたのでこちらで書き込みました。
まだPHPを初めて短いのでテンプレートエンジンに手を出すことは考えていませんでした。
処理を記述したphpファイルからデザインhtmlを呼び出して画面表示できればいいと思っていたので、
外部ファイルを読み込んで変数をぶちこんで出力、ということさえできれば
それ以上の機能はとりあえず欲していません。
テンプレートエンジンに頼るしか手段はないものなのでしょうか?
371 :
nobodyさん:2006/02/22(水) 16:56:55 ID:Lv5GjAsx
ヒント
$smarty->fetch("_template.html");
>>370 先のことを考えるなら、テンプレートエンジンの導入も健闘してみる価値はある。
とりあえず、急ぎで何とかしたいって言うなら、
_template.html内の{$hoge}の部分を
<?php echo $hoge ?>
として
php側で処理の最後に
include('_template.html');
>>368 私も昔smarty程の機能は必要がないと思いってこんな方法で試行したことがあります。
【テンプレート(index.tpl)】
<html>
<body>
<img src="%%GAZOU%%">
</body>
</html>
【PHP】
//テンプレート読み込み
$Path = 'index.tpl';
if (($fp = fopen($Path,"r")) == false){
echo('error: load template')
}
while(!feof($fp)){
$result .= fgets($fp);
}
fclose($fp);
$result = str_replace("%%GAZOU%%", 'welcom.jpg', $result);//文字置き換え
echo($result);//出力
テンプレートデータを持つクラスを作ってしまえば、ソースも美しくなるでしょう。
私の場合、クラスに機能追加し始めだしてから・・・「結局smarty??」となりましたがw
374 :
373:2006/02/22(水) 21:04:30 ID:???
あちなみに、368さんのやり方なら
>>_template.htmlの情報を挿入したい部分に{$hoge}と入れておき、
>>$hoge = "output test";
>>$output = file_get_content("_template.html");
$output = str_replace('{$hoge}', $hoge, $output);
>>echo $output;
と4行目を追加すれば置き換えられると思いますよ。
includeじゃだめなの?
<?php echo $hoge ?>
がめんどくさくないなら一番楽だと思うんだけど。
うわーすげえ文盲やっちまった。
377 :
nobodyさん:2006/02/23(木) 21:14:59 ID:81PJfTdI
Smartyって__toStringメソッドって実行してくれないの?
378 :
nobodyさん:2006/02/24(金) 16:34:08 ID:S8CqOJp1
・・・頼むから教えてよ。
380 :
377:2006/02/24(金) 16:56:42 ID:S8CqOJp1
テンプレートの方が便利なところはテンプレート使って、
後はこれでいいよね。
{include_php file="hoge.php"}
{section name=i loop=$hoge}
<li>{$hoge[i]}</li>
{/section}
この時に、if (i == count($hoge)) の場合に処理をしたいんですが、
どうすればいいですか?
{if $smarty.section.i.last}
smartyってポシャらないよね?
シャラポワ?
テンプレート内の{php}内にある $hogeに変数を渡せますか?
<h1>{$hoge}</h1> ←ここに入ってる$hogeを
{php}
sample($hoge); ←ここに入れたい
{/php}
{assign var="fuga" value=$hoge}
でいけない?
当てずっぽだけど、
sample($this->get_template_vars('hoge'));
とかどうだろ。
>>390 うわ!いけました!
ありがと!!!!!!!!!
これ便利ですね。
一方ではパフォーマンス落ちるとか、
フレームワークの方がいいとか言われてますが、
どう思いますか?
フレームワークとテンプレートエンジンは役割が違うくってよ
フレームワークを骨とすると、テンプレートエンジンは皮。
合わせるとスネ夫
PHPはのび太
ドラえもんは?
WEBサーバ
398 :
nobodyさん:2006/02/28(火) 13:11:01 ID:08x2mpcp
しずちゃんは?
399 :
nobodyさん:2006/02/28(火) 13:19:21 ID:0HF5o3Qs
荒川静香
旬だね
テンプレート自動生成のフレームワークとかあるのかな?
smarty覚えて損したかな??
だってさ、
やっとPHP覚えて、smarty覚えたんだけど・・・
フレームワークっつーのを知ってまたフレームワーク覚えなきゃなあ・・・
別に覚えなくちゃいけないもんじゃない
フレームワーク不要派もいるし
>>402 smartyを利用してるフレームワークはあるし
無駄にはならないと思うけど?
ってかSmartyって普通に使う分にはそんなに覚えることないし
すみません。フレームワークって何ですか?
おれがSmartyで使うものリスト:
基本的に {$var} {if} {foreach} {include} {cycle}
まれに {section} {assign} {strip}
あと修飾子 |default |nl2br |date_format
それ以外のことはだいたいPHPでやってる。
タグが混在しているhtmlをテンプレートにするのって大変ですよね。
{if} {/if}だらけになっちゃう。
どうしてますか?
> タグが混在しているhtml
とは?
410 :
nobodyさん:2006/03/01(水) 06:18:00 ID:BvRBPutv
セックスボムキタ━━━━━━━━(゚∀゚)━━━━━━━━!!!
>>409 要はテンプレートって事じゃないの?
>>408 俺はテンプレートを細分化して対応してるけど
412 :
408:2006/03/01(水) 20:02:59 ID:???
例えばこんなのです。
<h1>見出し</h1>
<p>あああ<span>いいい</span>ううう<p>
<h2>見出し</h2>
<p>ええええ<a href="hoge">おおお</a><p>
<hr>
<h3>見出し</h3>
<div>
<ul>
<li><a href="hoge">かかか</a></li>
<li><a href="hoge">ききき</a></li>
<li><a href="hoge">くくく</a></li>
<li><a href="hoge">けけけ</a></li>
<li><strong><a href="hoge">こここ</a></strong></li>
</ul>
</div>
ええええ
だけ四文字なのが気になる
414 :
408:2006/03/01(水) 20:11:28 ID:???
それで、a hrefがあったりなかったり、
strongがあったりなかったり、
ulだったりolだったり、h3があったりなかったり・・・
大変・・・
smartyで変数の計算はどう記述したらいいでしょうか。
具体的には
{$percent}%:残り{100 - $percent}%
$percentは80とすると
80%:残り20%
と表示したいのですが
実際は
80%:残り100%
となります。
それで行けたと思うけど
スペルミスしてない?
>415
半角スペース消せばいける気がする。
418 :
415:2006/03/02(木) 12:04:45 ID:???
>>416-417 {100-$percent}だと(実際は$result.percent)
Fatal error: Smarty error: [in TemplateName line 85]:
syntax error: unrecognized tag:
100-$result.percent (Smarty_Compiler.class.php, line 436)
in Path/to/Smarty.class.php on line 1095
となってしまいます。
{$result.percent - 100}だと$result.percentの値
{100 - $result.percent}だと100
となります。「tagじゃ無ぇ」と言われても…。
どうしたらよいのでしょうか。
>>418 式の左側がリテラル数値だと構文解析がうまく行かないみたいね。
100を一旦別の変数にアサインしておくとかしか思いつかない…
420 :
415:2006/03/02(木) 12:42:52 ID:???
>>419 別変数にアサインで解決しました。
半角スペースを使えないというのも勉強になりました。
ありがとうございました。
以前(100 - $percent)とかにしたら構文解析通ったような気がする
正確に書くと
{(100-$percent)}
>>422 それで試してみたんだがエラーになるんだよね。
{math equation="100-`$result.percent`"}
そこまでするとテンプレに記述する事じゃなくなってくる気がするw
426 :
nobodyさん:2006/03/03(金) 04:19:51 ID:iZN9RII3
Smartyって
同じテンプレートファイル名は使えないの?
複数のmoduleにIndex.tplを置いてるんだけど
コンパイルキャッシュがバッティング(一方のファイルがあれば、それを読んでしまう)
するようになった。
キャッシュファイルの先頭に付加される文字列って
ファイルの位置によって変えてるんじゃないのかなあ。
>>426 $smarty->compile_dirや$smarty->cache_dirをテンプレートファイルがあるディレクトリに応じて変えてやるしかない。
テンプレートファイルの置き場所を階層化する場合ある程度ラッパとか書くといいと思う。
>426
crc32()とか使ってるみたいだから、衝突する確率が
それほど高い訳でも無いと思うが、あり得なくは無いな。
反則かもしれんが、_get_auto_filename() をオーバーライドするとか。
テンプレートエンジン作ったけど、ここにさらすのが怖い。。
>>429 いいからさらせ
気が無いならこなくていいよ
>>408 スタイルシートを切り替えるという方法もある
>>428 以前俺も同じ問題ではまってたときファイル名かぶったら確実にバッティングしてた気がするけど気のせいかな?
つーかディレクトリ変えるのが一番楽だよ。
ファイル名がかぶってるってことは別のディレクトリにあるってことだから、そのtemplate_dirとcompile_dir・cach_dirに対応関係もたせりゃいいだけだし。
お好みでconfig_dirも合わせてやったり。
個人的にはconfigファイル使わないけどね。
パス含めてコンパイルファイル名決めればいいのに
>432
428だけど、よく見たら、crcの算出に使ってるファイル名には
template_dirの部分が入ってないみたいだから、
template_dir変えてcompile_dir変えないと確実に起きるのかもな。
ソース見た癖にいい加減な書き込みですまんかった。
同名だとバッティングすると思う。ソース読んでないけど、
実経験上。
俺はフレームワークなど使う場合は、moduleごとにcompileディレクトリ作成してるよ。
$compile_id使った記憶がある
template_dir/index.tpl とtemplate_dir/hoge/index.tplでも
バッティングするってことですか?
>>436 そんなのあるんだ。知らなかった。
>>437 template_dirが違ってても、compile_dirが同じならバッティングする、
と思ってたけど、
>>436でなんとかなるのかな?
調べてないからわからんけど。
template_dir/index.tpl
template_dir/hoge_index.tpl
これで解決するよね
440 :
436:2006/03/04(土) 01:19:29 ID:???
自分の場合mojaviだったから、Smarty::fetch()の第3引数にmodule名を渡してた
fetch()の第3引数がnullのときはSmarty::$compile_idが使われるみたい
441 :
426:2006/03/04(土) 05:03:02 ID:???
たくさん情報dクスです
$compile_idにmodule名をセットする方法でOKでした
>>433 俺もそうする方が自然だと思うなぁ
バカばっか
↑↑ ごめん誤爆orz
>>433 そりゃそうだけど、たぶんこの問題がおきるのはsmartyの初期化やdisplayメソッドを呼び出す部分を共通化して一箇所に集めた場合。
たとえばフレームワーク(必ずしもmojaviとか大げさなものでなくても単にアプリ全体の骨組みって意味で)を作るとこういう問題にぶちあたりうる。
いや、このスレの人はやさしいし、回答が的確だし、サマリーしてくれるし。
良スレです。お世話になってます。
defineで定義した定数をテンプレート内で読み込むにはどうしたらよいのでしょうか?
{literal} <?=DEFINED_VALID ?> {/literal} としてみても、
Smartyの構文解析回避するとPHPの構文解析も飛ばされるようで値が読み込めません。
やっぱ一個一個変数にassignしなおさなければならないのでしょうか?(;´Д`A
>>447 自己解決しました。
予約変数$smarty.constでした。
マニュアル百回読み直してきます…
Smartyで、数字に3桁ごとにカンマを入れる時、どうしてますか?
こういう作業は、テンプレートの仕事かなと思い、修正子を調べた
ところ、該当するのが見当たりませんでした。
結局、number_format 関数を通した値をテンプレートに渡す事に
したんですが、何か釈然としなくて・・・。
>>450 俺はそれでいいと思う。
テンプレートに突入する前にMVCモデルのViewでやると考えれば違和感ないと思うけどどうだろう?
453 :
450:2006/03/09(木) 16:09:48 ID:???
御回答ありがとうございます。
>>451 そういう見方も出来るんですが、時刻表示とかは修正子を使って、
数字にカンマを入れるときには上位でというのはバランスが悪いん
ですよね。
>>452 マニュアルの読み込みが足りませんでした。(^^;
これが決定打みたいですね。
ていうかregister_modifier()しなくても
PHP組み込みの関数はそのまま修飾子として使えるはずだけど
455 :
454:2006/03/09(木) 16:32:41 ID:???
修飾子じゃなくて修正子か・・・
456 :
450:2006/03/09(木) 18:20:16 ID:???
マニュアル読み直しました。
454さんが仰る通り、PHP組み込み関数は、そのまま使える様です。
お騒がせしました。
457 :
nobodyさん:2006/03/13(月) 02:48:18 ID:LxXJ5I4v
smartyに挑戦してみました。
乱数をassignしたのですが反映されません。
キャッシュしてるからというのはわかるんですがこれでは静的ページとなんら変わらないと思います。
実際に使用されてる方はどのように使ってるのでしょうか?
よろしくお願いします。
ブラウザのキャッシュじゃないの?
>457
そんなレベルの人間が使うライブラリじゃない。
おとなしく静的ページにしとけ。
461 :
nobodyさん:2006/03/13(月) 18:59:41 ID:vm5765Ln
SmartyをPHP5で使うときの
Strict Standardsエラーってどうしてますか?
開発中はE_STRICTを有効にしたいのですが
なにか回避策はないでしょうか?
462 :
461:2006/03/13(月) 19:19:07 ID:???
自己レスですみません
smartyのrequireのときだけ
一時的にエラーを無効にすることで回避できました
失礼しました
結局テンプレ導入する事で、MVCからVを分離してウェブプログラミングに専念するってのが思想?
とはいえHTMLの埋め込みタグはあんまりきれいじゃないし、デザには理解不能。
デザがHTML埋め込みでプログラミングもひっくるめてHTML記述の責任持てよ。
>>462 5.1.3 から "var $hoge" では Notice 出ないようになるみたい。(CVS の NEWS ファイルより)
?? Mar 2006, PHP 5.1.3RC2
- Removed the E_STRICT deprecation notice from "var". (Ilia)
smarty.class.phpでぐぐると、設定不良サイトいっぱい見つかる(w
466 :
457:2006/03/16(木) 02:50:57 ID:???
>>460 キャッシュ時間の設定とかだとユーザ毎に違う内容を表示させるなどの場合は毎回コンパイルをする事になりますよね?
それは嫌なのでinsert使って見たのですがとても使いづらいです。
毎回表示が変わるようなサイトには向かないんでしょうか。
ユーザ毎に違うデザインを使うのでテンプレートがあるのはとても良いのですが。。
>>466 「キャッシュ」と「テンプレートのコンパイル」を勘違いしていない?
>466
低脳ウゼェ、消えろ
>>463 素人考えでごめんだけど、いくらデザイナでも Java Script くら解るんだから、 Smarty の構文位何と無く解るんじゃない?
phpタグを使って最強テンプレート
毎回表示が変わるようなサイト自体がウェブに向いてない。
遅いじゃん。
>>471 宣伝ですか?
んなもん買わんでもマニュアルに書いてあるやん。
>>474 オンラインドキュメントじゃなくて、書籍になってることに
意義が有る場合もあるのよ。ただ買うだけで満足してしまう
問題があるがねw
>>475 山田祥寛本は「書籍になってる」という事実の価値はあるが
書籍自体の価値は...
印税欲しい関係者必死だな。
Smarty設置について教えてください。
test.php
├Smarty
├log┬templete [中にtest.tpl.html]
├templete_c
test.phpはこうなっています
define("SMARTY_DIR", "Smarty/");
require_once "Smarty/Smarty.class.php";
$smarty = new Smarty();
$smarty->templete_dir = "log/templetes";
$smarty->compile_dir = "log/templetes_c";
$smarty->assign("now_time", gmdate("Y:m:d H:i:s"));
$smarty->display("test.tpl.html");
ところが、次のようなエラーが出てしまいます。
Warning: Smarty error: unable to read resource: "test.tpl.html" in C:\MyWeb\web\php\script\blabla\Smarty\Smarty.class.php on line 1088
何が原因なのか教えていただけませんか?
define("SMARTY_DIR", "C:\MyWeb\web\php\script\blabla\Smarty\");
$smarty->templete_dir = SMARTY_DIR."log/templetes";
$smarty->compile_dir = SMARTY_DIR."log/templetes_c";
レスありがとうございます。以下のように変更しました。
define("SMARTY_DIR", 'C:\MyWeb\web\php\script\blabla\Smarty\\');
$smarty->templete_dir = SMARTY_DIR. "log/templetes";
$smarty->compile_dir = SMARTY_DIR. "log/templetes_c";
しかし、まだ同じエラーが出てしまいます…。
483 :
nobodyさん:2006/03/18(土) 20:52:33 ID:EsSA/NIp
>>482 test.php
<?php
require_once 'Smarty/Smarty.class.php';
$smarty = new Smarty;
$smarty->template_dir = dirname(__FILE__) . '/log/templates';
$smarty->compile_dir = dirname(__FILE__) . '/log/templates_c';
...........
$smarty->display('test.tpl.html');
?>
Smartyで、テンプレートファイルの代わりに
変数のに読み込んでおいた内容と使う方法ってあります?
同じ内容のテンプレートを場合によって微妙にパスとかを変えたいので…。
具体的には、本場用とプレビュー用のHTMLを大量生成したいので、
イチイチ1ファイルごとにテンプレートファイルを生成してやると、
速度的に問題があるので…。
>>483 !!!上手くいきました!
大変お恥ずかしいですが、template_dirがtemplete_dirになっていたようですorz
失礼しました
目的と言うか用途が読めない。
練習ならディレクトリごと変えてるでしょ。
>484
なにかSmartyの用途を誤解してないか?
テンプレートファイル自体を動的に生成する必要がある状況って
思い当たらないのだが。
flexyでキャッシュできますか?
できる
できない
491 :
nobodyさん:2006/03/25(土) 14:14:45 ID:RtAYAo7R
できる
492 :
nobodyさん:2006/03/25(土) 17:11:47 ID:WzKCkjot
HTML_Template_Sigmaで質問です。
あるブロックを任意の回数だけ繰り返し表示したいのですが、
例えば以下のようなブロックがある場合、どのメソッドを使えば
いいでしょうか?
ちなみにparseメソッドでは表示されませんでした。
<!-- BEGIN foo -->
テスト
<!-- END foo -->
できない
495 :
nobodyさん:2006/03/26(日) 01:09:55 ID:8F2N8by3
>>493 え?Sigmaってブロックの繰り返しとか分岐とかできないの?
>>494 Sigmaにforeachってメソッドがあるの?
それともPHPのforeachのこと?
できるとかできないとかじゃなくて教えてくれりゃーいいのにな。
性格悪いなおい。
なんで pear のドキュメントみねーんだ
>>499 とりあえず、死んどけ雑魚。
Sigma面倒だから自分で作った。
じゃーな雑魚ども。
まあ無料だしな。
詳細が知りたければ金払わないと。
>>500 雑魚ってあんまり使わない罵倒語だよね。
君はよく言われる状況なんだね(^^;がんばって生きてね(^^;;;;;;;;
このスレは荒らさないでください
>>502 日本語も分からないか?
雑魚ってお前みたいな奴のことを言うんだよ。
良かったな一つお利巧になれてw
この板自体荒れる運命にあるしな。
荒れてウザイから隔離板建てられてるし。
廚向けの言語を使う以上、ノイズが多いのは我慢してもらわないと。
すぐ荒れるしやっぱID欲しいよなぁ。
自治スレで議論してもつけてくれないとからしいけど・・・
教えてほしいときはうそでも教えてくださいって書くと良いですよ。
ウソはすぐに見破りますよ
しかし見破らせない
破瓜の血を流させてやる
むしろ見破れないだろ。だから荒れる。
正直者が馬鹿を見る
flexyでキャッシュホントにできますか?
できますん
出来ると思えば出来る。
出来ないと思うな、思えば負けよ
荒れるようなスレではないのになぁ。
だからこんなところで聞かずにドキュメント嫁
英語よめません><><><>
なんで英語?
日本語版あるのに。
日本語よめません><><><>
524 :
nobodyさん:2006/03/28(火) 12:05:09 ID:ct8TgCpW
Smarty使え
内容的には荒れる要素は無いけど、荒れるような廚が来やすい。
>>523 Cache_Liteなんかを使うのがFlexy流
って以前このスレで見た
> テンプレートのコンパイルは必要に応じて以下の場合にのみ実行されます。
> コンパイルされたファイルが存在しない
> テンプレートに変更が加えられており、コンパイルされたものより大きい
テンプレートに変更がない場合は既にコンパイルしたファイルを使うわけだからこれで十分じゃない
528 :
nobodyさん:2006/04/02(日) 21:51:22 ID:pQIOcBrE
Smartyでの配列の取得方法について教えて下さい。
ステータスには「0, 1...」のようなコードが入っています。
これをPHP側で設定したステータス用の文字列で展開して表示したいのです。
PHP側:
$id = array(0, 1, 2);
$code = array(1, 2, 0);
$status = array("0"=>"不明", "1"=>"未完了", "2"=>"完了");
$smarty->assign('ID', $id);
$smarty->assign('CODE', $code);
$smarty->assign('STATUS', $status);
テンプレート側:
{section name=i loop=$ID}
{$STATUS.$CODE[i]}
{/section}
このままだとIllegal offset typeというエラーが表示されてしまいます。
{assign var="tmp" value=$CODE[i]}
{$STATUS.$tmp}
こちらのように、一度変数に格納すると正常に表示されるのですが、あまりスマートではないので、1行で出力する方法は無いでしょうか?
>>528 {foreach from=$CODE item=c}
{$STATUS.c}
{/foreach}
でいいんじゃないの?
530 :
528:2006/04/04(火) 16:53:19 ID:???
>>529 ご回答どうもです。
サンプルには書いていないのですが、
同時に$ID[i]が使いたい場合もあるのです。
なのでsectionでなんとかできないでしょうか?
>>528 スマートにこだわるのなら
array(
array('id'=>0, 'status'=>1),
array('id'=>1, 'status'=>2),
...
)
みたいな配列にしてからassignした方がスマートじゃないかな
質問させてください。
次に示すような配列を返すようにSQLを発行し、変数$resultに格納しています。
その内容をsmartyのテンプレート内で、foreachで回しながら全件表示するようにしています。
このとき、$itemの中身が入っている場合(0以上の数値)のみ、チェックボックスにチェックを入れたいのですが、
どうやら「$item != ""」と「$item != 0」が同じような動きをしているために、
$itemに0が入っているレコードにはチェックがつかない状態になっています。
これをうまく表示させるにはどうしたらいいのでしょうか。
よろしくお願いします。
//$result
Array( [AAA]=>100 , [BBB]=> , [CCC]=> , [DDD]=> , [EEE]=>0 , [FFF]=> , [GGG]=>)
//smartyのテンプレート内における表示部分
<table>
{foreach from=$result key="key" item="item"}
<tr>
<td><input type="checkbox"{if $item != ""} checked{/if}>{$key}</td>
<td><input type="text" value="{if $item == ""}0{else}{$item}{/if}"></td>
</tr>
{/foreach}
</table>
下に求めている表示例と、現状の表示例を載せておきます。
//求めている表示結果(□:未チェック/■:チェック)
■AAA [ 100 ]
□BBB [ 0 ]
□CCC [ 0 ]
□DDD [ 0 ]
■EEE [ 0 ]
□FFF [ 0 ]
□GGG [ 0 ]
//現状
■AAA [ 100 ]
□BBB [ 0 ]
□CCC [ 0 ]
□DDD [ 0 ]
□EEE [ 0 ] ← チェックした状態にならない
□FFF [ 0 ]
□GGG [ 0 ]
>>532 <td><input type="checkbox"{if $item != ""||$item == "0"} checked{/if}>{$key}</td>
535 :
nobodyさん:2006/04/07(金) 12:10:04 ID:0TErvImy
ありがとうございます!!
無事に動きました!
携帯からでスマソorz
PHP関連スレにしては異常な伸びだなw
539 :
nobodyさん:2006/04/21(金) 07:18:24 ID:qi5wvjsu
>>536のフレームワークスレを読んでて何か書きたくて来ました。
他のテンプレートエンジンvsSmartyならたくさん議論出来ると思うのですが、
ライバルがhtml+phpなのがにんともかんとも。
みんなデザイナさんが書いたhtml+phpソースで鼻血出した事無いのかなー
540 :
nobodyさん:2006/04/21(金) 07:27:03 ID:G2Rp1nFE
>>536 Smartyなら鼻血ださないで済むの?
Flexyなら出さずに済みそうだけど。
>>539 > ライバルがhtml+phpなのがにんともかんとも。
Smartyが実際にそれと同様の結果をもたらしてるんだからしょうがない。
smartyは変に機能をつけすぎなんだよな。
もうちょっと使うべきものが制限されてたら端から高機能を求めようなんて思わないのに。
そもそも目的はViewを分離(=Viewに制限)することだし、すでに十分果たせてるわな。
>>542 別に高機能でもいいじゃん
使わないように制限すれば
544 :
542:2006/04/21(金) 14:04:57 ID:???
>>543 スマン勘違い。
smartyには表示と関係ない機能が無駄についてるのかと思ってたけど、よく調べてみたらどれも表示に関連する機能だった。
smartyのキャッシュに関して質問です。
DBに接続&データを取得し、それをsmartyにアサインして、表示させています。
$obj_smarty->diplay("hoge.tpl",$id);
が一番最後にあるため、せっかくのキャッシュデータがあるにもかかわらず、その前の時点でDB接続をしてしまいます。
表示されるデータは結局キャッシュされたものなんですが。
(コントローラの)ページの先頭で、すでにキャッシュが存在するかどうかのチェックして、
存在した場合は各種処理をスキップするには、どのようにしたら良いのでしょうか?
546 :
545:2006/04/25(火) 21:03:11 ID:???
is_cachedを発見しました。お騒がせしました。
別々のディレクトリに、内容の違う hoge.php があり、
それを一つの temolate_c に出力してしまうのはやっぱ問題ありますかね
>>547 別に構わないと思うけど「temolate_c」は止めた方がいいと思う。
549 :
547:2006/04/26(水) 18:34:41 ID:???
>>548 dクス
今タイポに気付いて一人で吹きました
Dreamweaver8で、Smartyのテンプレートをデザインしたいのですが、
テンプレート内で他のテンプレートをincludeすると、ちゃんと表示されない。
で、ここに辿り着いたのですが、
ttp://smarty.incutio.com/?page=SmartyDreamweaver 最初の方でデリミタを指定できるっぽいのですが、
"{{"、"}}"と指定しても、ちゃんとincludeしてくれない。
初期設定の"{"、"}"だとincludeしてくれるんだけど…。
この設定でデリミタを変更しても、ちゃんと動いている人いますか?
<{ }>ならどうでしょうか
552 :
550:2006/05/02(火) 00:57:53 ID:???
>>551 それも"<%"とかも駄目だったよ…。
Dreamweaver側の設定も何か必要なのかなぁ。
上のコード見ても、ただデミリタを置き換えてるだけっぽいんだけど。
553 :
550:2006/05/02(火) 01:00:41 ID:???
あ。ちなみにSmartyの方の設定が間違ってるとか、
デミリタとincludeの間に、スペースが入ってるとかではないです。
("{"、"}"だとちゃんとincludeされるし)
Smartyで {$data.日本語} っていうのは無理ですよね?
日本語文字列がキーになっているのを表示したいだけなんですけど。
代替方法として(実験中の断片コードしかなくてすみませんが)
次のようなものを考えました。
(もし日本語文字列が普通に使えるのなら無駄になっちゃうんですが・・・)
その1の案はプラグインを作らなくてもいいがテンプレートが冗長になる。
その2のコンパイラ関数の案はテンプレートが冗長にはならないが、修飾子が使えない。
その3のテンプレート関数の案は冗長にはならず修飾子が使えるが、
コンパイル後のコードがコンパイラ関数よりも無駄がある。
修飾子を使いたいので、その3の方法を採用しようと思っています。
もっと良い方法や間違い・勘違いがあったらコメントください。
555 :
つづき:2006/05/02(火) 16:47:03 ID:???
その1(いったん変数に入れてから参照)
{assign var="nihongo" value="日本語"}
{$data.$nihongo}
その2(コンパイラ関数 プラグインを作る)
{var name='$data.日本語'}
【プラグイン】
function smarty_compiler_var($params, &$compiler)
{
return "echo それっぽい文字列";
}
その3(テンプレート関数 プラグインを作る)
{var name='$data.日本語'}
【プラグイン】
function smarty_function_var($params, &$compiler)
{
return $compiler->_tpl_vars[ピリオドで区切った一つ目][ピリオドで区切った二つ目]・・・;
}
その他の案として、
日本語文字のキーを使わない。
日本語文字が使えるようにSmartyにパッチをあてる。
ってのがあると思いますが、今回はちょっとやめておきたいです。
(すでに日本語文字が使えるSmartyパッチがあれば話は別です)
とりあえず、その3のコードの完成版(とりあえず動くだけ版?)です。
【サンプルテンプレート】
{foreach from=$data.details item=detail}
{var name='detail.タイトル'}<br>
{/foreach}
【プラグイン】 プラグインフォルダに function.var.php というファイル名で置く
<?php
function smarty_function_var($params, &$compiler) {
$value = $compiler->_tpl_vars;
foreach(split('[.]',$params['name']) as $param) {
$value = $value[$param];
}
return $value;
}
?>
>>554 what internal/script encoding are you using ?
>>558 どういう意味ですか?
正規表現の\wに日本語はマッチしないから
エンコードとか関係ないはずですが?
560 :
株価【99】 :2006/05/03(水) 08:17:28 ID:??? BE:18617235-#
utf8をwordwrapしているのだが、9の倍数だと文字化けが起こらん
561 :
株価【99】 :2006/05/03(水) 09:13:11 ID:??? BE:49644285-#
とおもったら嘘でした。
チックショー!!!
ワロスwww
連想配列で場合によって存在したりしなかったりするキーに関連付けられている要素を出力すると
存在しない場合にエラーになってしまうのですが、
PHPでいうところの isset() のような条件判定で回避できたりしないでしょうか?
PHPを埋め込んで一応対処は出来ているんですが、
せっかくのテンプレートファイルにその箇所だけPHPコードが入ってしまうのがなんともすっきりしません。
めんどうだけど、
default
Smartyの関数でSwitch文はかけますか?
>>566 ifでいいやろ。switchが可能だったとして、手間も可読性もあまり変わるまい
smartyでincludeしたファイルに渡した変数の参照方法を教えて
$ほにゃららか 失礼しました
569だけど
{include file=xxx.tpl value=1}
{include file=xxx.tpl value=2}
{include file=xxx.tpl value=3}
としてもxxx.tplで$valueを参照すると最初の値(1)しか入ってこないのはなぜ?
>>571 compile_dir掃除 or 関連tplを全部保存し直してファイル更新日更新してみたら?
>>572 ミスって同じ値を渡してただけだった o.....rz
ごめんなさい
574 :
nobodyさん:2006/05/29(月) 22:44:38 ID:mZUygf+D
Smartyエラーが出て困っています。Smarty.class.php on line 1450 という感じです。
エラーを読んだ限りでは、ファイルのディレクトリが違うかファイルが存在していないといった
感じだったのですが、テストしたところ動作はしていました。
インクルードパスに原因があるのでしょうか、
ちゃんとSmartyのディレクトリを指定しています。
どなたかアドバイス頂ければな、と思います。お願いします。
エスパー様!エスパー様はいらっしゃいませんか?!
>>574 コンパイルディレクトリのパーミッション確認してみそ。
577 :
nobodyさん:2006/05/29(月) 23:31:22 ID:mZUygf+D
>>576 ありがとうございます。
でもローカルなんですけど、それでもパーミッションて関係あるんですかね。
ド素人ですいません。とにかく調べてみます。
ローカルって何? LAN?
パーミッション分かってない香具師がサイト作ってもソースコード抜かれたりデータ抜かれたりするのがヲチ。
個人情報扱うサイトだけは作らないでくれ。利用者が大迷惑。
ローカルの「windows PC」だからパーミッションが無い、ってな事を言いたいんじゃないかねぇ。
エラーの内容がテンプレートファイルが見つからんとかいうのだったら草植える(w
おいらも一回あったんだけど、ソースには「smarty.class.php」て書いてあるとか。
(頭文字が小文字)
fat32ならcase sensitiveじゃなかったっけ?
Smarty.class.phpの1450行目はコンパイルファイルの読み込みな訳だが。
エラーの内容は省略せずにお願いします。
質問者はエスパーを求めてるんだよ。
そしてエスパーは現れずに、質問者は途方に暮れてVBを使い始める。
register_functionsしていない関数がテンプレートで使えてしまうんですが、異常ですか?
間違えた、register_modifierしていない関数が修正子で使えてしまうんですが
文字列処理関数はデフォルトで使えるわけですが
function hoge(){
return 'hoge';
}
function askdjaocdma(){
return 'askdjaocdma';
}
適当に関数を書いて、登録しないで{$test|hoge|askdjaocdma}と使ってみると何でも使えてしまいます。。。
関数を削除すると、無いよーとエラーにはなります。
ちなみに、$plugins_dirは弄っておらず、$smarty->plugins_dirをechoすると「plugins」だけになっていて、
「plugins」というディレクトリにはhogeと定義した関数は入れていません。
よくわからんけど、単にインクルードとかしてんじゃないの
>よくわからんけど、単にインクルードとかしてんじゃないの
インクルードするだけで使えるの?
Flexyでメソッド使うとき、引数に文字列って使えないですか?
{method('hoge')}だとエラーになってしまいます。
配列に入れたりして、{method(a[hoge])}とかするしかないでしょうか。
すみません。よーくしらべたらリテラル使えって書いてありました
ちゃんと調べずに書いてごめんなしあ><
shinoげんきか
カイハツ日記さんのhtmltemplateのページ無くなっちゃった?
単純で分かりやすくて簡単に改造も出来るし速いしで結構愛用してたんだけどな・・・
可変変数やめて配列にすれば
$form.enq[$num].label
これで出来た気がするが。
Smarty Error
Warning: Smarty::require_once(c:\php\includes\internals\core.write_compiled_resource.php) [function.require-once]: failed to open stream: No such file or directory in c:\php\includes\Smarty.class.php on line 1432
Fatal error: Smarty::require_once() [function.require]: Failed opening required 'c:\php\includes\internals\core.write_compiled_resource.php' (include_path='.;c:\php\includes') in c:\php\includes\Smarty.class.php on line 1432
なんかこういうの出てしまいました。
何か解決の糸口を教えていただけないでしょうか。
エラーメッセージを読め
以上
599です。
すみません。勘違いしてた。
includes\の中にはSmarty.Class.phpとSmarty_Compiler.class.php
しか入れてなくて、\includes\internals\なんて何処にあんだよ!!
って一人で吠えてました。入れりゃいいのね。
あーすっきり。
>>600 ありがとう!!「以上」って言葉でやっと気づいた。
ずっとPerlしかやってこなかったのに、いきなりPHPをやれと。
でもPHPってなかなか楽しそうですね。それに開発が早そう。
テンプレートの中で直接PHPを使うにはどういう風に書けばよいですか?
{<? urlencode($str) ?>}
ではエラーがでてしまいます。
できない?
直接PHPを"使わない"ために、テンプレートエンジンを利用する。
>>602 {$str|urlencode}
じゃあかんの?
php4じゃ使えないの?
>>603 柔軟さに欠ける言語は時として足かせにしかならない。
608 :
602:2006/07/25(火) 00:16:20 ID:???
できました。ありがとう。
通常、templatesフォルダ内にあるテンプレートを読み込んで表示していると思うんですが、
この場合呼び出す.phpファイルと階層が違うためCSSでデザインしにくいです。
何かいい方法ってあるんでしょうか?
hoge┬呼び出す.phpファイル
├cssフォルダ
└templatesフォルダ
として、templates内にあるHTML中では、
「<LINK REL="stylesheet" TYPE="text/css" HREF="./css/〜.css">」としておけばOKじゃない?
Smartyで途中でforeachのループから抜ける場合はどうしたらいいでしょうか。
自分なりに調べてみたんですが解らなかったです。。
それとも無理なんでしょうか。
>>612 {assign var="stop" value="0"}
{foreach}{if !$stop}
処理
{if ループ抜けたい}{assign var="stop" value="1"}{else}ループ抜けたくない{/if}
{/if}{/foreach}
こんな感じか?
Smartyに渡す前に整形しとくべきだとは思うけど
ClearSilverに興味あるんですがここはあんまり関係ないですか?
615 :
nobodyさん:2006/08/07(月) 21:34:55 ID:muOt4GfJ
【PHP】下らねぇ質問はここに書き込みやがれ 25
http://pc8.2ch.net/test/read.cgi/php/1153652403/ こちらから誘導されてきました。
鮎川寛さんの「 PHP 開発日誌 」ってサイト
どこに行ったかご存知ないですか?
そこで配布していた『HTML テンプレート』を
使いたいのですが見当たらなくて困ってます。
どこに移ったか知っている方、
もしくはPHP5 版『HTML テンプレート』を
再配布しているところを知っている方
教えてください。
617 :
615:2006/08/08(火) 20:55:09 ID:+NeExxFV
>>616 ありがとうございます!
これって PHP 5.01 版で止まってるんですね。
次のフレームワーク作るときには
別のテンプレートを採用することも考慮しないとな……
テンプレートへオブジェクト配列を渡した時に
○個目のオブジェクトのメソッドを指定する方法ってあるんでしょうか?
.php
$retarray = array();
while(fetch.....){
$o_work = new $obj;
$retarray[] = $o_work;
}
$smartyobj->assign("objs",$retarray);
テンプレート
{$objs[2]->get_hoge()}
(↑実際にはシンタックスエラーだけど、イメージはこんな感じです)
その方法でアクセスできるよ
620 :
nobodyさん:2006/08/09(水) 13:51:51 ID:z3PeQgxk
{$objs[2]->get_hoge()}
コレだと動きますね(汗
他オブジェクトメソッドの返り血を指定するとエラーになるようです↓うむむ・・
{$objA[$objB->get_hoge()]->get_hoge()}
>>620 そんなのはヘルパーメソッドを作成して、対応するしかないと思う
622 :
618:2006/08/09(水) 16:52:33 ID:???
>>621サン
レスありがとうございます。その方向で進めてみます。
しょーもない質問です。
PHP勉強しはじめたばかりの初心者なのですが、
皆さんのお勧めとかお気に入りのテンプレートエンジンって
ありますでしょうか?
例えば、
>>616のhtmltemplateとか、Smartyとか。
一通り片っ端から使ってみてレポート希望。
ぶっちゃけ作者が使いやすいと思って作った物に対して、どれだけ共感を感じるかじゃね?
どれも一長一短があるから、お勧めを聞いてもばらばらに
なるだけだと思う。
初心者というなら、
よほどのことがない限りは、どれを使っても大して変わらないと思うし。
>>623 最初は、機能がシンプルで、ソースコードを解析しやすい
>>616のHTMLtemplate for PHPを使ってみたらいかがですか?
どんな処理をしているのか、中身を分析すると、自作のテンプレートシステムも作れるようになりますね。
<着眼点>
・それを一つの足がかり=比較基準の材料として、SmartyなりFlexyなり、すでに作られている便利なやつを見ていけばよいのではないでしょうか?
・フレームワークを使う場合は、MVCのView部分と相性の良いテンプレートシステムがあるかも。
メニュー、サブメニュー、…と(操作が)階層式になってるページを画面遷移させるにはどんな構造がやりやすいでしょうか。
メニュー側のインクルードかなと考えたのですがテンプレートに余計な文字が付くのが気になり、
今は {if $inc1}{include file="$inc1"}{/if} として、includeされたテンプレートファイルでも再帰的に同様のことをしています。
セックルと同じで最初の女って重要だけどね。
最初に仕込まれた性癖ってなかなか抜けない。
きも
>>628 動物は、最初の刷り込みで、同じ事を繰り返す面があるね。
以前のものと、新しいものの「差異」を分析&比較する能力が乏しいから?
女(人間)は、プログラミング操作では作れない。
テンプレートは、プログラミング操作で作れる。自由度高し!
比較検証によって、最初のものに固執せず、常に改善していくことができると思うよ。
・Smartyがベストとは限らない。
・PHPがベストとは限らない。
保守から革新へ
(^^)/
最初にphpオナヌーを覚えてしまうと、phpオナヌーを猿の様に繰り返しちゃうよな。
今時テンプレートエンジンとか言ってるイモはどこのどいつですか?
Smartyで、テンプレファイルに
「府、本、旬」
という字があると、そこでエラーを吐いてしまうのですが、
似たような現象になった方はいらっしゃいますか?
その文字があるところでこんなんがでちゃう。
Fatal error: Smarty error: [in index.tpl line 14]: syntax error: unrecognized tag:
>>633 {literal}府、本、旬{/literal}
635 :
633:2006/08/15(火) 15:40:21 ID:???
> 634
ありがとうございます!
本とかは文字コードに中カッコが含まれてるということなんですね?
家まで行って感謝の意を伝えたいくらいです。
よこやりですが・・・
そういう文字って他に何があるんでしょう?
SJISの「表」とかとは少し違いますよね?
日本人なら $left_delimiter $right_delimiter を変更するのは基本だ
Shift_JISとかぶる
まぁ、テンプレートを Shift_JIS で書くとかしなければ良いのだけど
たまーにめんどくさいんだよね
自家製クラス作るのお勧め
>>637 携帯の絵文字を直接扱いたいとか言う状況でなければ、
Shift_JISを使わないようにするのがベスト。
もしくはinput_filterで内部エンコーディングにconvert_encoding。
Shift_JISである必要があるなら出力時に変換。
639 :
633:2006/08/15(火) 16:54:32 ID:???
なるほど〜
delimiterを {{ , }} にするようにしてみました。
携帯用とかShift_JISで出力しなきゃならない
んで、自分でテンプレート作る時は、当然EUCで書いてフィルターだ
けど・・metaタグがShift_JISで本当はEUCとか
デザイナーに説明するのめんどくさい
うむ
prefilter と outputfilter を使っているな
おそらく、結構重たい処理になっているだろうけど楽だし
そこまで、チューニングが必要なページあまりないしな
Smartyならprefilterは安定時には働かないからな。
sjisなんて使わなきゃいいのに。
8ビット時代の苦肉の策ですよ。
647 :
nobodyさん:2006/08/17(木) 12:14:02 ID:kr+Lut29
隠されたセクションを読む方法を教えてください。
common.confに
[.Database]
host=my.domain.com
と書いて、
PHPの中で
$smarty->config_load('common.conf', 'Database');
として読み込もうとしているのですが、どうも読み込んでくれません。
隠蔽セクション以外なら、読み込めるのですが・・・。
649 :
nobodyさん:2006/08/21(月) 14:55:34 ID:EaU1LrCO
携帯用コンテンツならUTF-8でいけね?
素人キャリアはまだsjisしか読めないからダメだよ
素人キャリアって何ですか?
素麺好きが使うキャリア
素人が使うキャリア
utfしかダメですってトップページに書いとけ。utfで(w
656 :
nobodyさん:2006/08/27(日) 20:59:35 ID:OoIUz1EV
Flexyについての質問です。
<script>
var hogehoge = "{hogehoge}";
</script>
のように、HTMLのスクリプトタグ内で変数を使おうとすると、「hogehoge = "{hogehoge}";」と
そのまま表示されてしまい、変数が展開されません。
設定オプションを見たのですが、それらしい設定は見つからず、
どうしれば置き返されるようになるかご存知の方教えてください。
なにとぞ、なにとぞよろしくお願いします。
それってphp使えてるの?
使えてます。他の部分は展開されてますし
もしかして、この現象自分だけなんでしょうか…?
varって宣言が明らかにだめでしょ
あとせめてlanguage属性入れておくれ
>>658 安心しろ。ウチの環境でもダメだったw
Flexyのソースは見ていないけど、scriptタグ内は無視している気がする。
気が向いたら、ソース見て究明してくれ。
>>659 この場合、varもlanguage属性は無関係では?
質問者がここに投稿する際に省略しただけかもしれないし。
<!---->コメントタグ内も無視されるみたい
scriptで変換されないのはちょっと困るね
省略しないで貼るか、ちゃんと自分で問題点切り分けして欲しいね。
あのぐらいなら普通に分かるだろ。
language属性入ろうがなかろうが同じみたいだし。
こんな記述見つけた。<script>タグは使うなということらしい。
--------------------
You can not use flexy tags {varname} in javascript blocks surrounded by <script></script>, as the whole thing gets too messy with it accidentally replacing stuff it shouldnt..
So if you need to send variables to javascript you can use
<flexy:toJavascript flexy:prefix="xxxxx_"
abc="xyz"
bcd="wxy"
/>
this is turned into php code that converts $object->xyz into xxxxx_abc in javascript
eg. in php
$this->xyz = 1234;
$this->wxy = "hello"
$flexy->outputObject($this);
using the above tags - it ends up at the browser as
<script language="javascript">
var abc = 1234;
var bcd="hello";
</script>
------------------------------
<flexy:toJavaScript>だとちょっと使いにくいと感じたので、flexyのタグ?に
{javascript:}〜{endscript:}というのを追加して、
コンパイル時に<script>タグに変換するようにしてみたら使えた。
もっと良い方法あるのかもしれんがわからん。
今まで タグのname属性に設定する値はPHPの定数を使っていたのですが、
Smartyを導入する場合、テンプレートにPHPの記述は普通しないですよね。
みなさんはname属性はどうやって設定していますか?
普通に文字列を設定すると、リクエストから取得する際に間違えるのが
だるいので、定数使っていたんですが。
↓こんな感じ
<input type="checkbox" name="<?=InputDto::CITY?>" >
{$smarty.const.HOGEHOGE}
単票フォームのビューアと編集画面を作らなきゃいけないんだけど、
ビューアと同じ出力場所にINPUTタグがつくだけなのに別テンプレートにしなきゃいけないの?
何かいい方法を><
668 :
nobodyさん:2006/09/26(火) 13:27:20 ID:??? BE:127685726-2BP(200)
freeze
>>667 ifで判断しちゃダメ?
{if $mode == "view"}
{$text}
{else}
<input type=text name=hogeoge value=$text>
{/if}
>>670 レスサンクス!
フィールドだけで50個くらい項目があるのでその方法は現実的じゃないかも><
>>671 入力と表示の時で、フォームのイベントにJavaScriptを書いて切り替えるのはどう?
ついでにCSSの属性書き換えれば、ラベルみたくできるんじゃないかな。
Web公開系だとダメかもしらんけど、業務系ぽいので許される気がする。
>>671 onLoadイベントとかで、フォーム内全体の入力オブジェクトに対して巡回して、
特定のID属性のものの属性を入力と表示で切り替えれば、
個々のフォーム入力要素についていちいち書かなくていいんじゃない?
って意味ね。
>>671 なにかプラグインを書くか
他のフレームワークを使う
freezeと書いてくれてたから何だろうと調べたら
HTML_QuickFormがまさに使えそうです。
Smarty+HTML_QuickFormで行こうと思います><
>>672 それも考えたんですが、もっとスマートに出来ないかと思いまして(汗
677 :
nobodyさん:2006/09/30(土) 23:32:17 ID:iHGhSOaN
文字コードで質問です。
php.iniの設定を
output_buffering = On
output_handler = mb_output_handler
default_charset = EUC-JP
mbstring.language = Japanese
mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.internal_encoding = EUC-JP
mbstring.substitute_character = Off
このようにして、テンプレート内で
{$data.birth|date_format:"%Y年%b月%d日"}
とすると月より後ろが
1950年1月%d日
1955年1月%d日?|
みたいに文字化けします。%dの前に半角スペースを入れると
1955年1月 14日K
と、日にちは出るのですが、日の後ろが変になります。
テンプレートもphpもeuc-jpで保存し、テンプレートのmetaタグも
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
としています。
date_formatを使っていない部分は文字化けしません。
mbstringの設定の組み合わせをいろいろ変えてみたのですが改善しません。
何かヒントをお願いしますOTZ
678 :
677:2006/10/01(日) 01:19:45 ID:F96v0AKS
ちなみに %Aで曜日を出したら(ロケールjpn)文字化けしました。
679 :
677:2006/10/01(日) 02:15:06 ID:???
げ!
phpで
print(strftime("%Y年%b月%d日"));
でも文字化けした。
Smarty関係ないじゃんOTZ
phpスレの方に行ってきます
お騒がせしました
smary の html_table で <td>中身</td> の中身を編集できるようなものってないんでしょうか?
$data = array( array( "1", "あ"), array("1", "い"), array ("2", "う"), array("2", "え" ) )
以下の用に、データのインデックス1と2をくっつけて表示させたいんですが
2x3テーブル (要素が足りない部分はスペースが代入される)
1あ 1い
2う 2え
space space
>>680 なにをしたいのか分からん
ちゃんとルールがあるならできるだろうが
PHP側で表示用にデータを加工するべきだと思う
自分でそういう関数でも作れって感じだな。
683 :
680:2006/10/02(月) 00:11:10 ID:???
拡張関数のblock で、foreachの item のような実装がしたいんですが、うまくできない;;
誰かやったことある人いますか?
{assign} を実行しているソースってどこにあるんですか?
みなさんtruncate関数って使ってます?
1バイト→2バイト文字に変換しないと化けて使いにくすぎるんですが
687 :
686:2006/10/03(火) 11:44:03 ID:???
って684さん見て気付いたけど、拡張関数ってやつで自作すりゃいいのか!
688 :
nobodyさん:2006/10/04(水) 18:30:02 ID:9Cwrgs3h
flexyの質問です。
$flexy->bufferedOutputObject()の返り値のテキストが、
<を<にしたりと特殊文字をHTML用にエンコードされたものになってしまいます。
http://pear.plus-server.net/package.html.html-template-flexy.html-template-flexy.bufferedoutputobject.html の
/* <tags をパースしないように regex コンパイラを使用する */
$template = new HTML_Template_Flexy( array(
'compiler' => 'Regex',
という部分がそれに対応するやり方のことなのかと思ったのですが、
この通りやっても変換されてしまいます。
('compiler'ってオプションの意味もいまいちわからなかったのですが)
やりたいことは、テンプレートを入れ子のような形で使いたく、
ベースとなるテンプレートを読み込み、その中でコンテンツのテンプレートを読み込みベースに挿入する、
といった感じです。
しかし、挿入された部分のタグの特殊記号が変換されてしまって参っています。
何かよい方法はないでしょうか。
宜しくお願いします。
689 :
688:2006/10/04(水) 18:32:48 ID:9Cwrgs3h
すいません ミスりました
3行目は
× <を<にしたりと特殊文字をHTML用にエンコードされたものになってしまいます。
○ <を<にしたりと特殊文字をHTML用にエンコードされたものになってしまいます。
です
>>687 組み込み関数はそのままでも呼べるけどね
>>688 bufferedOutputObjectの結果を$varに入れたとして、
{var:h}
では駄目?
または適当なElementのoverrideプロパティを利用するという手もあるが…
<div id="hoge" flexy:dynamic="yes">
この要素は別のテンプレートの内容で置換される
</div>
$elms = $outerFlexy->getElements();
$elms['hoge']->override = $innerFlexy->bufferedOutputObject($obj);
692 :
688:2006/10/04(水) 23:37:08 ID:???
>>691 ありがとうございます!
ご教示いただいたどちらの方法でもできました。
:hは恐らく基本的なことですね。勉強不足でした。
693 :
nobodyさん:2006/10/07(土) 00:03:58 ID:/6hITEc2
smartyでセッションの受け渡しってどうするのですか?
ゆうぱっくで
>>693 PHP標準のセッションなら通常通りに設定すれば通常通りに受け渡し可能。
漏れはいつもEMS使ってる。500円で送れるし。
セッションをudpで送るとルータに廃棄されてしまうことが有るので、tcpを指定して送れば良いよ。
tcpならルータが廃棄することは無く送れるから。
いやいや、tcpでも、mtu、mruが足りなくて捨てられる事あるよ
mtuは1500にしとけばどんな回線でも問題無く通るよ。ルータがちゃんとフラグメントしてくれるから問題無し。
pptp通す時は、1500じゃ多すぎるよ
って、ネタ無いのか!
VPNのルータがフラグメントしないのが悪い。
mtuの設定が間違ってる。1430ぐらいなのに1500で設定してるだろ?
703 :
nobodyさん:2006/11/03(金) 23:22:04 ID:N9Ney0mM
hoge.tplに多次元配列を渡して、配列内容を検索しヒットした内容のKEYを戻り値として、取得したいんだが…
PHPで言うところの、array_searchみたいなやつ。
何か方法ないかな? ボスケテ;;
>>703 だれが取得したいの?
テンプレートからテンプレートを呼ぶってことか?
705 :
nobodyさん:2006/11/04(土) 21:15:17 ID:+XTG9Sit
{foreach from=$list1 key=key item=value}
<table>
{foreach from=$list2 key=id item=item}
<tr>
<td>{$item.name}</td>
<td>{$value.keyname[$id]}</td> ← ここ
</tr>
({/foreach})
</table>
({/foreach})
のように、本来ならkeyname.id1 keyname.id2 keyname.id3というところを
内部のforeachのインデクサを配列の添字として使用したい。
何かいい方法ないものかなぁ?
データ構造を見直してみるとか。
てか多次元配列じゃなくね?
前からたまにあがるけど、それ無理
ロジック側でなんとかしる
>>705 foreachのプロパティのiterationじゃダメなの?
{section name=cnt loop=$hoge}
{/section}
上記のような場合に
{section}間でcntに1加えた数字を使いたいと考えています。
どのようにすればいいでしょうか。
iteration
このぐらい理解できないと、クラの言ってる事理解できないぜ^^
Smartyって PHPで変数の有無をチェックするのに
if ($hoge){}
と書いてたように
{if $hoge}{/if}
って言う使い方は出来ないんですよね?
(やってみたらうまく動きませんでした)
わざわざ別の変数を用意して
{if $check_hoge == 1}{/if}
みたいにしないといけないんでしょうか??
{if isset($var)} ってできなかったっけ
717 :
714:2006/12/28(木) 14:04:09 ID:???
718 :
nobodyさん:2006/12/29(金) 17:59:05 ID:Oa9zj9TG
Smartyで{$obj->getObj->getName()}ってできる?
719 :
nobodyさん:2007/01/07(日) 17:56:17 ID:lgQgqthI
誰か答えてやれ
呼んだ?
テーブルの各行の中にチェックボックスを入れたいのですが
html_tableとhtml_checkboxesを組み合わせて使うようなことはできますか?
>>718 {$obj->getObj->getName()}はできない
>>683のURL先を参考に自作関数を入れようとしたのですが
スクリプトと同じ場所にコピーすれば実行できたんですが
この関数の名前のファイルを作ってpluginsフォルダに置いておけば
自動的に読み込んでくれたりできないんでしょうか?
今は置いたとしても
syntax error: block function 'html_table_block' is not implemented
とエラーが出てしまいます..
724 :
133:2007/01/12(金) 17:51:59 ID:???
特定の文字がHTML内にはいっているとエラーになるのですがこれは何なのか分かりますでしょうか?
Smarty error: [in hoge.html line 19]: syntax error: unrecognized tag: 投票
この場合、「投票」という文字を消すと動作します
0x5Bだと思うけど情報が少なすぎて原因は分からん
取り合えず{literal}{/literal}で囲めば逃げられると思う
726 :
nobodyさん:2007/01/12(金) 22:28:58 ID:3JXbZGmD
開始タグを2文字以上にする手もある。
開始タグを<!--{ 終了タグを }--> にするとか。
728 :
nobodyさん:2007/01/16(火) 11:38:11 ID:JtgOvcxU
XOOPSなんかはデリミタを <{ と }> にしてるみたいだね
俺もなんかあったら面倒なのでそうしてる
ところで Smartyで改行(nl)を無効にする命令ってないのかな?
ヘッダーのキーワードをページごとに変更できるように 変数を入れてSmartyの
Sectionで挿入しようとしたんだけど ソースが改行されて汚い
tplファイルを改行ナシにしたらいけるんだろうけど それだとファイル変更時
にわかりにくくなるしなぁ
>>728 $hoge|str_replace じゃあかんの?
730 :
728:2007/01/16(火) 15:27:15 ID:???
>>729 str_replaceをはじめて知ったド素人にレス感謝です
調べたところstr_replaceって置換ですよね? 置換じゃ無理っぽい 多分
説明が悪かったかもしれないのでもう一度
Smartyのテンプレートファイルにおいて
<head>
<meta name="Keywords" content="…,…,…,…,
{if isset($keyword)}
{section name=keyword_no loop=$keyword}
{$keyword[keyword_no]},
{/section}
{/if}
…,…" />
</head>
731 :
728:2007/01/16(火) 15:27:49 ID:???
ってやってるんですが 出力されたHTMLのソースを見ると
<meta name="Keywords" content="…,…,…,…,
キーワード1
キーワード2
…
…,…" />
と改行されてしまうのが嫌だなと言うことです
テンプレートファイル中で改行してることから それが原因だろうとは思う
のですが 改行ナシにするとテンプレートファイルを見ると汚くなるので
それは避けたいです
(今後他人に仕事を振る可能性もあるし)
で テンプレートファイル中の改行を 出力するHTML上では無効にすることが
出来る命令があればなぁと思ったのです
textformatで出来るかな? と思ったけど無理っぽいし…orz
{strip}{/strip}
733 :
728:2007/01/17(水) 13:15:30 ID:???
>>732 ありがとうございます!! 出来ました!!!
っやっぱり暫定マニュアルだけではなく 書籍も買わないといけませんね…
キャッシュの有効期限を延ばすにはどうすればいい?
質問です。
WindowsXP+IIS5.1+PHP5.2+Smarty2.1.16 を使用すると、
以下のようなエラーが画面に表示されてしまいます。
URL:
http://localhost/dash/test.php Warning: Smarty::include(templates_c\%%D9^D9B^D9B21B55%%test.html.php)
[function.Smarty-include]: failed to open stream:
No such file or directory in C:\Inetpub\wwwroot\dash\libs\Smarty.class.php on line 1258
Warning: Smarty::include() [function.include]:
Failed opening 'templates_c\%%D9^D9B^D9B21B55%%test.html.php' for inclusion
(include_path='.;c:\php\includes;c:\php\PEAR;c:\php\smarty')
in C:\Inetpub\wwwroot\dash\libs\Smarty.class.php on line 1258
C:\Inetpub\wwwroot\dash\templates_c フォルダに
コンパイルされたphpファイルができません。
コンパイルができないみたいです。
WebサーバをApacheにするとうまくいくのですが…
Smartyを使用する場合、IISの設定で変更しなければいけない箇所があるのでしょうか?
>>735 ごめん、すでにあるキャッシュファイルの有効期限を延ばしたいんだ。
それを知りたい。
Smartyってファイル単位でキャッシュの有効期限制御していたっけ?
>>737 特に設定する必要はないと思うけど
Smarty.class.php の _compile_resource メソッドがどんな動きをしているか
見たほうがいいかも
smartyの
section内で$hoge[$foo]みたいなことしたいのですが、どのようにやれば出来ますでしょうか?
{section name="val" loop=$data}
{$hoge.$foo[val].name}
{/section}
でできませんでした…
>>738 キャッシのexpiresんとこのタイムスタンプ書き換えれば延ばせる
なぜそんなことがしたいのか分からないけど
HTML_Template_Flexyのテンプレートに
{hoge}
と書いたら、php側のhoge変数の中が展開されると思いますが、
これを、
{hoge}そのものを出力したい場合、テンプレートにどう書けばよいでしょうか?
\{hoge\}
とか
{{hoge}}
とか試してみたんですが、無理でした…。
?#123;hoge?#125;
とか
あら失敗
?は&ね
デリミタを変えたらダメなの?
>>744 {hoge}
と出すのは無理すかね?
なぜかというと、これをファイルに出力して、またFlexyのテンプレートとして食わせたいのです。
>>746 {hoge}
を、通常通り置換したい場合もあるので、デリミタそのものを変えるのではまずいのです。
お二人ともレスありがとう。
説明不足ごめんなさい。
748 :
nobodyさん:2007/01/18(木) 18:26:03 ID:u6x8DYYx
テンプレート中からPHP関数を利用して、
オブジェクトの生成をし、
Smartyのassign関数にアクセスするメソッドを利用しようとすると、
Fatal error: Call to a member function assign() on a non-object
in C:\Program Files\Apache Group\Apache2\htdocs\test\index.php on line 7
と返されてしまいます。
ならべく、テンプレート内にPHPを書きたいのですが、
(本来のSmartyの利用意図に背くのは重々承知です。)どうすればよいでしょう。
--index.php
<?php
require_once('Smarty/libs/Smarty.class.php');
class Headline{
public $oSmarty;
public function __construct($oSmarty){$this->oSmarty=$oSmarty;}
public function get_data(){$this->oSmarty->assign("test","テスト");}
}
$oSmarty=new Smarty();
$oSmarty->template_dir='./templates/';
$oSmarty->compile_dir='./templates_c/';
$oSmarty->display('test.tpl');
?>
--test.tpl
test
{php}$oHeadline=new Headline($oSmarty);$oHeadline->get_data();{/php}
{$test}
>>747 {ldelim}hoge{rdelim}
マニュアル嫁よ
>>748 > {php}$oHeadline=new Headline($oSmarty);$oHeadline->get_data();{/php}
new Headline($GLOBALS['oSmaert']);
ってするとどうだろう。
>>742 なるへそ。さんくし。
データの取得に失敗した場合に備えて、そうしようとしただけなんだに
753 :
748:2007/01/18(木) 20:03:22 ID:???
>>750 出来ました!
本当にありがとうございました。
755 :
743:2007/01/18(木) 20:33:24 ID:???
>>754 でも、まぁ意味はそういうことです。
Smartyでいうところのそれに当たるものが、HTML_Template_Flexyでありませんか?
ってのが聞きたかったんです。
なんか無さそうな雰囲気ですね…。
756 :
nobodyさん:2007/01/18(木) 20:59:51 ID:oKlCOyd1
{smarty_header http_equiv="Content-Type" content="text/html"}
<?xml version="1.0" encoding="EUC-JP"?>
このように、XML宣言の前に関数を使うと、XML宣言の前に
空行が出力されてしまいます。これはXHTMLにおいて致命的な文法エラーになってしまいます。
smarty_header関数は header() でHTTPヘッダを出力するだけだし、
プラグインファイルは終了タグの '?>' を省略しているので文字列は出力していないはずです。
コンパイルされたファイルを見てみたら以下のようになっていました。
<?php echo smarty_function_smarty_header(array('http_equiv' => "Content-Type",'content' => "text/html"), $this);?>
<?php echo '<?xml'; ?>
version="1.0" encoding="EUC-JP"<?php echo '?>'; ?>
757 :
741:2007/01/18(木) 21:21:15 ID:???
やっぱりこんな複雑なことはできないのでしょうか??
お願いいたします
>>757 > {section name="val" loop=$data}
> {$hoge.$foo[val].name}
> {/section}
{$hoge[$foo[$val]].name}
でどぉだ。
>>749では完全に寝惚けてて、
>>750でもtypoしているグダグダな状態なんで
イマイチ思いだせんのだが、これでダメならバッククォートを使ったりかどうかで
出来たはず。
>>755 多分無理だと思う。メソッドを介した方が早いんじゃない?
function p($flexyVar) { return "{". $flexyVar ."}"; }
{p(#hoge#)}
{p(#hoge.bar:h#)}
##の中に#だけはどうやっても書けないから、
メソッド呼び出しを書きたいならもう少し工夫が要るけどね。
>>756 header();ってどこに書いてもよかったような気がするんだけど
1行目と2行目を入れ替えるのはだめ?
だめなら改行せずにxml宣言も1行目に書くか{strip}{/strip}
stripが誤作動するならliteralで
>>756 smarty の仕様だね
>>760も書いているけど、改行せずに1行に書くようにしないとだめっぽい
smartyの出力のときに自動的にサニタイズさせるにはどうすればいいですか?
助かりました、ありがとうございます。早速やってみます
>>763 再度で申し訳ありませんが、foreachを使っているせいか
Warning: htmlentities() expects parameter 1 to be string, array given
となって表示されませんでした・・・。
{$hoge}と出しているところだけエスケープしたいのですが、そういう方法はあるんでしょうか?
default_modifiersは配列でもオブジェクトでも何でもかんでも適用しようとするからイマイチ使えない
Smartyにサニタイズさせたいのなら普通に修正子を指定するか、nodefaultsを使うか
ソースいじってdefault_modifiersの挙動を変えるかしかないと思う
>>766 文字列ならエスケープ、配列なら無視する修正子をつくって指定するのがいいかと。
そもそもテンプレートにある要素全てを
自動でHTMLエスケープするってのは良くないような
必要ないもんにまでかけちゃうし無駄なオーバーへッドにもなるし
>>766-768 皆さんありがとうございます。
とりあえず自分で修正子作ってやってみます。
ちなみにこういった方法は一般的ではないんでしょうか?
Smartyを最近勉強しはじめました。
凄く単純な事ですが、いろいろ調べたのですが、どうしても実現できなくて質問させていただきます。
テンプレートから外部テンプレートを組み込む時に、
{include file="/root/dir/html/templates/XXXX.tpl"}
といった感じに記述しますが、この中で、変数を使いたいのです。
"/root/dir/html/templates/"の部分を変数に変えて、ディレクトリ構造を一元化して管理したいのです。
PHPの構造でいうと、"{$base_dir}/XXXX.tpl"と言った感じで、
ディレクトリ構造が変わっても、ファイルを直接弄ることなく、変更できるようにしたいのですが、やり方がわかりません。
つまり、呼び出し元のPHPプログラムで設定ファイルを読み込み、テンプレートの保存されているディレクトリ構造を読み取り、
それをテンプレートファイルに渡して、その渡した値を元に外部テンプレートを呼び出すようにしたいのです。
これを実現するには、どのように記述したらよろしいのでしょうか?
すみません。書き忘れました。
ディレクトリ構造の値は配列で渡したいのです。
$dir['base']="/root/dir/html/templates";
$smarty->assign("dir",$dir);
と言った感じでわたして、テンプレートの中で
{include file="$dir['base']/XXXX.tpl"}
と言った感じで仕様したいのですが、上記のコードを書くと以下のエラーが出て使えませんでした。
Warning: Smarty error: unable to read resource: "Array['base']/header.tpl" in /xxx/yyy/html/libs/Smarty.class.php on line 1095
根本的な記述方法の間違いかもしれませんが、宜しくお願いいたします。
Apache2
PHP5
Smarty2.6.16
の環境で勉強しております。
dir.base
>>772 すみません。それでも同じエラーが出てしまいます。
dir.base
Warning: Smarty error: unable to read resource: "setting.base/header.tpl" in /xxx/yyy/html/libs/Smarty.class.php on line 1095
$dir.base
Warning: Smarty error: unable to read resource: "Array.base/header.tpl" in /xxx/yyy/html/libs/Smarty.class.php on line 1095
774 :
nobodyさん:2007/01/22(月) 18:16:45 ID:Eh2tk1di
>>773 {include file="`$dir.base'/xxxxx.tpl"}
`(バッククォート)で $dir.base をくくらないと、どこまでが変数か
Smarty が解釈できなくなっている
{include file="`$dir.base`/xxxxx.tpl"}
おっと、間違えた。
後ろが`になっていなった
>>775 が正解だな
>>774 ありがとうございます。
無事、実行できました。
いろんなサイトを見て回ったのですが、バッククォートのことは初めて知りました。
本当に勉強になりました。ありがとうございました。
>>779 すみません。。。お返しする言葉もございません。
そのマニュアルも一応目を通したつもりでいたんですが、、、
日々精進していきます。
なんかくだらねぇ質問スレでやたらSmartyを押している奴がいるから、
このスレにPHPのイロハも知らないバカが押し寄せてくる悪寒が…
(略
デザイナーがSmartyのtplを大量に作り上げてくれたんですが、
こういう場合でフォーム系のタグに変数埋める作業でもやはりシコシコと手作業するしかないんでしょうか。
宜しくお願い致します。
>>783 You, Flexy 使っちゃいなよ。
smartyで
{$hoge[$foo->getId()]}
とやると
syntax error: unrecognized tag:
が出るのですが,このようにやりたい場合はどうすればいいでしょうか?
787 :
nobodyさん:2007/01/26(金) 20:10:51 ID:iZlZkVla
お願いします
788 :
nobodyさん:2007/01/27(土) 10:35:51 ID:e0oRsoDR
idをassignしちゃえば?
まんどくせえけど
>>770と全く同じことで悩んでました
バックスラッシュは試したんだけど $`hogehoge`と囲ってたのでエラーでした
まさか`$hogehoge`とするとは… PHPでは${hogehoge}なのに…
>>770とそれに回答していただいた皆さんに感謝です
790 :
789:2007/02/02(金) 12:16:25 ID:???
×バックスラッシュ
○バッククォート
…なんて勘違いを…アホですいません
smartyでswitch文って使えないんですか?
{if}{elseif}でつなげばええんちゃうん。
プラグイン書けば使える
PHPのコードをベタ書きすれば使える
なるべくロジックをテンプレートに入れないように
処理を変える方がいいと思うけどな
うむ、テンプレート側でにswitchがどうしてもないと困るような状況なら
それはロジック側や構成を見直した方が良いっていう警告
じゃあユーザ種別で表示するメニューを変更させる場合は、どこで分岐するのがいいんでしょうか?
そのユーザ種別であらかじめメニュー部分の
テンプレートパーツ名を決めて、メインのレイアウトテンプレートから
includeするファイルを変えるとか色々方法あるんじゃない?
ユーザ種別メニューアイテムをコントローラから押し込むか、
モデルから引っ張ってくるかのどちらかじゃね。
ビューで切り替えるもんじゃないような気がするが。
798 :
nobodyさん:2007/02/06(火) 20:28:11 ID:adz0uOuq
質問です。phpBB2が使用しているフレームワークってなんていうフレームワークなんでしょうか?
いま、phpBBのソースコードを解読・勉強していて疑問になりました。
>>798 独自じゃないの
ネタとしてはスレ違いだよ
800 :
nobodyさん:2007/02/15(木) 19:29:02 ID:t/XW6gI0
smartyでの演算時に、計算を優先する括弧ってどう書けばいいのかな?
(3 + 2) * 5
みたいな感じなんだけど。
`(3 + 2) * 5`でできない?
802 :
nobodyさん:2007/02/16(金) 10:58:20 ID:qBGQeHi7
>>801 それがうまくいかないんですよね。
{if '($smarty.foreach.loopname.iteration-9)%3'==0}
こんな感じで処理を行いたいんのですが。
804 :
800:2007/02/16(金) 11:16:20 ID:qBGQeHi7
よくわからないけど、いろいろやって、以下のやり方で出来ました。
{if ($smarty.foreach.hobbyloop.iteration-9)%3==0}
自分の勘違いだったぽい。レスサンクスでしたー。
煽りじゃなくて、Smarty勉強してて思ったんだけど、
テンプレートファイルに
{if $item <0} 〜HTML〜 {/if}
って書くのと
<?php if($item <0 ){ ?>
〜HTML〜
<?}?>
って書くのと、基本的にテンプレートの中身は変わらない事無いか?
WEBデザが使いやすいだろうと思ってSmartyでデザインとソースを分離
しようと思ってたんだけど、テンプレートにSmartyのソースが入るんだから
やっぱり、PHPの知識がいるわけで、普通にPHPのソース書くのと違わない
気がするんだけどな・・・。他にメリットある?
>>805 >WEBデザが使いやすいだろうと思ってSmartyでデザインとソースを分離しようと思ってたんだけど
もうわかっただろ?それをやるにはSmartyだけじゃ無理だって事だ。
俺は表側っつかwebのツラのほうを作る側だから、php系のサイトで
うっかりロジック部分を触って壊したりしないかと常々おびえてて、
そんでsmartyの勉強始めたとこです。
今は1by1の分業体制だけど、これから人増やす可能性も高いので
コード側やってる相方さんも、自分がざっくりphpでプロト書いて
俺にデザインをつけさせる、という路線だとメンテ性とか可読性の面で
もう限界だと思っているみたい。
逆に言えばそういうコラボ体制とかでなければ、php直書きのほうが
効率いいのかもしれないなあ。
808 :
805:2007/02/22(木) 22:45:21 ID:???
>>807 デザ側の立場として質問なんだが、
>うっかりロジック部分を触って壊したりしないかと常々おびえてて、
って書いてるけど、現在は勉強してある程度PHP使えるようになったの?
それとも、完全にソースの部分は触らないようにしてるの?
だいたい、テンプレートと言ってもヘッダーとフッターを分けてincludeする
ようにしている場合が多いし、そんなんじゃ、Dreamweaverでも編集しづらいし、
デザ側のメリット無いと思うんだよな。
他スレとかでやたらこういう話が出てきたり、オブジェクト指向とか言われるけど、
それが他の人間と共同作業する上で、本当に役立つのか疑問に思えるんだよ。
もちろん、出来て困らないだろうけど、807のように、スキルを学ぶ必要あるしさ。
>>808 一応変数追っかけてデバッグとか、DB自体のフィールドを増やさないような
簡単な書き足しぐらいはしてます。でも、やっぱりphpのソースのなかに
丸裸でいろんなものが散らばってるのは神経使います。冒頭に分離されてるなら
まだマシだけど、if文で配列をあるだけテーブル化して表示、みたいな奴だと、
html部のど真ん中に来ちゃいますし。
トラブルが起きたときにどっちが悪さしたのかわかりにくいし、片方が
(他人もDWで編集していることを前提にコラボ系機能が作り込まれている)
DWで、もう片方がテキストエディタで「同じファイルを」いじる、というのも、
作業的にはちと筋が悪いと思ってます。
includeは積極的に使っていきたい仕掛けではありますが、確かに
CSSベースでもテーブルベースでもDWでの編集が困難になるのですよね。
「head部はinclude・その他はDWのライブラリ」というスタンスの方が
web系の人員を増員する方針で考えるなら、むしろ好ましいのかな。
ロジックとデザインの分離は、現実的な問題として *完全には* 無理だと思うな。
でも、テンプレートタグはHTMLデザイナ向けに簡単な設計となっているはずだから
PHPコードをベタ書きするよりはマシかなって。
>>809 なるほど。ま、やっぱりデザイナー側も勉強する必要はあるって事だな。
>>810 >>805のようなソースの場合、べた書きするのと、{}で囲ってsmarty方式に
するのと、違いがあんまり無いと思うんだよな。
まぁ、forearchとかsmarty方式の方がソースは短くなるけどさ。
>>805 そうそうあんまり変わらないと思う。むしろ「 { 」入れてエラー出て困ってたデザイナさんも居た。
でもhtmlソースに出ない{* 〜 *}形式のコメントは活用できると思う。
813 :
nobodyさん:2007/02/23(金) 01:15:09 ID:CtBpLmme
HTMLをプログラマーの物にすればいいんじゃね?
>>805 うちの場合ケースバイケースだけど
表示するか否かというフラグを渡しておいて
{if $hasItem}表示内容{/if}
と出来るようにしたり
条件が複雑だったりよく使うような物だったら
ブロック関数作って
{logined}
ログイン時用の表示
{/logined}
みたいに出来るだけ単純に書けるようにしてるよ
オーサリングツールとの連携は難しいね
Flexyとかだとなんとかなるのかなと思うけど
Smartyは、他のテンプレートエンジンに比べると
何倍も遅いって聞くんだけど、そんなに大きな差があるの?
817 :
nobodyさん:2007/02/23(金) 15:03:37 ID:CtBpLmme
>>815 我慢できなきゃ、Zend Optimizer入れれば。
smartyのテンプレートのHTTPヘッダを変えることはできないのでしょうか?
テンプレートでCSVファイルを作り、それをダウンロードさせるようなことがしたいのです。
少し上の方に書いてあったsmarty_headerという関数をテンプレートに埋込んでみたのですが、
エラーが発生(関数が存在しない)し、使うことができませんでした。
>>818 >エラーが発生(関数が存在しない)し、使うことができませんでした。
プラグイン関数用ディレクトリのパスが通ってないだけだろ。
smarty_header なんてなかったと思うぞ
上のやつは自分で作ったプラグイン例としてsmarty_headerって
書いていたと思う
822 :
756:2007/02/26(月) 12:08:17 ID:???
>>818 とてもシンプルなプラグイン:
{smarty_header http_equiv="Content-Type" content="application/octet-stream"}
{smarty_header http_equiv="Content-Disposition" content="attachment; filename=myfile.csv"}
私が定義した関数です。
plugin/function.smarty_header.php
function smarty_function_smarty_header($params)
{
header("{$params[http_equiv]}: {$params[content]}");
}
823 :
818:2007/02/27(火) 02:39:59 ID:???
プラグインのソース、ありがとうございます。
ですが作成されたファイルの内容がブラウザに表示されるだけで、ダウンロードのダイアログは表示されませんでした。
エラー文言ですが、
Warning: Cannot modify header information - headers already sent by 〜
と表示されます。
エラー文言が表示されることで既にHTTPヘッダが出力されてしまったのかもしれないとおもい
php.iniのdisplay_errorsをOffに倒して実行してみましたが、変わりませんでした。
やはり無理なのでしょうか。
825 :
756:2007/02/27(火) 07:35:44 ID:???
>>823 {smarty_header ...} は文字を出力する前に呼び出さなくちゃだめだよ。
> 覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは
> PHP からの出力にかかわらず、すべての実際の出力の前にコールする必要があることです。
> 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に
> 空白または空行があり、header() の前に出力が行われてしまうというものがあります。
> 同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。
826 :
818:2007/02/27(火) 23:11:30 ID:???
>>824 >>825 ありがとうございます。
>頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に
まさにこれでした。
824さんが提示してくださったページは知っていたのですが、理解していませんでした。
あと皆さん、smartyとは関係のない質問をしてしまい済みませんでした。
そういえば以前、未踏で完全分離を目指したテンプレートエンジン作ってたよな。
デザインの分離を考えるとFlexyはよく出来てると思う。
ただ、痒い所に手が届かないが。
>>827 そこの人、日本人だから以前は日本語のドキュメントもあったぞ。
今は無いみたいだが。
一年前使ってみた感想は、時期尚早って感じだったかな。
メインはrubyみたいで、phpのサポは片手間って感じ。
ドキュメントに書いてあるのに実装してない構文とかも確かあったし。
(and preg_matchの配列の渡し方を間違えて、毎回初期化してるんで動かなかったりしたのを修正したのを覚えてる。)
>>830 Flexyは結構面白いんだが、「構文解析が出来る」ものだから、かなり無茶な構文を定義しているような感じがする。
以前いじった時は、スタイルシートで{hoge:fuga}のように最後のセミコロンを省略したりした場合、
Flexyのプラグインを見に行ったような・・・
これまた1〜2年前にいじったきりなんだが修正されたのかな?
よくありがちな、こういう形のページを作るとき
みなさんははどのように作ってますか?
(仮にSmarty使用として)
1. 各コンテンツ.tplから、ヘッダ、フッタ、ナビをconfigから置換。
2. 各コンテンツ.tplから、ヘッダ.tpl、フッタ.tpl、ナビ.tplを読込み。
3. 全体デザイン.tplから、ナビ.tplとコンテンツ.tplを読込み。
4. 全体デザイン.tplから、コンテンツ.tplを読込み、
コンテンツ.tpl内でさらにナビ.tplを読込み。
┌─────────────┐
│ ヘッダ(静的) │
│┌─┐┌────────┐│
││ナ││ ページごとの ││
││ビ││ コンテンツ(動的) ││
││ ││ ││
││静││ ││
││的││ ││
│└─┘└────────┘│
│ フッタ(静的) │
└─────────────┘
私は全体のデザインを作ってしまって、
中身だけ入れ換える方式(上記3、4)が好きなのですが、
デザイナーにとっては、ファイル構成が直感的で
無くなるような気もします。
みなさんはどうしてるか参考までに聞かせてください。
>>832 ナビの部分はコンテンツごとに切り替えることがあるので、おれは3で。
まあ普通3だわな
デザイナーはhtmlベースな状態で管理を行って
デザインに更新があったらその都度プログラマが
変更点を確認して実際のテンプレートファイルに
手を加えるってのが一般的なんじゃないの
直感的なファイル構成にこだわる必要なんて無いと思うぜ
3,4の中身入れ替えって
全体デザイン.tpl に読み込む中身.tpl を選択する
分岐入れるってこと?
俺は良く2のパターンで作るなぁ。
デザイナさんに各ページをHTMLで作ってもらって
基本的にはそれを.tplに置き換えてから手を加える感じ。
>>832 俺はナビ部分が完全静的の場合なら、1をよくやるな。
正確に言えば、全体デザイン.tplからヘッダ・フッタ・ナビを完全固定状態で…って感じだけどな。
でも、ナビも動的にする場合がおおいので、結果として、3みたいな感じになることがおおい。
3の場合ってつまり
各コンテンツ.php内でコンテンツtpl名を変数に割り当てindex.tplを読み込み
index.tpl内で静的なヘッダ・フッタ+動的なコンテンツtplを読み込み
って感じ?(ナビ略)
838 :
nobodyさん:2007/03/06(火) 12:16:59 ID:25mpWck5
括弧の中を先に計算させたくて、以下のようにしたら...:
{section ... start=`($foo.bar-1)*($smarty.const.CONSTANT)` ...}
このようなエラーが出ました:
Fatal error: Smarty error: syntax error: $smarty. is an unknown reference
これはどうしたらよいのでしょうか?
839 :
838:2007/03/06(火) 12:36:12 ID:25mpWck5
計算を優先させる括弧は、{math}でなら使えるみたいだけど、「効率が
悪いので、スクリプト側で計算させてテンプレートに振り分ける方が良い」という
ことが書いてあったのでそうします。
>>835 私の場合は、各アクションの最後にどのコンテンツtplを使用するか送るようにしてる
メニューの部分は、全アクションに継承されたクラスのコンストラクタか、
アクション終わってからセットかな。もしくはtplから直読み。
ちなみに、
>>837の言っている通り、全体デザインtplに送るのは決定されたテンプレート名だけの変数で
読み込む場合は{include file=$contpl}って感じね。
>>832です。
>>833-837,840-842
ありがとうございます。
デザイナ側からの視点だとまた違うんでしょうが、
プログラマ側からでは、3が多数という感じですね。
普段こういった事を同業に聞くこともないので
面白かったです。
3、4の全体ページってもしヘッダでちょろっと変更があったら
ほぼ全部のテンプレートを変更しなきゃいかんよね?
(DWのテンプレ機能とかはおいといて)
文章が分かりづらくてスマソ…。
なんで?
>>844 んなわきゃない
ヘッダやフッタに変更があってもレイアウトテンプレートを修正するだけだ
どう勘違いしてるんだ?
>>844 何が言いたいのかさっぱりわからない
全体ページは共通だろ
848 :
844:2007/03/09(金) 16:44:05 ID:???
スマンです。頭が悪くて把握できていないんですが、
まず全体ページ(例:all.tpl)を呼んで、その全体ページ(all.tpl)のなかで{include 各コンテンツ}を
呼ぶってことでしょうか?
そうそう
851 :
844:2007/03/09(金) 17:32:37 ID:???
852 :
nobodyさん:2007/03/10(土) 10:44:25 ID:GgSEfqVF
smartyで可変変数って使うことができないのでしょうか?
{${$loop[loop].name}}
{$$loop[loop].name}
という2つはエラーになりました。
{$loop[`$hoge`].name} で出来なかったっけ
最近Smarty使ってねえから間違ってたらすまんな
854 :
852:2007/03/10(土) 11:44:36 ID:GgSEfqVF
>>853 ありがとうございます。
しかしちょっとそのやり方がわからないです。
具体的には
$loop[0]['name'] = "a40";
$loop[1]['name'] = "a43";
$loop[2]['name'] = "a58";
のように数字が続いています。
で、sectionの中で
{$a43}や{$a58}などの変数を呼び出したいのですが、どうもうまくいきません。
section が複雑にネストしてるので配列で渡すのはちょっと無理っぽいので、可変変数でなんとかしようと思った次第です。
テンプレートの if 文中で
{$var}.cde
という文字列を使いたいのですが、どのように記述すればいいでしょうか?
{if $var.cde == .....
では$varの配列とみなされてしまうようです。
856 :
855:2007/03/10(土) 11:49:03 ID:???
すいません、、、、
smartyです。
>>854 そういうことか。無理なんじゃないかな。
定数値であれば、$smarty.const.$hoge で取れるんだが、
そんな方法で変数参照出来たら、逆に危なくて仕方ないしな。
設計から見直したまえ。
>>855 // $smarty->assign('var', 'ab');
{assign var="str" value=$var|cat:"cde"}
{if $str == "abcde"}ok{/if}
859 :
nobodyさん:2007/03/13(火) 22:56:37 ID:QJkFtOhT
{$smarty.session.id}でセッションIDが表示されるはずだよな?
なんで、俺だけ出ないのか教えてくれ。
セッションを開始していない
ずっと俺のターン
phpとDBがutf8で、実行の際にoutputハンドラでsjisにして出力してます。
smartyのテンプレ作成をutf8でお願いしますとデザイナに頼んだら、
「DWの設定まんどくさだから、sjisじゃなきゃダメ」と言われたので
smartyのautoload_filtersで、sjisテンプレをコンパイル時にutf8変換してます。
php(utf8) ← DB(utf8)
↓
smartyテンプレ(sjis) → smartyコンパイル(utf8) → 画面出力(sjis)
このように、すごーく無駄な文字コード変換が2回も入ってしまいます。
なんか他にいい方法ないでしょうか?
863 :
nobodyさん:2007/03/18(日) 02:43:21 ID:CdbythRU
>>862 assign時にShift_JISに変換すればいいと思う。
php(utf8) ← DB(utf8)
↓
assign
↓to sjis
smartyテンプレ(sjis) → smartyコンパイル(sjis) → 画面出力(sjis)
Smartyの仕組みは知らないけど、assign時にコールバック処理を入れられるな
らそれを使えばいいし、無ければSmartyのラッパークラスを用意すればいい。
>>862 デザイナ殴ってでもutf8に変更させる。
DWの設定ってそんなメンドかったっけ?
頻繁に更新するものじゃなかったら、
>>862さんがutf8にコンバートするとか。
DWの設定でエンコード決められてどうするんだよw
往復ビンタしてから
男から殴れ女なら犯せ
結局無駄な処理が入る事になるから
>>864の通りデザイナにUTF8で書いてもらうのが一番良い。
デザイナがだめならクライアントかディレクターあたりに「余計なコストがかかる事になりますが…」
とか言ってデザイナがUTF8で書かざる終えないようにがんばれ。
終えない→おえない
落ち着け
文字コードって最大最悪のバッドノウハウやね。
これがある日本はハンデやで。
Smartyなら
smartyテンプレ(sjis) → smartyコンパイル(utf8)
はテンプレートが更新された後の初回アクセスだけですむから大した負荷にはならないだろ。
>>865 文字コードの設定なんて数秒で変更できる。
みなさんフレームワークは何使ってるんですか?
>>862 >smartyのテンプレ作成をutf8でお願いしますとデザイナに頼んだら、
>「DWの設定まんどくさだから、sjisじゃなきゃダメ」と言われたので
ええーっ
とりあえずおまいさんが『Dreamweaver 文字コード』でぐぐって、DWの設定を教えてあげればいいじゃない。
つかその程度のこともできないデザイナなんか切れ。
実際にSmarty使っているプログラマーって少ないみたいだな。
>>876 使ってるけど機能のほんの一部しか活用してないwww
>>876 はてなで見たけど、オープンソースを改造するのが
一番多いって…
>>876 自在にSmartyを使えるようになる頃には、自分で template 作れるようになる。
で、その頃になると、Smartyに粗が見え出すんだ。
まぁ、という訳で自作テンプレート使ってる。
880 :
nobodyさん:2007/03/21(水) 20:52:08 ID:NvhysGYm
>>879 どう考えても、Smartyの方が優れてそうだけどなw
>>880 まぁ、その通りだ。
だが、smartyはでかいし機能がありすぎる問題がある。
下手に機能があると、テンプレートに頼りすぎて、どこまでがviewか?とかが崩れるんだ。
シンプルな方が楽だし早いんだよ。
Smartyの余計な文法と微妙な制限を入れるよりも、
PHPでやったほうがわかりやすい。
883 :
nobodyさん:2007/03/22(木) 14:34:43 ID:jPF/zj00
データつかませて吐くだけだからな。
プラグイン機能とかキャッシュとか使ってないの?
>>884 実稼働した後なら
一番使ってるのは
キャッシュかもしんないwww
886 :
nobodyさん:2007/03/22(木) 17:40:02 ID:9EeeeROG
Smartyのキャッシュほどありがたいものはないだろ。
キャッシュ機能ってどういうの?
>>882 はげどう
PHPよりSmartyのほうが使いづらいし貧弱
>>887 DBに接続してデータとって来るような場合
キャッシュがあればDBいかないで表示したり。
テンプレート内のカウンタとか一部のプラグイン部分だけはキャッシュじゃなくて動的にしたい
とかも出来るから結構便利よ。
890 :
nobodyさん:2007/03/23(金) 01:25:37 ID:wrH2dhw4
INSERTプラグインは好きだよ。
>>889 それってどういう仕組みなの?セッションやクッキー使って
DB内のカウント値を保存してるんじゃないよね?
893 :
nobodyさん:2007/03/23(金) 14:57:53 ID:wrH2dhw4
DBの接続コストを減らせるのだ。
この場合、キャッシュのキーになるのはURLなの?
もしそうなら、ページ全体のキャッシュはできても部分キャッシュはできないということ?
>>895 キャッシュのキーはテンプレートのパスとdisplay関数やfetch関数の第2引数として指定できるキャッシュID
マニュアル嫁と。
Smarty使っている有名なオープンソースってある?
898 :
nobodyさん:2007/03/25(日) 04:42:25 ID:UfKh4Z0S
>>876 新規で受注したPHP案件は無理やりでも導入してるぜ
改造案件で昔の担当したアホがスパゲティってるときだけ使わん。
$arr = array("hoge"=>array(0,1,2,3));
{foreach from=$arr item=item key=key}
{$item.hoge|@count}
{/foreach}
連想配列の要素数は上記で取得出来るのですが、要素数を交えた演算が出来ずに困ってます・・・
感覚的に
{$item.hoge|@count * 4 + 1}
というような書き方をしたいのですが・・・どうかお助けください
すみません、上げさせて頂きます
多分、Smarty の話だと思うが、それは無理だったはず
math ならいけるね
すばらしい・・・一つ勉強になりました、ありがとうございました
$arr = array("hoge"=>array(0,1,2,3));
{foreach from=$arr item=item key=key}
{math equation="n*4+1" assign="mResult" n=$item.hoge|@count}
{$mResult}
{/foreach}
つながる
908 :
nobodyさん:2007/04/05(木) 22:15:57 ID:Wh1vrSjM
{literal}〜{/literal}で囲った場所がごっそり消えてしまうのですが
同じ様な事を経験した方っていますかね?
コンパイル済みのファイルの時点でなくなってる感じです。
ちなみにSmartyのバージョンは2.6.6です。
ないですね
俺もないな
911 :
908:2007/04/06(金) 18:35:57 ID:???
>>909 >>910 そうですかぁ・・・。
ちなみに他のサーバーで実行すると{literal}〜{/literal}の中身は表示されます。
php.iniとか環境の違いでsmartyの挙動って変わるんですかね?
そりゃ変わるだろうね
913 :
nobodyさん:2007/04/07(土) 16:48:58 ID:mKHEPGiv
最近はじめたんだけど、smartyの関数とか書式を覚えるとかが
結構メンドクサイねw
バシバシ実用してる人、みんなはそのメンドクサさを乗り越えた甲斐があった?
圧倒的に効率的?
というかめんどくささを解消するためのものではないし
smartyの最小構成を教えてください。
使いたいSmarty変数は
assign display include sectionです。
>>913 デザイナが構文覚えるのは多少苦労すると思うけど
殆ど一般的な式だから、プログラミングやった事があるならすぐに飲み込めると思うが。
むしろ、Switchつかいてぇ・・ぐらい思うんじゃねw
>>915 意味分からないけどとりあえず
require('Smarty/Smarty.class.php');
>>915 smarty.class.phpだけ置いて実行して
無いと怒られたものを入れていけばおk
919 :
nobodyさん:2007/04/07(土) 19:00:45 ID:1Ng7rNgy
テンプレートに渡した連想配列の添字が例えば
$params['e-mail']
だったとき、どのようにすれば表示できるのでしょうか?
{$params.e-mail}
だと、$params.eマイナスmailと解釈されるのか解りませんが、’0’になります。
920 :
915:2007/04/07(土) 19:03:49 ID:???
Smarty.class.php
Smarty_Compiler.class.php
internals/core.create_dir_structure.php
internals/core.get_include_path.php
internals/core.write_compiled_resource.php
internals/core.write_file.php
が最小でした。
Smarty.class.phpやSmarty.compiler.class.php内の関数を削除できればもっと省けそうだけど、めんどいですね。
922 :
nobodyさん:2007/04/07(土) 19:20:46 ID:1Ng7rNgy
>>913 PHPはよく知っていて、わざわざまたSmarty使うのにまた、新しい文法覚えるのってどうなのよ、って感じはするよね。
例えばforeachなんてPHPのはマニュアル見なくてもスラスラかけるけど、
つい最近まで、あれ?item=だっけ?form=だっけ?as?みたいに、良くわからなくなって
マニュアル(というか、他で使ってるところ)みて、コピペしてた。
まあ、でも、
>>916さんのいうように、PHP(なり、何か他のスクリプト)解ってるなら特に難しいことないけど、面倒なのは面倒だね。
全部自分一人でするなら、必要ないかも。
Viewの部分の分離なら、PHPだけでも出来るし。
でも、スクリプト知らないデザイナさんなどに覚えてもらうのに楽なのかな?
とはいえデザイナもSmarty覚えるよりPHP覚えた方が、後々役に立ちそうだから微妙だよね。
俺がsmarty使う理由は、デリミタが簡潔でHTMLが綺麗に見えるから。
dreamwearverのデザイナビューでも、わりとエラーにならずにレンダリングされるし。
if文の使い勝手が微妙だけど、プラグイン自分で書くって言う手もあるし。
923 :
nobodyさん:2007/04/07(土) 19:24:40 ID:1Ng7rNgy
>>921 おれもそんなわけないと思ったけどなるんだよね
0に
Smarty-2.6.18なんだけど・・・
バグかな?
>>923 試してみたけど0になったな。 e_mailでやるときちんと表示されるから、バグっぽいね。
Flexyがもうちょい融通きくようになればSmartyから即移行したいんだけどね…。
同じname使うだけでパースエラーとかありえない。
将来的にformのnameかIDでグループ分けしてパース出来るようになるのだろうか。
変数名に-使うなってことで。
928 :
923:2007/04/09(月) 08:46:20 ID:45uRynI3
>>925 わざわざテストありがと
>>927 ですね。
もういっっこおかしなところ発見したんですけど、暇な人いたらテストしてもらえませんでしょうか?
/////////////PHP//////////
<?php
require('libs/Smarty.class.php');
$errors['user_name'][]="必須です。";
$errors['user_name'][]="必須です。";
$errors['user_pass'][]="必須です。";
$errors['user_pass'][]="必須です。";
print_r($errors);
$smarty=new Smarty;
$smarty->compile_dir="templates_c";
$smarty->template_dir="";
$smarty->assign('errors',$errors);
$smarty->display('smarty.html');
?>
929 :
923:2007/04/09(月) 08:47:41 ID:45uRynI3
////////続き テンプレート///////////////
/////テンプレート///////////
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
{foreach from=$errors.user_name item=errors}
{$errors}<br>
{/foreach}
<br><br>
{foreach from=$errors.user_pass item=errors}
{$errors}<br>
{/foreach}
</body>
</html>
これをUTF-8で保存して表示すると2度目のループが文字化けしません?
うちの環境の問題ですか?
930 :
923:2007/04/09(月) 08:49:17 ID:45uRynI3
ちなみに
変数名(添字)のuser_nameやuser_passをfoo、barでやると文字化けしませんOTZ
>>928 むしろPHPで-がエラーにならないことに驚いた
マニュアルではだめってなってるし
さらに-を使うことにも驚いたけど
933 :
nobodyさん:2007/04/09(月) 23:39:29 ID:45uRynI3
>>929 ありがとうございます。
そうですね
おっしゃるとおり
さっき実験してて気づきました。
なぜか変数のスコープを勘違いしてました。
すんません。はずかしいです。
934 :
nobodyさん:2007/04/13(金) 11:37:03 ID:W3WC3UzW
javascript絡みの話なんですが、
<script>
array[1] = {$infotype2[1]};
</script>
こんな感じにjavascriptのコード内でsmartyから受け取った値を代入したい場合はどうすればいいんでしょうか。
よろしくお願いいたします。
>>934 俺ならJavaScript全体を
PHPコード側で変数に格納して、
assignで渡すけどな。
936 :
nobodyさん:2007/04/13(金) 11:59:56 ID:W3WC3UzW
>>935 なるほど。勉強になります。
ありがとうございました。
そうテンプレート内に書けばいけるじゃん
>>934 サーバサイドスクリプトとクライアントサイドスクリプトの間には何があるのか考えればおのずと答えが出るだろ。
もしかして{がデリミタだから引っかかってるとかじゃないよな?
QuickFormで
$tmpArray = array();
foreach ($list as $row) {
$tmpCheckBox =& $form->createElement('checkbox');
$tmpCheckBox->setName($i);
$tmpCheckBox->setText($row['name']);
$tmpCheckBox->updateAttributes(array(
'value' => $row['id'],
'id' => 'check_'.$i
));
$tmpArray[] = $tmpCheckBox;
$i++;
}
$form->addGroup($tmpArray, 'ques_01', '', '');
こんな感じで checkbox の value の値は変えられるようになったのですが
freeze() すると値が1に戻ってしまいます。
何とか freeze() を経由しても、継承する方法はないのでしょうか?
なんでsmartyスレで聞いてんの?
なんでスレッドのタイトル見てないの?
Flexyのこともたまには思い出してあげてください。
943 :
939:2007/04/18(水) 10:23:00 ID:???
あ。ごめんなさい。
レンダリングで Smarty 使ってたもんでつい…。移動します。
944 :
nobodyさん:2007/04/22(日) 18:56:08 ID:b9VJcguV
質問です
テンプレート(.tpl)中の
{foreach name=loop from=$products item=product}
〜〜
{/foreach}
としている部分がまるっきりブラウザに表示されません
なにが問題でしょうか?
ありがちなミスのパターン(解決策)を教えてください。
自分なりに確認したつもりですがわかりません
$productsの中身が空
$productsをassignしてない
$productsのスペルが間違ってる
某情報機関の調査によれば上記の凡ミスが全バグ中の85%を占めるそうです。
<TABLE width="100%" border="1" cellspacing="0" cellpadding="1">
<TBODY>
<TR><TH>AAA</TH><TH>BBB</TH><TH>CCC</TH><TH>DDD</TH><TH>EEE</TH><TH>FFF</TH></TR>
<?php
while ($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
?>
<TR><TD align="center"><?=$rs['h_AAA']?></TD>
<TD><?=$rs['h_BBB']?></TD>
<TD><?=$rs['h_CCC']?></TD>
<TD><?=$rs['h_DDD']?></TD>
<TD><?=$rs['h_EEE']?></TD>
<TD><?=$rs['h_FFF']?></TD></TR>
<?php
}
?>
</TBODY></TABLE>
<?php
}
$result->free();
$conn->disconnect();
?>
smartyの勉強しています。
上の文をphpとtplに分ける際にどう記述すればいいですか?
よろしくお願いいたします。
948 :
nobodyさん:2007/04/25(水) 00:40:47 ID:6uGbCoSG
950 :
nobodyさん:2007/04/25(水) 18:06:36 ID:oViUh0CG
946です。
****php******
<?php
$sql = 'SELECT * FROM table;
$smarty->assign('data', $conn->getAll($sql));
$smarty->display('file:E:/html/list.tpl');
?>
****list.tpl****
<TABLE width="100%" border="1" cellspacing="0" cellpadding="1">
<TBODY>
<TR><TH>AAA</TH><TH>BBB</TH><TH>CCC</TH><TH>DDD</TH><TH>EEE</TH><TH>FFF</TH></TR>
{section name=co loop=$data}
<tr>
<td>{$data[co].AAA}</td>
<td>{$data[co].BBB}</td>
<td>{$data[co].CCC}</td>
<td>{$data[co].DDD}</td>
<td>{$data[co].EEE}</td>
<td>{$data[co].FFF}</td>
<tr>
{sectionelse}
<tr><td colspan="5">No items found</td></tr>
{/section}
</TBODY></TABLE>
参考にして組んでみたのですが
上のソースだと、ブラウザに表示されまん。
データはとんでるぽいのですが。。。
設定まわり???
>>950 DB_FETCHMODE_ASSOCがないからじゃないの
952 :
nobodyさん:2007/04/26(木) 09:07:13 ID:ogJz3FoA
>>951 解決しました。ありがとう
e時ミスでした。
Japanese translation available!
[4-May-2007] The Japanese documentation is here! Thanks goes to Masahiro Takagi, Joe Morikawa, Daichi Kamemoto, and Shinsuke Matsuda for their hard work.
954 :
nobodyさん:2007/05/12(土) 22:26:46 ID:6YVR0l4j
tplファイルから
{php}
require_once(hoge.php)
{/php}
↑みたいなことやるとhoge.phpの中でDB(MYSQL)から読み込んだ文字だけ
文字化けするんだけど何で?
ちなみにhoge.phpを直接実行する場合は文字化けを起こさない。
DBもphpもtplも全部UTF-8Nで統一してんだから当たり前だけど。
{php}使うぐらいならむしろsmarty使うな。
956 :
nobodyさん:2007/05/13(日) 05:21:57 ID:m+4dQ5o9
smartyって
テンプレートの名前、例えばhoge.tplを
www.hoge.jp/hoge.phpとwww.hoge.jp/foo/hoge.phpと両方で使うと、バグると言うか、同じtplとみなして表示がおかしくなりますよね?
template_cを自前で切り替えないとダメってコト?
不便じゃない?
みんなどうしてます?
958 :
956:2007/05/13(日) 14:36:39 ID:???
>>957 $compile_id
こいつか!ヒントサンクス!
教えてください。
php部分
$array=array(
"1"=>array("sys"=>"a1"),
"2"=>array("sys"=>"b2"),
"3"=>array("sys"=>"c2"));
$array2=array(
"a1"=>array("ver"=>"z1"),"a2"=>array("ver"=>"z2"),"a3"=>array("ver"=>"z3"),
"b1"=>array("ver"=>"z4"),"b2"=>array("ver"=>"z5"),"b3"=>array("ver"=>"z6"),
"c1"=>array("ver"=>"z7"),"c2"=>array("ver"=>"z8"),"c3"=>array("ver"=>"z9"));
通常表示このように変数値で配列番号を指定し表示される部分を
foreach($array as $value){
print $array2[$value['sys']][ver];
}
//結果 z1z5z8
smartyで同じ処理をするよう
以下コードを書いたのですがパターン1〜3ともに表示できませんでした。
配列番号を変数で指定することは不可能なのでしょうか?
{foreach item=a key=key from=$array}
{$array2[$value['sys']]ver} パターン1
{$array2.$value['sys'].ver} パターン2
{$array2.$value.sys.ver} パターン3
{/foreach}
smartyの部分修正
{foreach item=a key=key from=$array}
{$array2[$a['sys']]ver} パターン1
{$array2.$a['sys'].ver} パターン2
{$array2.$a.sys.ver} パターン3
{/foreach}
962 :
nobodyさん:2007/05/27(日) 20:34:44 ID:CBMyXuH3
includeファイルにtableタグを使うと
上に空白が入ってしまいます。
<b>aaa</b>だと大丈夫でした。
どうすれば空白がきえますか?
先ほど別の板で{strip}{/strip}を教えて頂いたのですがダメでした。
宜しくお願い致します。
964 :
nobodyさん:2007/05/28(月) 00:33:32 ID:Q4t73dbV
>>963 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0013)about:internet -->
<html>
<head>
<title></title>
<body>
<table>
<tr><td>aaaa</td></tr>
</table>
</body>
</html>
965 :
nobodyさん:2007/05/28(月) 01:05:51 ID:Q4t73dbV
>>963 すいません、間違えました。
少し酔ったんでまたソース書き込みます。
ご親切にレス頂いたのに本当にすみません。
966 :
nobodyさん:2007/05/31(木) 17:23:08 ID:AGOFu4XP
Smartyで配列の件数を出力したいのに
{$ar|count}
とすると
Array
と表示されてしまうのですがなんで?
上のように書いたら
count($ar)になると思ってたのですが。
967 :
966:2007/05/31(木) 17:29:46 ID:???
ごめん
書いた後に気づいた
@で解決した
教えてください。
foreach内でcaptureしたものを配列にして、
html_tableで表示させたいのですが、どうしても
captureで読み込んだものを配列できません。
どうすればテンプレート内で配列にすることができますか?
{foreach from=$item key='key' item='val' name='Loop'}
{capture name='val' assign='row'}
{$val.id}<br>
{$val.word}
{/capture}
{/foreach}
↑$rowに$itemで表示する内容を入れて
↓こんな感じで表示させたい
{html_table loop=$row cols='4'}
どうしてもできないって,どんな方法を試したん?
970 :
968:2007/06/01(金) 15:34:39 ID:???
こんな風にしたり。
{capture name='val' assign=row[$key]}
foreach内にこんな感じで入れてみたり。
{assign var="row" value=$smarty.capture.row}
971 :
nobodyさん:2007/06/13(水) 13:16:13 ID:CAn4D9tB
$fuga['hoge'][$foo['bar]] をテンプレートで表現するにはどうすればいいですか?
$fuga.hoge.$foo.bar では通らないらしい
972 :
nobodyさん:2007/06/13(水) 16:26:42 ID:CAn4D9tB
>>971 自己レスですが
$fuga.hoge[$foo.bar] で通りますた
$fooは連想配列だけどいいのかなあ・・・
973 :
nobodyさん:2007/06/14(木) 13:10:19 ID:41cbMn19
最近ページが出るのが重くて
レンタル先に問い合わせたら、Smarty使ってるせいっていわれたらしんですけど
そんなことってありますか?
Smartyってキャッシュするから他のテンプレートエンジンより高速っていいますよね?
なんかApacheのキャッシュがSmartyと相性が悪いって、いわれたらしいんですけど・・・
もちろん専用サーバーなので、他のサイトのせいで重いってこともないし、
最初立ち上げたときはそれほどでもなくて
明らかに重くなってるので、プログラムのせいってこともないと思うし。
問い合わせた本人じゃないので詳しくわからなかったんですけど、ApacheとSmartyって相性悪いんですか?
もしかしたらapacheのログのせい?
Apacheの設定でどうにかならないのでしょうか?
どうも、こっちが知らないと思って適当にあしらってる感じがしないでもないOTZ
ヴァキュームとかしてるのかな・・・
>>973 Smartyは確かに軽いライブラリじゃないけど
(xdebugで解析するとメインの業務処理より時間がかかってる場合多し)
体感で重いという程なら他の要因を調べるべき。
秒間何十アクセスとかじゃないんだよね?
Pentium3 500MHzとかのヘボマシンだと、
(Webアプリに大いに依存するけど)
秒間十アクセス程度でキツイ。
>>975 ApacheとPHPモジュールならそのマシンでももっともーっと行けるだろ。
普通にGUIログインでクライアントマシンとして利用しながら
サーバー立ち上げてるとか??
977 :
975:2007/06/15(金) 09:10:33 ID:???
>>976 チューニングしないとそんなもんだと思うけど…
OOPしてるからちょっとはオーバーヘッドあるだろうけど、
特に重い処理していないし。
軽いところで、秒間10〜20ぐらい。
APCとか入れると秒間30〜40ぐらいは行ける。
978 :
nobodyさん:2007/06/27(水) 14:31:02 ID:qqHE9rvp
tam(20070624-061801)のアルバム
979 :
nobodyさん:2007/07/02(月) 12:04:34 ID:XrjaoeQ2
ほす
980 :
nobodyさん:2007/07/04(水) 17:25:01 ID:DXXJfQ6l
Smartyにて、テンプレートを使い回す場合はincludeを使用しますよね。
同様に、PHPとテンプレートが対になったパーツの使い回し(例えばblogの最新コメント一覧など)
したい場合は、一般的にはinsertプラグインとして開発するのがベターなのでしょうか?
このあたりの情報ってなかなかありませんね…。
>>980 JavaScriptでパーツ部分(例えばblogの最新コメント一覧など)だけ読み込むのが普通かも。
Smarty関係ないけど。
>>980 外側にフレームワークを使ってるから、その機能でやっちゃう。
>>980 ちゃんとしたフレームワーク使ってなくても、データ取ってきてテンプレートに展開した結果を部品として、HTMLを組み立てるって方法はよくやりますね。
それをまたテンプレート変数にアサインして、外側(レイアウト)のテンプレートに展開するのもありかと。
Smartyオブジェクトを複数生成することになるけど、部品ごとにキャッシュ使ったりテンプレートの格納先を変えたり、応用が効く利点も。
レイアウトはSmartyで、フォーム部分はFlexyってパターンもやったことあります。