【PHP】Smarty【Template】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/10 00:57ID:NhgrjNBT本家(英語)
http://smarty.php.net/
日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0136114
03/05/08 13:03ID:???オオー!素敵なコメントありがとう!
もちろん、絶対恩返しします!
0138135
03/05/16 10:49ID:???そのコメントは僕の考えたコメントじゃないんですけどね…
僕も今まで色々質問ばかりしてきて、たくさんの親切な人にいっぱい教えて
もらいました。その時言われたのが>>135のような言葉です。
多分UNIX系の方々の考え方だと思いますが、僕もその考えに賛同して、
その恩を他の困っている人に返しています。
UNIX板など行くと商業サポートかと思うくらい、質問に答えてばかりの人が
いますが、多分その方も誰かから色々教わったたり、フリーソフトウェア、
オープンソフトウェアの恩を返しているんだろうなぁと思います。
#smartyというこんなに労力のかかっているソフトを無料で配布している
作者さんに対しても恩を返していることになるのかなぁ…
0139nobodyさん
03/05/21 19:08ID:p8eRICbYひとつの変数を使いまわして、新たな値を入れたい時は、
毎回clear_assign()使った方がいいんでしょうか?
使わなくても動いてるみたいだけど。。。
0140あぼーん
NGNG0141139
03/05/21 19:13ID:p8eRICbYSmartyって、if とか loop が使えるじゃないですか。
これってとても便利なんですが、デザイナーさんもこういうのをある程度は
理解しないといけないですよね。
そうするとデザインとロジックの分離からちょっとずれてしまう気がするんですが
実際デザイナさんと作成されている方はこの辺どうされてるんでしょうか?
if文は使ってないなぁ。
loopは使えないとお互い不幸になりそうなので使ってます。
・とりあえずloopとか変数とか無しでデザイン作ってもらう
・その後、自分がloop箇所や変数箇所を追記・修正
・デザインや文章に変更が生じた場合、命令部を破壊しないように変えてもらう
自分はこんな感じでやってるよ。
0143山崎渉
03/05/22 01:57ID:???0144139
03/05/22 10:34ID:???ありがとうございます。
デザインが先で、あとは {...} が付いている所はさわらないで
もらうって感じですね。
if 文使ってないというのは、例えば、状況によって画面の表示を変えたい時
どのようにされてるんでしょうか?権限によって画面を変えたいときとか。
>権限によって画面を変えたいときとか。
ファイルそのものをわけちゃう。
Dreamweaver等でデザインファイル(html)をみるときもその方が
見やすいと思うのだけどどうだろう。
このあたりは人によって開発手法違うだろうから
他の人の意見も聞きたいなぁ。
0146nobodyさん
03/05/22 19:56ID:???みなさんはどのように作っていらっしゃいますか?
自分も今作っているのですが、設定ファイルがあちこち行ってしまって複雑になってしまい
ました。
title,descriptionなどを入れた、configs/sub.conf
サブごとのラッパークラス includes/sub.lib.php
そして、各phpファイル www/sub/index.php
みなさんはどのようにやっているんですかねぇ?
0147あぼーん
NGNG0148あぼーん
NGNG0149あぼーん
NGNG0150山崎渉
03/05/28 17:07ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0151nobodyさん
03/05/31 13:59ID:???スクリプトファイルとテンプレートファイルを同じディレクトリに置いて管理してます。結局これが自然な気がします。ヘッダやフッタのような共通ファイルは別場所でまとめて管理。
PEAR を継承してテンプレート制御用のクラスを作りその中で Smarty を初期化してます。
この中で例えば $obj->smarty->display() のような関数に対して $obj->display() のようなラッパーを作り、そこで template_dir や compile_id の制御を行います。
でそのクラスをさらに extends して特定ブロックごとに合わせています。
実行はこんな感じ。
$tpl = new TemplateAreaName;
/* .. snip.. ここで処理&変数のアサインを行う */
// レンダリング
$tpl->showHeader();
$tpl->showMenu();
$tpl->display('index.tpl');
$tpl->showFooter();
0152nobodyさん
03/05/31 19:10ID:???>スクリプトファイルとテンプレートファイルを同じディレクトリに置いて管理してます。
なるほど。確かに更新するとき、両方のディレクトリを行き来したりする必要はなくなりますね。
これだと、テンプレートファイルも外から見えますよね?
問題ないんですかね。
0153nobodyさん
03/05/31 20:19ID:???う〜ん、、どうなんでしょう。今回 Smarty を初採用し、アプリケーションの完成度も 40% というところなので正直手探りでやっています。
もっと良い方法があればいいのですが。
ご指摘の危険性は考えましたが元々テンプレートをさくさく差し替えれるようにテンプレートには極力情報を埋め込まないようにしており、
テンプレートへの直接のアクセスも拡張子によるアクセス制限で回避出来ると思ってこの方法でやっています。
0154nobodyさん
03/06/01 12:57ID:???もう一つ思い出しました。
テンプレートの先頭にスクリプトを埋め込むか、テンプレートをPHPとして認識させて define などを使ってダイレクトアクセスを防ぐ手段も考えられます。
PHPBB のライブラリとかこういうやり方だったような。
0155nobodyさん
03/06/07 06:42ID:dfQas5D8これは私だけ?
確か、Smartyクラスモジュールの2691行目だったと思います。
$smarty->use_sub_dirs = false;
で回避できない?
意味はマニュアル参照。
0157nobodyさん
03/06/10 07:06ID:Fwh1UjxU$smarty->use_sub_dirs = false;
やってますが、それでもwarning出てしまします。
ほかに思い当たる情報があればお願いします。
0158あぼーん
NGNG0159あぼーん
NGNG0160あぼーん
NGNGというかそのwarningの内容出してくれないと何とも。
cacheディレクトリとtemplates_cディレクトリに
書き込み権限与えてる?
0162nobodyさん
03/06/12 18:20ID:???googleで調べて、magpieというのがあったので、それを使おうとしています。
が、日本語が文字化けしてしまうので、変換させたいのですが、どこでどう変換させれば
いいのかがわかりませんでした。
以下が、smarty用サンプルコードをいじったものです。
$url = $_GET['rss_url'];
if ( $url ) {
// assign a variable to smarty for use in the template
$smarty->assign('rss_url', $url);
$rss = fetch_rss( $url );
// if fetch_rss returned false, we encountered an error
if ( !$rss ) {
$smarty->assign( 'error', magpie_error() );
}
//ここは文字化け対策成功
$rss->channel['title'] = mb_convert_encoding($rss->channel['title'], "EUC", "auto");
foreach ($rss->items as $item) {
//ここでどのような変数に代入すれば良いのでしょうか?
$title = mb_convert_encoding($item['title'], "EUC", "auto");
}
$smarty->assign('rss', $rss );
$item = $rss->items[0];
$date = parse_w3cdtf( $item['dc']['date'] );
$smarty->assign( 'date', $date );
}
0163nobodyさん
03/06/13 04:36ID:???foreach ($rss->items as $key=>$item) {
$rss->items["$key"]['title'] = mb_convert_encoding($item['title'], "EUC", "auto");
}
でOK。
0164nobodyさん
03/06/20 01:36ID:22HNzffu0166nobodyさん
03/06/22 01:38ID:9+GBIMXBどーやんの?
0167nobodyさん
03/06/22 08:43ID:???http://www.spencernetwork.org/
0168nobodyさん
03/06/28 01:23ID:M0QDMJtSわかんねー
0169あぼーん
NGNG0170あぼーん
NGNG0171あぼーん
NGNG0172あぼーん
NGNG0173あぼーん
NGNG0174あぼーん
NGNG0175あぼーん
NGNG0176nobodyさん
03/07/12 19:16ID:P6mY9BCG0177nobodyさん
03/07/13 01:15ID:iGC1lgy5使われているサイト知ってる?
0179nobodyさん
03/07/13 14:05ID:Qv0LVgul例えば、エラーチェックを行って、エラーに引っかかると
別ウィンドウでエラー内容を表示する、等
require もしくは header 関数を利用して。
もしくはそれ以外の関数、コーディングで。
Ncurses関数は客の鯖問題でPHPをリコンパイルできません。。
0180あぼーん
NGNG0181nobodyさん
03/07/13 14:14ID:48FuQ70+今手元にないから分からないけど、
"Professional PHP プログラミング"に、それらしい例がのっていたような。
0182nobodyさん
03/07/13 14:17ID:Qv0LVgul早速ありがとうです。
調べてみます
0183nobodyさん
03/07/13 15:19ID:???smartyと関係ない上にマルチポスト
0184nobodyさん
03/07/13 16:23ID:???できるの?コレ?
0185山崎 渉
03/07/15 11:07ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0186nobodyさん
03/07/15 17:55ID:wTgTaT8Bコンテンツとデザイン〜の1です。
>>177
一応は本家公認のテンプレートエンジンって扱い(ですよね?)なので、海の向こうでの
使用頻度は高いんじゃないかと思います。xoopsに採用という実績もありますし。
国内でも自分みたいな糞田舎の情報システム部ですら2年前から使ってるので、それなりに
普及していると思いますよ。googleでも随分引っかかるようになってきましたね。
0187nobodyさん
03/07/16 00:47ID:???APCとかZendOptimizerとか使える?
0188nobodyさん
03/07/21 14:35ID:???全く assign していない PEAR::raiseError のようなエラー処理の記述や print 文で勝手にエラー吐いてくれまつ。
…… Smarty のコードまで潜って 1h ほど戦って気付いた。
$tpl->display('hoge.php');
拡張子が .tpl ぢゃなくて .php で別ファイル指定してた。鬱だ氏のう _| ̄|◯
別に問題ないかと。
APC1の頃は大丈夫だったし
現在はmmcache使ってるけど大丈夫だよ〜。
0190nobodyさん
03/07/22 15:11ID:???appendとassignって何が違うんでしょう?
0192nobodyさん
03/07/28 23:09ID:Qst4s2Alページの一部分だけキャッシュのすることってできないですか?
自分、いわゆる「ぱんくず(※)」をキャッシュにしたいんですよね・・・
※トップページから現在のぺージまでの道筋を表したもの。
例)Yahoo!とかだと
ホーム > コンピュータとインターネット > ソフトウェア > インターネット > WWW > ブラウザ
っていうあれね。
0193nobodyさん
03/07/28 23:36ID:zAmscCpEhttp://www3.free-city.net/home/espresso/white-snow.html
0194nobodyさん
03/07/29 17:31ID:aKRM8GxJinsertを使えば出来る。
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0J_html/language.function.insert.html
カスタムプラグインでテンプレート内に{breadcrumb 現在の位置="hoge"}ってかくと
自動でずらっとパンくず表示してくれるの作ったけど便利だよ。
他のサイトにも再利用できるし。
0195nobodyさん
03/08/01 14:03ID:???使わせたいんですが、Smartyタグのデリミタは何が無難でしょうか。
ページ内にCSSを書くこともあるのでデフォルトの { } は使わせたく
ないし、XOOPS2 なんかで定義されている <{ ]> でもいいかなと
思ったけど、< なんかに自動的に置換されてしまわないかと心配
です。それに、modifierのパラメータを " で囲むと " に置換
されるもよう。
0196山崎 渉
03/08/02 02:23ID:???( ^^ )< ぬるぽ(^^)
0197ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:51ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0198nobodyさん
03/08/09 06:43ID:ZOEKZBoK0199あぼーん
NGNG0200nobodyさん
03/08/09 07:56ID:0dlTg+8lhttp://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=doc&txt=htmltemplate
を氏蘭のか?
0201あぼーん
NGNG0202nobodyさん
03/08/09 15:33ID:ZOEKZBoKせめてキャッシュを実装してほしい。(中間ファイルでないよ)
タグが拡張できるようにしてほしい。
ちゃんとエラーハンドリングしてほしい。
このあたりを実装してくれれは少しは考えるが、
まだ今のところはSmartyのほうが使い勝手はいいな。
0203あぼーん
NGNG0205nobodyさん
03/08/12 13:45ID:7lLuw4V/いや、中身は見てないが。
0207nobodyさん
03/08/13 11:24ID:+vOr/IO1普通、Release Candidate版って問題がなければそのままリリース版に
するものだから、仕様変更はその前の時点で落ち着いていて欲しいな。
その辺、PHPらしいと言えばらしいけど。
0208nobodyさん
03/08/13 21:01ID:???旧ver Release -> 新ver RC は仕様が変わっててあたりまえじゃないか?
0209nobodyさん
03/08/14 12:09ID:Ayxn98z4それもそうだ。
新ver RCと旧ver Releaseの間に新ver betaに相当するもの(CVS head)が
あったと考えれば問題ないな。スマソ。
0210山崎 渉
03/08/15 22:32ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0211nobodyさん
03/08/16 17:32ID:???それを配列にいれます。
その配列を1こずつ、ループさせて、テンプレートで
書き出すにはどうしたらいいんでしょうか。
勘で、
index.php
for($i=0; $buf=gets($fp, 8000); $i++)
{
$msg[$i]=$buf;
$smarty->assign('msg',array("$i"=>$buf));
}
出力側
{section name=msg_id loop=$msg}
msg: {$msg[msg_id]}<br>
{/section}
とかやってみたんですが、うまくいかないです。
誰か教えてください。
0212nobodyさん
03/08/16 17:45ID:???$fpの中には、ログファイルが入ってます。
0213nobodyさん
03/08/16 18:04ID:???(^○^)
0214nobodyさん
03/08/23 08:07ID:qE2mijHa0215nobodyさん
03/08/31 23:16ID:OAFHlkE10216nobodyさん
03/09/03 11:17ID:???0217nobodyさん
03/09/11 19:36ID:???0218nobodyさん
03/09/12 09:35ID:???0219nobodyさん
03/09/18 10:27ID:bzSYta4I0220nobodyさん
03/10/02 10:36ID:ZE4wxlxfSmartyを使ったプログラムを業者に頼んだら、あがってきたソースは
タグまでphp側で書いてきました。最初print文を使ってるのかと思いました。
$str ="<form name=f action=aaa.php method=post>\n";
$str .="<TABLE cellSpacing=0 cellPadding=5 width=620 border=0 >\n";
$str .="<TR $ABC>\n";
・・・
$str .="</TR>\n";
$str .="</TABLE>\n";
$str .="</form>\n";
こんな調子で300行くらい。で、最後にデータをassignしてました。
$tpl->assign("str",$str);
で、これではSmartyの意味がないので、タグ(デザイン)とプログラムを分離してください。
と伝えた所「タグとプログラムの完全な分離はできません」と言われました。
私はできるんじゃないかと思っていたのですが、Smartyでは「タグとプログラムの完全な分離」
は不可能なのでしょうか?
0221nobodyさん
03/10/02 12:19ID:???端折ったコードで申し訳ないが
<table>
<tr>
<th>header1</th>
<th>header2</th>
</tr>
{loop}
<tr>
<td>{$data1}</td>
<td>{$data2}</td>
</tr>
{/loop}
</table>
Smartyはこんな風に使うんだよ、と教えてあげて。
0222nobodyさん
03/10/02 12:20ID:???端折ったコードで申し訳ないが
<table>
<tr>
<th>header1</th>
<th>header2</th>
</tr>
{loop}
<tr>
<td>{$data1}</td>
<td>{$data2}</td>
</tr>
{/loop}
</table>
Smartyはこんな風に使うんだよ、と教えてあげて。
0223220
03/10/02 13:42ID:???ご返事ありがとうございます。やはりおかしいですよね。
私はPHPは初心者なのですが、納入されたSmartyをみて
びっくりしました。参考にしようと思ったのに・・・。
今修正してもらってます。
ついでにいうと、納入された物を見ていたら、仕様書に
書いてある事でやっていないことがあったので、それを指摘したら
「じゃあ、仕様書をなおしておきます」と平気で言い放ちました。
(゚Д゚)ハァ? …タマゲマスタ!
全然関係ない話スマソ。
0224nobodyさん
03/10/02 22:25ID:???0225nobodyさん
03/10/02 23:06ID:???HTML分離させて渡したら、良く分からないので
このHTMLをSmarty用に書き換えてとか渡された。
わかんね−なら最初っからSmartyでとか言うんじゃ寝ェよ
0226nobodyさん
03/10/08 14:23ID:h0+MMd8V上のサイトを参考にPHPでMVCってみたけど・・・しんどい・・
ログ読ませてもらったらよさそうなので今度のシステムで使わせてもらいます。
0227nobodyさん
03/10/09 17:38ID:???$a[0]->c[0] = 2;
$a[0]->c[1] = 3;
$a[1]->b = 4;
$a[1]->c[0] = 5;
$a[1]->c[1] = 6;
$tpl->assign("a", $a);
こんな感じで
{section name=loop1 loop=$a}
{section name=loop2 loop=$a[loop1]->c}
{$a[loop1]->c[loop2]} {* ← ここでエラー *}
{/section}
{/section}
とすると
unidentified token '[loop2]'
と怒られます(涙)
なにかいい方法ないでしょうか?
$a[x][a]
なら行けるんですけど、assignが面倒で。。。
0228227
03/10/09 18:42ID:???失礼しました!
{section name=loop1 loop=$a}
{foreach key=key item=item from=$a[loop1]->c}
{$key} = {$item}
{/foreach}
{/section}
0229nobodyさん
03/10/10 00:49ID:???0230nobodyさん
03/10/10 00:58ID:oTftSrdr自分の、ファイルを置ける領域に「Smarty」という名のディレクトリをつくり、、ファイル群をそこにアップロードして、、
define("SMARTY_DIR","/Smartyへのパス・・・・・・/Smarty/");
require_once(SMARTY_DIR."Smarty.class.php");
とやれば、使えるのでしょうか?
0232230
03/10/11 00:46ID:U0DA9P6C自分が借りてるレンタルサーバで、PHPが近々はいる予定なので、
関心があって訊いてみました
0233nobodyさん
03/10/11 08:24ID:???0235nobodyさん
03/10/14 23:32ID:???PHPを実行するユーザーが、templates_cとcacheディレクトリを
読み書きできるように、場合によってはパーミッションを変更しないと
いけないのだが、そのへんは大丈夫?
■ このスレッドは過去ログ倉庫に格納されています