【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/
0450nobodyさん
2006/03/09(木) 15:36:02ID:???こういう作業は、テンプレートの仕事かなと思い、修正子を調べた
ところ、該当するのが見当たりませんでした。
結局、number_format 関数を通した値をテンプレートに渡す事に
したんですが、何か釈然としなくて・・・。
0451nobodyさん
2006/03/09(木) 15:53:08ID:???俺はそれでいいと思う。
テンプレートに突入する前にMVCモデルのViewでやると考えれば違和感ないと思うけどどうだろう?
0453450
2006/03/09(木) 16:09:48ID:???>>451
そういう見方も出来るんですが、時刻表示とかは修正子を使って、
数字にカンマを入れるときには上位でというのはバランスが悪いん
ですよね。
>>452
マニュアルの読み込みが足りませんでした。(^^;
これが決定打みたいですね。
0454nobodyさん
2006/03/09(木) 16:31:28ID:???PHP組み込みの関数はそのまま修飾子として使えるはずだけど
0455454
2006/03/09(木) 16:32:41ID:???0456450
2006/03/09(木) 18:20:16ID:???454さんが仰る通り、PHP組み込み関数は、そのまま使える様です。
お騒がせしました。
0457nobodyさん
2006/03/13(月) 02:48:18ID:LxXJ5I4v乱数をassignしたのですが反映されません。
キャッシュしてるからというのはわかるんですがこれでは静的ページとなんら変わらないと思います。
実際に使用されてる方はどのように使ってるのでしょうか?
よろしくお願いします。
0458nobodyさん
2006/03/13(月) 05:34:35ID:???0459nobodyさん
2006/03/13(月) 09:59:39ID:???そんなレベルの人間が使うライブラリじゃない。
おとなしく静的ページにしとけ。
0460nobodyさん
2006/03/13(月) 10:38:47ID:???http://sunset.freespace.jp/smarty/SmartyManual_2-6-6J_html/caching.html
を見ても解決しない?
0461nobodyさん
2006/03/13(月) 18:59:41ID:vm5765LnStrict Standardsエラーってどうしてますか?
開発中はE_STRICTを有効にしたいのですが
なにか回避策はないでしょうか?
0462461
2006/03/13(月) 19:19:07ID:???smartyのrequireのときだけ
一時的にエラーを無効にすることで回避できました
失礼しました
0463nobodyさん
2006/03/13(月) 19:35:16ID:???とはいえHTMLの埋め込みタグはあんまりきれいじゃないし、デザには理解不能。
デザがHTML埋め込みでプログラミングもひっくるめてHTML記述の責任持てよ。
0464nobodyさん
2006/03/13(月) 19:50:18ID:???5.1.3 から "var $hoge" では Notice 出ないようになるみたい。(CVS の NEWS ファイルより)
?? Mar 2006, PHP 5.1.3RC2
- Removed the E_STRICT deprecation notice from "var". (Ilia)
0465nobodyさん
2006/03/14(火) 10:11:00ID:???0466457
2006/03/16(木) 02:50:57ID:???キャッシュ時間の設定とかだとユーザ毎に違う内容を表示させるなどの場合は毎回コンパイルをする事になりますよね?
それは嫌なのでinsert使って見たのですがとても使いづらいです。
毎回表示が変わるようなサイトには向かないんでしょうか。
ユーザ毎に違うデザインを使うのでテンプレートがあるのはとても良いのですが。。
0468nobodyさん
2006/03/16(木) 06:57:34ID:???低脳ウゼェ、消えろ
0469nobodyさん
2006/03/16(木) 07:30:05ID:???素人考えでごめんだけど、いくらデザイナでも Java Script くら解るんだから、 Smarty の構文位何と無く解るんじゃない?
0470nobodyさん
2006/03/16(木) 07:54:46ID:???0471nobodyさん
2006/03/16(木) 08:48:50ID:???オマエモナー
>466
そのあたりのこともこの本に詳しく書いてあります。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4798108839/qid=1142466453/sr=1-1/ref=sr_1_2_1/249-5433484-4741106
とりあえず立ち読みしてみることをおすすめします。
0472nobodyさん
2006/03/16(木) 09:33:19ID:???遅いじゃん。
0475nobodyさん
2006/03/17(金) 03:52:37ID:???オンラインドキュメントじゃなくて、書籍になってることに
意義が有る場合もあるのよ。ただ買うだけで満足してしまう
問題があるがねw
0477nobodyさん
2006/03/17(金) 13:52:50ID:???0479nobodyさん
2006/03/18(土) 16:36:29ID:???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
何が原因なのか教えていただけませんか?
0480nobodyさん
2006/03/18(土) 17:47:39ID:???0481nobodyさん
2006/03/18(土) 17:55:27ID:???$smarty->compile_dir = SMARTY_DIR."log/templetes_c";
0482nobodyさん
2006/03/18(土) 19:49:31ID:???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";
しかし、まだ同じエラーが出てしまいます…。
0483nobodyさん
2006/03/18(土) 20:52:33ID:EsSA/NIptest.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');
?>
0484nobodyさん
2006/03/19(日) 00:46:35ID:???変数のに読み込んでおいた内容と使う方法ってあります?
同じ内容のテンプレートを場合によって微妙にパスとかを変えたいので…。
具体的には、本場用とプレビュー用のHTMLを大量生成したいので、
イチイチ1ファイルごとにテンプレートファイルを生成してやると、
速度的に問題があるので…。
0485nobodyさん
2006/03/19(日) 00:59:14ID:???!!!上手くいきました!
大変お恥ずかしいですが、template_dirがtemplete_dirになっていたようですorz
失礼しました
0486nobodyさん
2006/03/19(日) 22:09:41ID:???練習ならディレクトリごと変えてるでしょ。
0487nobodyさん
2006/03/19(日) 22:30:06ID:???なにかSmartyの用途を誤解してないか?
テンプレートファイル自体を動的に生成する必要がある状況って
思い当たらないのだが。
0488nobodyさん
2006/03/22(水) 18:58:12ID:???0489nobodyさん
2006/03/24(金) 20:46:45ID:???0490nobodyさん
2006/03/25(土) 09:48:17ID:???0491nobodyさん
2006/03/25(土) 14:14:45ID:RtAYAo7R0492nobodyさん
2006/03/25(土) 17:11:47ID:WzKCkjotあるブロックを任意の回数だけ繰り返し表示したいのですが、
例えば以下のようなブロックがある場合、どのメソッドを使えば
いいでしょうか?
ちなみにparseメソッドでは表示されませんでした。
<!-- BEGIN foo -->
テスト
<!-- END foo -->
0493nobodyさん
2006/03/25(土) 22:43:48ID:???0495nobodyさん
2006/03/26(日) 01:09:55ID:8F2N8by3え?Sigmaってブロックの繰り返しとか分岐とかできないの?
>>494
Sigmaにforeachってメソッドがあるの?
それともPHPのforeachのこと?
0497nobodyさん
2006/03/26(日) 02:35:34ID:???性格悪いなおい。
0498nobodyさん
2006/03/26(日) 03:16:58ID:???0501nobodyさん
2006/03/26(日) 19:27:14ID:???詳細が知りたければ金払わないと。
0502nobodyさん
2006/03/26(日) 23:09:47ID:???雑魚ってあんまり使わない罵倒語だよね。
君はよく言われる状況なんだね(^^;がんばって生きてね(^^;;;;;;;;
0503nobodyさん
2006/03/26(日) 23:32:27ID:???0505nobodyさん
2006/03/27(月) 01:18:28ID:???http://bubble4.2ch.net/test/read.cgi/wm/1142433991/444
444 名無しさん@お腹いっぱい。 sage 2006/03/26(日) 12:15:46 ID:nUZ48+P7
なんなら徹底的に白黒つけようか?オマエが恥かくだけだぞ。
こっちは引くと言ってるんだ。おとなしくしていろ。
0506nobodyさん
2006/03/27(月) 01:19:06ID:???荒れてウザイから隔離板建てられてるし。
廚向けの言語を使う以上、ノイズが多いのは我慢してもらわないと。
0507nobodyさん
2006/03/27(月) 03:12:19ID:???自治スレで議論してもつけてくれないとからしいけど・・・
0508nobodyさん
2006/03/27(月) 14:41:12ID:???0509nobodyさん
2006/03/27(月) 15:33:04ID:???0510nobodyさん
2006/03/27(月) 15:45:11ID:???0511nobodyさん
2006/03/27(月) 16:49:12ID:???0512nobodyさん
2006/03/27(月) 16:50:15ID:???0513nobodyさん
2006/03/27(月) 20:31:56ID:???0514nobodyさん
2006/03/28(火) 00:08:21ID:???0515nobodyさん
2006/03/28(火) 00:14:29ID:???0516nobodyさん
2006/03/28(火) 00:26:44ID:???出来ないと思うな、思えば負けよ
0517nobodyさん
2006/03/28(火) 05:29:14ID:???0518nobodyさん
2006/03/28(火) 08:11:12ID:???0519nobodyさん
2006/03/28(火) 08:20:15ID:???0520nobodyさん
2006/03/28(火) 09:11:59ID:???cacheって単語ないよね。
0521nobodyさん
2006/03/28(火) 09:23:09ID:???日本語版あるのに。
0522nobodyさん
2006/03/28(火) 09:25:06ID:???0523nobodyさん
2006/03/28(火) 09:25:51ID:???http://pear.php.net/manual/ja/package.html.html-template-flexy.html-template-flexy.compile.php
じゃねーの?
キャッシュってどの部分の話なのか分からないけど。
>>521
ほんの一部だけな。
0524nobodyさん
2006/03/28(火) 12:05:09ID:ct8TgCpW0525nobodyさん
2006/03/28(火) 12:17:18ID:???0527nobodyさん
2006/03/29(水) 21:33:36ID:???> コンパイルされたファイルが存在しない
> テンプレートに変更が加えられており、コンパイルされたものより大きい
テンプレートに変更がない場合は既にコンパイルしたファイルを使うわけだからこれで十分じゃない
0528nobodyさん
2006/04/02(日) 21:51:22ID:pQIOcBrEステータスには「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行で出力する方法は無いでしょうか?
0529nobodyさん
2006/04/02(日) 22:28:40ID:???{foreach from=$CODE item=c}
{$STATUS.c}
{/foreach}
でいいんじゃないの?
0530528
2006/04/04(火) 16:53:19ID:???ご回答どうもです。
サンプルには書いていないのですが、
同時に$ID[i]が使いたい場合もあるのです。
なのでsectionでなんとかできないでしょうか?
0531nobodyさん
2006/04/05(水) 00:44:38ID:???スマートにこだわるのなら
array(
array('id'=>0, 'status'=>1),
array('id'=>1, 'status'=>2),
...
)
みたいな配列にしてからassignした方がスマートじゃないかな
0532nobodyさん
2006/04/07(金) 00:09:04ID:???次に示すような配列を返すように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>
下に求めている表示例と、現状の表示例を載せておきます。
0533nobodyさん
2006/04/07(金) 00:09:37ID:???//求めている表示結果(□:未チェック/■:チェック)
■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 ]
0534nobodyさん
2006/04/07(金) 04:37:39ID:???<td><input type="checkbox"{if $item != ""||$item == "0"} checked{/if}>{$key}</td>
0535nobodyさん
2006/04/07(金) 12:10:04ID:0TErvImy無事に動きました!
携帯からでスマソorz
0536nobodyさん
2006/04/18(火) 15:32:18ID:???ttp://pc8.2ch.net/test/read.cgi/php/1135847024/
0538nobodyさん
2006/04/18(火) 20:30:28ID:???0539nobodyさん
2006/04/21(金) 07:18:24ID:qi5wvjsu他のテンプレートエンジンvsSmartyならたくさん議論出来ると思うのですが、
ライバルがhtml+phpなのがにんともかんとも。
みんなデザイナさんが書いたhtml+phpソースで鼻血出した事無いのかなー
0540nobodyさん
2006/04/21(金) 07:27:03ID:G2Rp1nFESmartyなら鼻血ださないで済むの?
Flexyなら出さずに済みそうだけど。
0541nobodyさん
2006/04/21(金) 11:25:09ID:???> ライバルがhtml+phpなのがにんともかんとも。
Smartyが実際にそれと同様の結果をもたらしてるんだからしょうがない。
0542nobodyさん
2006/04/21(金) 11:59:49ID:???もうちょっと使うべきものが制限されてたら端から高機能を求めようなんて思わないのに。
そもそも目的はViewを分離(=Viewに制限)することだし、すでに十分果たせてるわな。
0544542
2006/04/21(金) 14:04:57ID:???スマン勘違い。
smartyには表示と関係ない機能が無駄についてるのかと思ってたけど、よく調べてみたらどれも表示に関連する機能だった。
0545nobodyさん
2006/04/25(火) 20:40:31ID:???DBに接続&データを取得し、それをsmartyにアサインして、表示させています。
$obj_smarty->diplay("hoge.tpl",$id);
が一番最後にあるため、せっかくのキャッシュデータがあるにもかかわらず、その前の時点でDB接続をしてしまいます。
表示されるデータは結局キャッシュされたものなんですが。
(コントローラの)ページの先頭で、すでにキャッシュが存在するかどうかのチェックして、
存在した場合は各種処理をスキップするには、どのようにしたら良いのでしょうか?
0546545
2006/04/25(火) 21:03:11ID:???0547nobodyさん
2006/04/26(水) 18:18:54ID:???それを一つの temolate_c に出力してしまうのはやっぱ問題ありますかね
■ このスレッドは過去ログ倉庫に格納されています