【Smarty】PHPのテンプレートエンジン【Flexy】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2005/06/15(水) 10:35:52ID:???PHPのテンプレートエンジンを語るスレです。
Smarty:本家(英語)
http://smarty.php.net/
Smarty:日本語マニュアルとか
http://sunset.freespace.jp/smarty/
pear の HTML_Template たち
http://pear.php.net/package/HTML_Template_Flexy
http://pear.php.net/package/HTML_Template_IT
http://pear.php.net/package/HTML_Template_Sigma
http://pear.php.net/package/HTML_Template_Xipe
http://pear.php.net/package/HTML_Template_PHPLIB
patTemplate
http://www.php-tools.de/
http://www.php-j.com/tutorial/php/template.php
前スレ(現在dat落ち)【PHP】Smarty【Template】
http://pc8.2ch.net/test/read.cgi/php/1047225437/
0569nobodyさん
2006/05/26(金) 15:47:30ID:???0570nobodyさん
2006/05/26(金) 15:49:24ID:???0571nobodyさん
2006/05/26(金) 18:29:06ID:???{include file=xxx.tpl value=1}
{include file=xxx.tpl value=2}
{include file=xxx.tpl value=3}
としてもxxx.tplで$valueを参照すると最初の値(1)しか入ってこないのはなぜ?
0574nobodyさん
2006/05/29(月) 22:44:38ID:mZUygf+Dエラーを読んだ限りでは、ファイルのディレクトリが違うかファイルが存在していないといった
感じだったのですが、テストしたところ動作はしていました。
インクルードパスに原因があるのでしょうか、
ちゃんとSmartyのディレクトリを指定しています。
どなたかアドバイス頂ければな、と思います。お願いします。
0575nobodyさん
2006/05/29(月) 22:47:07ID:???0577nobodyさん
2006/05/29(月) 23:31:22ID:mZUygf+Dありがとうございます。
でもローカルなんですけど、それでもパーミッションて関係あるんですかね。
ド素人ですいません。とにかく調べてみます。
0579nobodyさん
2006/05/30(火) 08:16:31ID:???パーミッション分かってない香具師がサイト作ってもソースコード抜かれたりデータ抜かれたりするのがヲチ。
個人情報扱うサイトだけは作らないでくれ。利用者が大迷惑。
0580nobodyさん
2006/05/30(火) 08:22:57ID:???エラーの内容がテンプレートファイルが見つからんとかいうのだったら草植える(w
0581nobodyさん
2006/05/30(火) 12:18:06ID:???(頭文字が小文字)
0582nobodyさん
2006/05/31(水) 12:00:38ID:???0583nobodyさん
2006/05/31(水) 21:15:45ID:???エラーの内容は省略せずにお願いします。
0584nobodyさん
2006/06/02(金) 01:16:31ID:???そしてエスパーは現れずに、質問者は途方に暮れてVBを使い始める。
0585nobodyさん
2006/06/03(土) 00:19:46ID:???0586nobodyさん
2006/06/03(土) 00:20:55ID:???0588nobodyさん
2006/06/03(土) 00:21:49ID:???0589nobodyさん
2006/06/03(土) 00:45:58ID:???return 'hoge';
}
function askdjaocdma(){
return 'askdjaocdma';
}
適当に関数を書いて、登録しないで{$test|hoge|askdjaocdma}と使ってみると何でも使えてしまいます。。。
関数を削除すると、無いよーとエラーにはなります。
0590nobodyさん
2006/06/03(土) 00:51:26ID:???「plugins」というディレクトリにはhogeと定義した関数は入れていません。
0591nobodyさん
2006/06/03(土) 19:33:10ID:???0592nobodyさん
2006/06/06(火) 00:09:12ID:???インクルードするだけで使えるの?
0593nobodyさん
2006/06/08(木) 00:26:47ID:???{method('hoge')}だとエラーになってしまいます。
配列に入れたりして、{method(a[hoge])}とかするしかないでしょうか。
0594nobodyさん
2006/06/08(木) 00:29:55ID:???ちゃんと調べずに書いてごめんなしあ><
0595nobodyさん
2006/06/12(月) 01:45:30ID:???0596nobodyさん
2006/06/19(月) 11:55:23ID:???単純で分かりやすくて簡単に改造も出来るし速いしで結構愛用してたんだけどな・・・
0597nobodyさん
2006/06/22(木) 14:12:56ID:???ttp://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/language.syntax.quotes.html
変数の中に変数を入れる方法ってありますか?
例えば
$num = array('01', '02');
{{foreach from=$num item="num" key="key"}}
<h1>{{$form.enq_01.label}}</h1>
<p>{{$form.enq_01.html}}</p>
{{/foreach}}
で、「enq_01」の01のところに$numを代入したい。
{{$form.enq_$num.label}}
とかやってもだめでした。
0598nobodyさん
2006/06/23(金) 00:17:44ID:???$form.enq[$num].label
これで出来た気がするが。
0599nobodyさん
2006/06/29(木) 14:17:10ID:???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
なんかこういうの出てしまいました。
何か解決の糸口を教えていただけないでしょうか。
0600nobodyさん
2006/06/29(木) 15:24:47ID:???以上
0601nobodyさん
2006/06/29(木) 16:17:09ID:???すみません。勘違いしてた。
includes\の中にはSmarty.Class.phpとSmarty_Compiler.class.php
しか入れてなくて、\includes\internals\なんて何処にあんだよ!!
って一人で吠えてました。入れりゃいいのね。
あーすっきり。
>>600
ありがとう!!「以上」って言葉でやっと気づいた。
ずっとPerlしかやってこなかったのに、いきなりPHPをやれと。
でもPHPってなかなか楽しそうですね。それに開発が早そう。
0602nobodyさん
2006/07/23(日) 19:29:29ID:???{<? urlencode($str) ?>}
ではエラーがでてしまいます。
できない?
0603nobodyさん
2006/07/23(日) 19:45:05ID:???0604nobodyさん
2006/07/24(月) 09:26:29ID:???{php}phpinfo();{/php}
とか。
http://smarty.php.net/manual/en/language.function.php.php
マニュアルくらい読め。
0606nobodyさん
2006/07/24(月) 21:30:20ID:???0608602
2006/07/25(火) 00:16:20ID:???0610nobodyさん
2006/07/31(月) 09:24:15ID:???この場合呼び出す.phpファイルと階層が違うためCSSでデザインしにくいです。
何かいい方法ってあるんでしょうか?
0611nobodyさん
2006/08/02(水) 03:03:21ID:???├cssフォルダ
└templatesフォルダ
として、templates内にあるHTML中では、
「<LINK REL="stylesheet" TYPE="text/css" HREF="./css/〜.css">」としておけばOKじゃない?
0612nobodyさん
2006/08/03(木) 12:31:03ID:???自分なりに調べてみたんですが解らなかったです。。
それとも無理なんでしょうか。
0613nobodyさん
2006/08/03(木) 18:04:23ID:???{assign var="stop" value="0"}
{foreach}{if !$stop}
処理
{if ループ抜けたい}{assign var="stop" value="1"}{else}ループ抜けたくない{/if}
{/if}{/foreach}
こんな感じか?
Smartyに渡す前に整形しとくべきだとは思うけど
0614nobodyさん
2006/08/06(日) 20:14:11ID:???0615nobodyさん
2006/08/07(月) 21:34:55ID:muOt4GfJhttp://pc8.2ch.net/test/read.cgi/php/1153652403/
こちらから誘導されてきました。
鮎川寛さんの「 PHP 開発日誌 」ってサイト
どこに行ったかご存知ないですか?
そこで配布していた『HTML テンプレート』を
使いたいのですが見当たらなくて困ってます。
どこに移ったか知っている方、
もしくはPHP5 版『HTML テンプレート』を
再配布しているところを知っている方
教えてください。
0616nobodyさん
2006/08/08(火) 02:11:40ID:???http://sourceforge.net/projects/htmltemplate/
0617615
2006/08/08(火) 20:55:09ID:+NeExxFVありがとうございます!
これって PHP 5.01 版で止まってるんですね。
次のフレームワーク作るときには
別のテンプレートを採用することも考慮しないとな……
0618nobodyさん
2006/08/09(水) 12:49:51ID:???○個目のオブジェクトのメソッドを指定する方法ってあるんでしょうか?
.php
$retarray = array();
while(fetch.....){
$o_work = new $obj;
$retarray[] = $o_work;
}
$smartyobj->assign("objs",$retarray);
テンプレート
{$objs[2]->get_hoge()}
(↑実際にはシンタックスエラーだけど、イメージはこんな感じです)
0619nobodyさん
2006/08/09(水) 13:30:18ID:???0620nobodyさん
2006/08/09(水) 13:51:51ID:z3PeQgxkコレだと動きますね(汗
他オブジェクトメソッドの返り血を指定するとエラーになるようです↓うむむ・・
{$objA[$objB->get_hoge()]->get_hoge()}
0623nobodyさん
2006/08/09(水) 20:18:02ID:???PHP勉強しはじめたばかりの初心者なのですが、
皆さんのお勧めとかお気に入りのテンプレートエンジンって
ありますでしょうか?
例えば、>>616のhtmltemplateとか、Smartyとか。
0624nobodyさん
2006/08/09(水) 22:55:58ID:???ぶっちゃけ作者が使いやすいと思って作った物に対して、どれだけ共感を感じるかじゃね?
0625nobodyさん
2006/08/10(木) 09:59:00ID:???なるだけだと思う。
初心者というなら、
よほどのことがない限りは、どれを使っても大して変わらないと思うし。
0626nobodyさん
2006/08/10(木) 14:31:24ID:???最初は、機能がシンプルで、ソースコードを解析しやすい>>616のHTMLtemplate for PHPを使ってみたらいかがですか?
どんな処理をしているのか、中身を分析すると、自作のテンプレートシステムも作れるようになりますね。
<着眼点>
・それを一つの足がかり=比較基準の材料として、SmartyなりFlexyなり、すでに作られている便利なやつを見ていけばよいのではないでしょうか?
・フレームワークを使う場合は、MVCのView部分と相性の良いテンプレートシステムがあるかも。
0627nobodyさん
2006/08/11(金) 01:03:06ID:???メニュー側のインクルードかなと考えたのですがテンプレートに余計な文字が付くのが気になり、
今は {if $inc1}{include file="$inc1"}{/if} として、includeされたテンプレートファイルでも再帰的に同様のことをしています。
0628nobodyさん
2006/08/12(土) 17:48:50ID:???最初に仕込まれた性癖ってなかなか抜けない。
0629nobodyさん
2006/08/13(日) 02:51:30ID:???0630nobodyさん
2006/08/14(月) 11:17:50ID:???動物は、最初の刷り込みで、同じ事を繰り返す面があるね。
以前のものと、新しいものの「差異」を分析&比較する能力が乏しいから?
女(人間)は、プログラミング操作では作れない。
テンプレートは、プログラミング操作で作れる。自由度高し!
比較検証によって、最初のものに固執せず、常に改善していくことができると思うよ。
・Smartyがベストとは限らない。
・PHPがベストとは限らない。
保守から革新へ
(^^)/
0631nobodyさん
2006/08/15(火) 11:20:20ID:???0632nobodyさん
2006/08/15(火) 14:20:07ID:???0633nobodyさん
2006/08/15(火) 15:11:34ID:???「府、本、旬」
という字があると、そこでエラーを吐いてしまうのですが、
似たような現象になった方はいらっしゃいますか?
その文字があるところでこんなんがでちゃう。
Fatal error: Smarty error: [in index.tpl line 14]: syntax error: unrecognized tag:
0635633
2006/08/15(火) 15:40:21ID:???ありがとうございます!
本とかは文字コードに中カッコが含まれてるということなんですね?
家まで行って感謝の意を伝えたいくらいです。
0636nobodyさん
2006/08/15(火) 15:43:21ID:???そういう文字って他に何があるんでしょう?
SJISの「表」とかとは少し違いますよね?
0637nobodyさん
2006/08/15(火) 15:51:07ID:???Shift_JISとかぶる
まぁ、テンプレートを Shift_JIS で書くとかしなければ良いのだけど
たまーにめんどくさいんだよね
自家製クラス作るのお勧め
0638nobodyさん
2006/08/15(火) 16:26:03ID:???携帯の絵文字を直接扱いたいとか言う状況でなければ、
Shift_JISを使わないようにするのがベスト。
もしくはinput_filterで内部エンコーディングにconvert_encoding。
Shift_JISである必要があるなら出力時に変換。
0639633
2006/08/15(火) 16:54:32ID:???delimiterを {{ , }} にするようにしてみました。
0640nobodyさん
2006/08/15(火) 19:46:36ID:???んで、自分でテンプレート作る時は、当然EUCで書いてフィルターだ
けど・・metaタグがShift_JISで本当はEUCとか
デザイナーに説明するのめんどくさい
0642nobodyさん
2006/08/16(水) 00:52:01ID:???0644nobodyさん
2006/08/16(水) 11:29:47ID:???おそらく、結構重たい処理になっているだろうけど楽だし
そこまで、チューニングが必要なページあまりないしな
0645nobodyさん
2006/08/16(水) 11:51:20ID:???0646nobodyさん
2006/08/17(木) 00:51:44ID:???8ビット時代の苦肉の策ですよ。
0647nobodyさん
2006/08/17(木) 12:14:02ID:kr+Lut29common.confに
[.Database]
host=my.domain.com
と書いて、
PHPの中で
$smarty->config_load('common.conf', 'Database');
として読み込もうとしているのですが、どうも読み込んでくれません。
隠蔽セクション以外なら、読み込めるのですが・・・。
0649nobodyさん
2006/08/21(月) 14:55:34ID:EaU1LrCO0651nobodyさん
2006/08/22(火) 04:29:10ID:???0652nobodyさん
2006/08/22(火) 08:39:44ID:???0653nobodyさん
2006/08/22(火) 13:34:18ID:???0654nobodyさん
2006/08/25(金) 06:10:03ID:???0655nobodyさん
2006/08/25(金) 23:51:43ID:???0656nobodyさん
2006/08/27(日) 20:59:35ID:OoIUz1EV<script>
var hogehoge = "{hogehoge}";
</script>
のように、HTMLのスクリプトタグ内で変数を使おうとすると、「hogehoge = "{hogehoge}";」と
そのまま表示されてしまい、変数が展開されません。
設定オプションを見たのですが、それらしい設定は見つからず、
どうしれば置き返されるようになるかご存知の方教えてください。
なにとぞ、なにとぞよろしくお願いします。
0657nobodyさん
2006/08/28(月) 01:17:22ID:???0658nobodyさん
2006/08/28(月) 03:52:08ID:???もしかして、この現象自分だけなんでしょうか…?
0659nobodyさん
2006/08/28(月) 03:58:23ID:???あとせめてlanguage属性入れておくれ
0660nobodyさん
2006/08/28(月) 04:04:16ID:???安心しろ。ウチの環境でもダメだったw
Flexyのソースは見ていないけど、scriptタグ内は無視している気がする。
気が向いたら、ソース見て究明してくれ。
>>659
この場合、varもlanguage属性は無関係では?
質問者がここに投稿する際に省略しただけかもしれないし。
0661nobodyさん
2006/08/28(月) 13:52:14ID:???scriptで変換されないのはちょっと困るね
0662nobodyさん
2006/08/28(月) 19:20:49ID:???0663nobodyさん
2006/08/28(月) 20:53:09ID:???language属性入ろうがなかろうが同じみたいだし。
0664nobodyさん
2006/09/07(木) 16:39:23ID:???--------------------
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>タグに変換するようにしてみたら使えた。
もっと良い方法あるのかもしれんがわからん。
0665nobodyさん
2006/09/19(火) 20:20:40ID:???Smartyを導入する場合、テンプレートにPHPの記述は普通しないですよね。
みなさんはname属性はどうやって設定していますか?
普通に文字列を設定すると、リクエストから取得する際に間違えるのが
だるいので、定数使っていたんですが。
↓こんな感じ
<input type="checkbox" name="<?=InputDto::CITY?>" >
0666nobodyさん
2006/09/19(火) 22:06:15ID:???■ このスレッドは過去ログ倉庫に格納されています