【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/
0349345
2006/02/07(火) 11:09:29ID:???早速ありがとうございます。試してみます。
>>348
ええ、違うようです。でも違っているかどうかを尋ねているのではなく、
2次元以上の配列の指定の仕方を尋ねていますので
ひとつよろしくお願いします。
0351nobodyさん
2006/02/07(火) 12:03:44ID:???でも1コ足りなくない?
0352nobodyさん
2006/02/07(火) 12:24:13ID:???足りなくなくない?
foreachの中で$results は $data[*]相当の配列じゃなくなくない?
0353345
2006/02/07(火) 13:58:46ID:???{$request.$tmp}でいけました。ありがとう。
>>350-352
ごめんなさい。私の配列の数が違ってました。ありがとう。
0354nobodyさん
2006/02/07(火) 15:27:45ID:???これ気持ち悪いよね
無駄な部分が増えるっていうかさー
0355nobodyさん
2006/02/07(火) 16:00:21ID:???まあね。
嫌なら>>345の$request[$req['name']]みないなものは初めから$smarty->assignしないってのが得策かな。
つーか普通に使っててそんなの登場したことないよ。
テンプレートに突入する前にいじくってでも変な構造のものは除去したい性分だし。
2次元以上の配列自体ほとんど皆無だな。(←これはかなり人によるだろうけど)
オブジェクトの配列ならいっぱいあるけど。
テンプレートにはなるべくビューティホーなデータしか渡したくない。
なるべくシンプルなifとforeachだけで解決できるのがベスト(ちなみにsectionは食わず嫌いw)。
だからSmartyの機能ほとんど使い余してる。
0356nobodyさん
2006/02/07(火) 17:44:21ID:???とある配列の件数をif文で使うことってできますか?
{if $hoges|count > 0}
こんな感じで使えるといいのですが
できないですよね?
配列とは別に他の変数として件数を渡すのでしょうか?
0357nobodyさん
2006/02/07(火) 18:01:10ID:???0359名無しさん@お腹いっぱい。:
2006/02/08(水) 10:19:25ID:Lc3DPQ+Bよろしくお願いしますm(_ _)m
携帯電話でsmartyを使ったサイトを作っているのですが
ページが表示できません。
怪しいと思った部分($smarty->debugging = false)など設定
してみたのですが・・だめでした。
原因と思われる理由って何かわかりますでしょうか?
よろしくお願いします。
0360& ◆h9Bn.Lr5Ro
2006/02/08(水) 10:25:12ID:Lc3DPQ+Bエラーの内容については
端末が吐き出しているエラーのようです。
kddi --- このページは表示できません(未対応)
docomo --- 接続できません
0361nobodyさん
2006/02/08(水) 10:37:46ID:???携帯コンテンツ用の正しいHTMLかどうかとか
そのサイトでスタティックなHTMLを置いた場合に携帯で閲覧できるかとか
IE等のPCブラウザでは閲覧できるかどうかとか
確認してみては?
0363nobodyさん
2006/02/08(水) 12:40:50ID:???0364nobodyさん
2006/02/08(水) 14:00:57ID:Lc3DPQ+B検証した結果smartyの問題でなく
headerの問題ということがわかりました
皆さんアドバイスありがとうございました。(_ _)m
0365nobodyさん
2006/02/22(水) 14:11:48ID:???phpではforeach()でやってたんですが
{section name=hoge loop=$a}
〜
{/section}
↑上の$aのところにassign('a',配列数);
と変数渡すしかないのでしょうか?
0366365
2006/02/22(水) 14:19:24ID:???smartyにもforeachあるんですね、失礼しました。
0367nobodyさん
2006/02/22(水) 14:21:26ID:???http://sky.freespace.jp/smarty/SmartyManual_2-6-6J_html/language.function.foreach.html
0368nobodyさん
2006/02/22(水) 15:19:06ID:???各種処理の結果を表示する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}のような部分に変数の内容を表示させることが出来るのでしょうか?
よろしくお願いします。
0370368
2006/02/22(水) 16:49:35ID:???くだ質スレで質問したところこちらに誘導されたのでこちらで書き込みました。
まだPHPを初めて短いのでテンプレートエンジンに手を出すことは考えていませんでした。
処理を記述したphpファイルからデザインhtmlを呼び出して画面表示できればいいと思っていたので、
外部ファイルを読み込んで変数をぶちこんで出力、ということさえできれば
それ以上の機能はとりあえず欲していません。
テンプレートエンジンに頼るしか手段はないものなのでしょうか?
0371nobodyさん
2006/02/22(水) 16:56:55ID:Lv5GjAsx$smarty->fetch("_template.html");
0372nobodyさん
2006/02/22(水) 17:26:17ID:???先のことを考えるなら、テンプレートエンジンの導入も健闘してみる価値はある。
とりあえず、急ぎで何とかしたいって言うなら、
_template.html内の{$hoge}の部分を
<?php echo $hoge ?>
として
php側で処理の最後に
include('_template.html');
0373nobodyさん
2006/02/22(水) 20:50:40ID:???私も昔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
0374373
2006/02/22(水) 21:04:30ID:???>>_template.htmlの情報を挿入したい部分に{$hoge}と入れておき、
>>$hoge = "output test";
>>$output = file_get_content("_template.html");
$output = str_replace('{$hoge}', $hoge, $output);
>>echo $output;
と4行目を追加すれば置き換えられると思いますよ。
0375nobodyさん
2006/02/23(木) 01:11:06ID:???<?php echo $hoge ?>
がめんどくさくないなら一番楽だと思うんだけど。
0376nobodyさん
2006/02/23(木) 01:20:27ID:???0377nobodyさん
2006/02/23(木) 21:14:59ID:81PJfTdI0378nobodyさん
2006/02/24(金) 16:34:08ID:S8CqOJp10380377
2006/02/24(金) 16:56:42ID:S8CqOJp1俺は377
0381nobodyさん
2006/02/24(金) 23:56:24ID:???後はこれでいいよね。
{include_php file="hoge.php"}
0382nobodyさん
2006/02/25(土) 09:21:21ID:???<li>{$hoge[i]}</li>
{/section}
この時に、if (i == count($hoge)) の場合に処理をしたいんですが、
どうすればいいですか?
0383nobodyさん
2006/02/25(土) 09:28:01ID:???0385nobodyさん
2006/02/26(日) 18:52:13ID:???0386nobodyさん
2006/02/26(日) 18:58:41ID:???0387nobodyさん
2006/02/26(日) 21:34:41ID:???テンプレート内の{php}内にある $hogeに変数を渡せますか?
<h1>{$hoge}</h1> ←ここに入ってる$hogeを
{php}
sample($hoge); ←ここに入れたい
{/php}
0388nobodyさん
2006/02/26(日) 21:52:40ID:???でいけない?
0390nobodyさん
2006/02/26(日) 22:14:23ID:???sample($this->get_template_vars('hoge'));
とかどうだろ。
0392nobodyさん
2006/02/27(月) 22:17:07ID:???一方ではパフォーマンス落ちるとか、
フレームワークの方がいいとか言われてますが、
どう思いますか?
0393nobodyさん
2006/02/27(月) 22:21:19ID:???フレームワークを骨とすると、テンプレートエンジンは皮。
0394nobodyさん
2006/02/27(月) 23:20:42ID:???0395nobodyさん
2006/02/28(火) 01:38:49ID:???0396nobodyさん
2006/02/28(火) 09:34:12ID:???0397nobodyさん
2006/02/28(火) 11:25:29ID:???0398nobodyさん
2006/02/28(火) 13:11:01ID:08x2mpcp0399nobodyさん
2006/02/28(火) 13:19:21ID:0HF5o3Qs0401nobodyさん
2006/02/28(火) 15:19:11ID:???0402nobodyさん
2006/02/28(火) 19:33:40ID:???smarty覚えて損したかな??
だってさ、
やっとPHP覚えて、smarty覚えたんだけど・・・
フレームワークっつーのを知ってまたフレームワーク覚えなきゃなあ・・・
0403nobodyさん
2006/02/28(火) 19:59:21ID:???フレームワーク不要派もいるし
0405nobodyさん
2006/02/28(火) 20:57:20ID:???0406nobodyさん
2006/02/28(火) 21:04:43ID:???0407nobodyさん
2006/02/28(火) 21:12:10ID:???基本的に {$var} {if} {foreach} {include} {cycle}
まれに {section} {assign} {strip}
あと修飾子 |default |nl2br |date_format
それ以外のことはだいたいPHPでやってる。
0408nobodyさん
2006/03/01(水) 01:26:34ID:???{if} {/if}だらけになっちゃう。
どうしてますか?
0409nobodyさん
2006/03/01(水) 04:31:23ID:???とは?
0410nobodyさん
2006/03/01(水) 06:18:00ID:BvRBPutv0412408
2006/03/01(水) 20:02:59ID:???<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>
0413nobodyさん
2006/03/01(水) 20:05:42ID:???だけ四文字なのが気になる
0414408
2006/03/01(水) 20:11:28ID:???strongがあったりなかったり、
ulだったりolだったり、h3があったりなかったり・・・
大変・・・
0415nobodyさん
2006/03/02(木) 02:00:48ID:???具体的には
{$percent}%:残り{100 - $percent}%
$percentは80とすると
80%:残り20%
と表示したいのですが
実際は
80%:残り100%
となります。
0416nobodyさん
2006/03/02(木) 03:01:45ID:???スペルミスしてない?
0417nobodyさん
2006/03/02(木) 10:41:25ID:???半角スペース消せばいける気がする。
0418415
2006/03/02(木) 12:04:45ID:???{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じゃ無ぇ」と言われても…。
どうしたらよいのでしょうか。
0419nobodyさん
2006/03/02(木) 12:21:32ID:???式の左側がリテラル数値だと構文解析がうまく行かないみたいね。
100を一旦別の変数にアサインしておくとかしか思いつかない…
0421nobodyさん
2006/03/02(木) 17:58:46ID:???0422nobodyさん
2006/03/02(木) 17:59:36ID:???{(100-$percent)}
0424nobodyさん
2006/03/02(木) 20:44:41ID:???0425nobodyさん
2006/03/03(金) 01:46:20ID:???0426nobodyさん
2006/03/03(金) 04:19:51ID:iZN9RII3同じテンプレートファイル名は使えないの?
複数のmoduleにIndex.tplを置いてるんだけど
コンパイルキャッシュがバッティング(一方のファイルがあれば、それを読んでしまう)
するようになった。
キャッシュファイルの先頭に付加される文字列って
ファイルの位置によって変えてるんじゃないのかなあ。
0427nobodyさん
2006/03/03(金) 07:41:19ID:???$smarty->compile_dirや$smarty->cache_dirをテンプレートファイルがあるディレクトリに応じて変えてやるしかない。
テンプレートファイルの置き場所を階層化する場合ある程度ラッパとか書くといいと思う。
0428nobodyさん
2006/03/03(金) 10:56:04ID:???crc32()とか使ってるみたいだから、衝突する確率が
それほど高い訳でも無いと思うが、あり得なくは無いな。
反則かもしれんが、_get_auto_filename() をオーバーライドするとか。
0429nobodyさん
2006/03/03(金) 13:55:42ID:???0432nobodyさん
2006/03/03(金) 18:34:46ID:???以前俺も同じ問題ではまってたときファイル名かぶったら確実にバッティングしてた気がするけど気のせいかな?
つーかディレクトリ変えるのが一番楽だよ。
ファイル名がかぶってるってことは別のディレクトリにあるってことだから、そのtemplate_dirとcompile_dir・cach_dirに対応関係もたせりゃいいだけだし。
お好みでconfig_dirも合わせてやったり。
個人的にはconfigファイル使わないけどね。
0433nobodyさん
2006/03/03(金) 22:31:43ID:???0434nobodyさん
2006/03/03(金) 22:38:35ID:???428だけど、よく見たら、crcの算出に使ってるファイル名には
template_dirの部分が入ってないみたいだから、
template_dir変えてcompile_dir変えないと確実に起きるのかもな。
ソース見た癖にいい加減な書き込みですまんかった。
0435nobodyさん
2006/03/03(金) 22:45:17ID:???実経験上。
俺はフレームワークなど使う場合は、moduleごとにcompileディレクトリ作成してるよ。
0436nobodyさん
2006/03/03(金) 22:55:29ID:???0437nobodyさん
2006/03/03(金) 23:19:56ID:???バッティングするってことですか?
0438nobodyさん
2006/03/03(金) 23:35:56ID:???そんなのあるんだ。知らなかった。
>>437
template_dirが違ってても、compile_dirが同じならバッティングする、
と思ってたけど、>>436でなんとかなるのかな?
調べてないからわからんけど。
0439nobodyさん
2006/03/03(金) 23:42:52ID:???template_dir/hoge_index.tpl
これで解決するよね
0440436
2006/03/04(土) 01:19:29ID:???fetch()の第3引数がnullのときはSmarty::$compile_idが使われるみたい
0441426
2006/03/04(土) 05:03:02ID:???$compile_idにmodule名をセットする方法でOKでした
>>433
俺もそうする方が自然だと思うなぁ
0442nobodyさん
2006/03/04(土) 10:08:50ID:???0443nobodyさん
2006/03/04(土) 10:09:35ID:???0444nobodyさん
2006/03/04(土) 13:12:53ID:???そりゃそうだけど、たぶんこの問題がおきるのはsmartyの初期化やdisplayメソッドを呼び出す部分を共通化して一箇所に集めた場合。
たとえばフレームワーク(必ずしもmojaviとか大げさなものでなくても単にアプリ全体の骨組みって意味で)を作るとこういう問題にぶちあたりうる。
0446nobodyさん
2006/03/04(土) 19:07:52ID:???良スレです。お世話になってます。
0447nobodyさん
2006/03/08(水) 11:15:02ID:???{literal} <?=DEFINED_VALID ?> {/literal} としてみても、
Smartyの構文解析回避するとPHPの構文解析も飛ばされるようで値が読み込めません。
やっぱ一個一個変数にassignしなおさなければならないのでしょうか?(;´Д`A
■ このスレッドは過去ログ倉庫に格納されています