トップページ⇒php
984コメント324KB

【PHP】Smarty【Template】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/03/10 00:57ID:NhgrjNBT
このスレ、あってもいいんじゃないかと。

本家(英語)
http://smarty.php.net/

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0482nobodyさん04/09/19 19:10:05ID:???
感動話だよ。
0483nobodyさん04/09/19 20:18:01ID:???
泣けます。
0484nobodyさん04/09/19 21:45:49ID:???
なぜこのスレに張るのかがイマイチ分からないけど泣ける。
0485nobodyさん04/09/22 01:32:35ID:???
意図がわからんが、泣ける。
0486nobodyさん04/09/22 02:08:38ID:???
#セ\NAugmc
0487nobodyさん04/09/22 20:46:22ID:S3VBXifE
php.iniは
output_buffering = On
output_handler = mb_output_handler
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
で
$buffer_euc = $smarty->fetch('index_m.tpl',$smarty_cache_id);
$buffer_sjis = mb_convert_encoding($buffer_euc,"SJIS");
//---------------------------------------------------------------------------
header( 'Content-Type: application/xhtml+xml; charset=Shift_JIS' );
header( 'Content-Length: ' . strlen( $buffer_sjis ) );
//--------------------------------------------------------------------------
$smarty->display('index_m.tpl',$smarty_cache_id);
としてるのに、出力がEUCになってしまいます。

どんな原因が考えられるのでしょうか?
0488nobodyさん04/09/22 22:03:51ID:???
泣いた
0489nobodyさん04/09/22 22:05:55ID:???
・phpのバージョンくらいは書く
・$buffer_euc, $buffer_sjis等の出力の文字コードをチェックするなりして、問題を絞り込む
・キャッシュが更新されずに古いものが使用されてないか?
0490nobodyさん04/09/22 23:09:16ID:???
>>489
>>488が泣いたのはそんな理由じゃないと思うよ。
まずoutput_buffrering不要。
一応mb_convert_encodingの第三引数に"EUC-JP"を入れといた方が無難。
極め付けに痛いのが $smarty->display('index_m.tpl',$smarty_cache_id);
echo $buffer_sjis; でええんちゃうかと。
049148704/09/23 11:59:14ID:???
>>488-490さん、ありがとうございます。

すいません、情報不足で。PHP5.0.1です。
キャッシュは、全部けしてもおなじ状況でした。

で、まさかと思って調べてなかったのですが、
$buffer_euc = $smarty->fetch('index_m.tpl',$smarty_cache_id);
のちの$buffer_eucは空でした。
なので文字コードは、$buffer_euc、$buffer_sjisともに空で、
ただし、
$smarty->display('index_m.tpl',$smarty_cache_id);
はなぜか(EUCで)表示できてます・・・。

>>490
echo $buffer_sjis; でええんちゃうかと。
いや、どうしても重くならざるをえないページなので、
キャッシュをつかいたかったもので。

やはりPHP5.0.1というのが相性悪いのでしょうか?
ただ、スクリプトの他の部分では、$smarty->display成功してるんですよね。(ちゃんとSJIS)

変数やファイル名が違うだけで、そこといっしょのことをしてるはずなんですが・・・
0492nobodyさん04/09/23 12:05:14ID:???
>>491
意図したコードと違うことが書いてある気がする。もういちどよく見直せ。
適切なタイミングでnew Smarty()してないとかw

んで、>490ではないが、featchの内容とdisplayの内容が同一で、
SJISに変換したものが$buffer_sjisに入ってるなら、それを出力してやったほうが処理は早いぞ。
0493nobodyさん04/09/23 12:41:42ID:???
488だが>>479について泣いたつもりだったんだよな
049448704/09/26 01:42:15ID:ORPXRj+I
>>487です。
とりあえず文字化けは「解決」しました。というか、あきらめました。
application/xhtml+xml;をあきらめて、"Content-type: text/html";にしたら、
文字化けしないようになりました・・・

ただ、別の問題が生じてます。
>>487のソースで、
HTTPヘッダが「Content-Length: -」となってしまいます。
どうにかして、smartyを使いつつ、「Content-Length」を正常に表示させる方法とかないでしょうか?

ob_関係の関数使おうかと思ったのですが(ob_get_lengthとか)
「smarty->display」でブラウザに表示されるときはSJISですが、
その直前まではEUCなので、文字数がずれてしまいます・・・
どなたか裏技っぽい方法でもいいので、お助けいただければ幸いです。
0495あぼーんNGNG
あぼーん
0496nobodyさん04/09/26 19:15:27ID:???
結局>>495のアドレスは何だったんだろう?
0497 ◆AngelH/kMI 04/09/28 02:48:49ID:???
>494
$smarty->fetch()で表示内容取得して
文字コード変換かけてstrlenで測るとか?

・・・かなりダメそうな方法だ(苦笑
049848704/09/28 11:55:20ID:???
>>404
いや、それ、>>487でやってます。(content typeは違うけど)

そしたら、「Content-Length: -」となってしまうので。。
0499nobodyさん04/09/28 15:25:48ID:???
>>494
アウトプットフィルタプラグインとかどうよ
050048704/09/29 12:13:50ID:???
>>494

ん・・・・・あんまり概念が理解できてないから、自作はきびしいかも。。。
050148704/09/29 12:14:03ID:???
もとい、>>499さん。
0502nobodyさん04/10/11 16:58:02ID:RLUAfbkL
HDMLの携帯サイトを作るのにsmartyは使えませんよね。
0503nobodyさん04/10/11 18:13:33ID:???
>>502
どうせフレームワーク組んじゃうんだろ?
んじゃpattemplateのほうがシンプルで扱いやすいだろ。
smartyはあくまで、いろいろ自分で組めない厨向けのテンプレだぞ。
0504nobodyさん04/10/12 12:14:58ID:???
>>502
使えますってか使いました。
0505nobodyさん04/10/12 14:58:47ID:???
>>503
まず出来上がりの早さを求めるのであって
自分で出来るか出来ないかの問題ではない

そこから、どう不都合になるか考える。
出来てから考える。

誰でも自分で作れるよ。でも1年かかります。そんなの待てるか。
といわれちゃうよ
0506nobodyさん04/10/12 16:27:47ID:bb34UBPS
>>503
まあ、それをいうならPHPはあくまで、いろいろ自分で勉強できない厨向けの環境だからな。
0507nobodyさん04/10/12 16:42:18ID:???
ということにしたいのですね:-P
0508nobodyさん04/10/12 17:24:13ID:bb34UBPS
そういや、PECLってどうなったん?
あと、なんかCPANみたいなのやるっていう話なかった?
0509nobodyさん04/10/12 19:39:43ID:???
誤爆してるぞ
0510nobodyさん04/10/16 23:33:47ID:OMhy7HMx
便利そうなのでSmarty使ってみようと思ったけど
インストールすら出来ない(´・ω・`)
初めのHello!,Ned1が出ないし

きちんとinclude_pathを設定して...Example 2-9でエラー
unexpected T_STRING in c:\〜 in 20

はて、config_dirのパスが設定出来ないらしい
Windowsの絶対パスはc\:からだよね?
0511nobodyさん04/10/17 05:34:27ID:???
 ・ ”C:\〜” ではなく ”C:/〜” を使ってみる
 ・ 相対パスを使ってみる
051251104/10/17 05:35:51ID:???
なんか腹が立つな
>(´・ω・`)
0513nobodyさん04/10/17 07:09:37ID:???
こころが狭いか、2chに不慣れなやつだな。
0514nobodyさん04/10/17 17:17:49ID:???
自分のせいじゃなくシステムのせいにする人格の象徴⇒(´・ω・`)
もしくは某板の糞コテ
0515nobodyさん04/10/17 18:11:08ID:???
なんか、nobodyさんはすべて同じ人物だと思ってるのと同じ程度の痛さだね。
0516nobodyさん04/10/17 18:18:34ID:???
字句解析までしか出来ない駄目AIの僻み
0517nobodyさん04/10/17 21:08:07ID:2DZWHiAE
511さんのオカゲで出ました。ありがとう
やはりC:/〜でした。
0518nobodyさん04/10/27 11:44:54ID:5LD6Mw3o
アプロードしたtemplates_cの中のファイルが削除できない。
templates_cそのものも削除できない。
なぜかな?
0519nobodyさん04/10/27 12:38:36ID:???
templates_cの中のファイル群はWebサーバの動作権限(ユーザー)で作成されるから。
0520nobodyさん04/11/09 09:28:23ID:RHwN8VlW
smarty使ったblogの開発で人募集してるので
オープンソースに興味がある人とか参加してみたら?
--------------------------
【2ちゃんブログ】次世代開発中心 Part2@ブログ
http://pc5.2ch.net/test/read.cgi/blog/1092616279/l50

391 名前:忍ロボ ◆O6dempau.2 本日のレス 投稿日:04/11/09 01:48:13 GsdPVZqn
ちゃぶだい
開発に参加してくれる人募集します〜

・開発者さん(PHPで開発できるひと)
・デザイナーさん(デザインテンプレート作成)

こちらのメールフォームから連絡よろしくですー
↓
http://chbox.com/mail/
■ハンドルネーム
■連絡先メールアドレス(フリーメール不可)
■ホームページ/weblog URL
■(開発者? / デザイナー? / その他)
■連絡事項(あれば)
0521matsumoto04/11/10 22:33:26ID:6T9+fSCp
smartyでテンプレートには設定しているけれど、assignし忘れた場合、
Arrayと出力されてしまうけれど、これを 表示しないようにする簡単な方法はないのでしょうか。
0522nobodyさん04/11/11 00:19:20ID:???
>>521
それは、
テンプレートで参照してるけど、
assignしていない場合に、Arrayと出力されていて、
その現象を回避したいってこと?
0523nobodyさん04/11/11 01:14:01ID:???
別にArrayなんて出ないけどな。違うものassignしてるんじゃないの?
0524matsumoto04/11/11 02:52:04ID:IGJG68qY
■テンプレート
{$aaa} -- {$bbb}

■PHPプログラム
$smarty->assign("bbb" , "BBB");
// $aaaについてはassignしない

■出力
Array -- BBB

となってしまいます。わたしだけでしょうか?
他の方はなりませんか?
0525matsumoto04/11/11 02:55:24ID:IGJG68qY
追記:
524の場合で、こうなってほしい。
PHPプログラムは同じ。
■テンプレート
{$aaa}--{$bbb}
{if $aaa}{$bbb}{/if}

■出力
--{$bbb}

こうなってほしいのですけれど。
つまり、単独では空文字になって、ifで使用した場合にはFALSEの扱いになるような...
0526matsumoto04/11/11 02:56:49ID:IGJG68qY
すみません。出力間違いです。
■出力
--BBB

です。
0527nobodyさん04/11/11 11:07:43ID:???
$smarty->debugging=TRUE;
にしてみ。
絶対、他の値が入ってる。
0528nobodyさん04/11/12 18:43:42ID:???
間違いなく入ってるね。

>>524
PHPのなかみ 出し惜しみするなよ。
0529nobodyさん04/12/08 01:12:49ID:???
これって元になったテンプレートエンジンとかあるんでしょうか?
源流ってどのへんになるんだろ?
0530aya04/12/09 17:20:27ID:hK+hWFtH
windows2000(IIS)でのsmartyの設定でつまづいてしまっています。

まずダウンロードしたSmarty-2.6.6.tar.gzを解凍し、その中のlibsの中身
を、
c:\php\smarty というフォルダを作ってコピーし、
C:\WINNT\のphp.iniのinclude_pathを下記のように変更しました。

// 変更前(既に入れたpearのパス)
include_path=".;C:\php\pear;c:/php/includes;c:/php/pear"
// 変更後(smartyへのPATH)
include_path=".;C:\php\pear;c:/php/includes;c:/php/pear;c:/php/smarty
"

これで、smarty/demo/index.php(SMARTYのテストプログラム)にアクセスすると
、
---------------------------------------------------------------
Warning: main(Smarty.class.php): failed to open stream: No such file or directory in c:\inetpub\wwwroot\nyuukin\demo\index.php on line 4

Fatal error: main(): Failed opening required 'Smarty.class.php' (include_path='.;C:\php\pear;c:/php/includes;c:/php/pear;c:/php/smarty') in c:\inetpub\wwwroot\nyuukin\demo\index.php on line 4

---------------------------------------------------------------
のエラーが出てしまいます。 smartyへのpathを通すのにはどうすればいいんでしょう?
不躾ですみません。


0531nobodyさん04/12/10 04:49:38ID:gB4mZSIs
PathはSmarty.class.phpがある場所にしなさい
と出てますが・・・ちゃんとある?
0532nobodyさん04/12/10 10:44:56ID:???
Smarty.class.php は libs の中にある。
0533aya04/12/10 10:58:34ID:f65efB7J
>>524
そうなんですよね。ちゃんと設定したはずなんですが、pathが
通っていないんです。
既に稼動しているPEARのライブラリのパスは
include_path='.;C:\php\pear;c:/php/includes;c:/php/pear'で
pear配下のファイルがincludeできるのですが、
(include_path='.;C:\php\pear;c:/php/includes;c:/php/pear;c:/php/smarty'
として、
c:/php/smarty/Smarty.class.php
にアクセスするとエラーになってしまうんです。

include_pathは、ウィンドウズのシステム環境変数のPATH設定と
同じ感覚でセットアップしているのですが・・
どうしてなんだろう?





053453204/12/10 11:14:16ID:???
>>533
せっかく返事したんだから読めよ。

require_once('libs/Smarty.class.php');
でいけるんじゃねーか。
いけなかったら、libsにパス通せ。
0535aya04/12/10 12:22:05ID:f65efB7J
>>533
ごめんなさい。間違えました。533スレッドは、
>>533さんへのレスポンスでした。しっかり読みました。

要は、解凍したlibの中身を、smarty直下に移動したわけだから、
c:/php/smarty'
とinclude_pathを追加したんです。

053653204/12/10 20:07:24ID:???
\ と / が混在してるのが気になる。

ひとまず\で統一してみれば?
0537aya04/12/11 13:42:57ID:Jq/LlFpl
>>536
そうなんです。
ディレクトリセパレータを(/),もしくは(\)に統一して実行してみたの
ですが、PEARは正常に稼動し、SMARTYは相変わらずPATHが通っていない
状況が続いています。
0538nobodyさん04/12/11 21:58:48ID:???
Pathは通ってるけどSmartyが未設定なんじゃないの。
だいたいPath通す必要性ないよ。
0539nobodyさん04/12/12 17:33:42ID:???
>>537
Smarty-2.6.6\demo\index.php
> require '../libs/Smarty.class.php';
なわけだが。
0540nobodyさん04/12/13 17:56:41ID:???
>>539
どうやら>>537はlibsの中身だけを
c:\php\smarty\ に置いてるらしいぞ。
今まで読んだ感じだと。
0541nobodyさん04/12/13 22:35:43ID:???
ayaって釣り馬鹿の共有コテじゃないか
0542nobodyさん04/12/16 17:12:21ID:RdrCSV2b
連想配列の添え字の指定を変数で行いたい時ってどんな書き方すれば良いんですかね?
{$DATA.$key}
こんな指定の仕方がしたいんですが…
0543nobodyさん04/12/16 22:21:21ID:???
>>542
mk:@MSITStore:c:\php\HtmlHelp\php_manual_ja.chm::/ja/language.types.array.html
0544nobodyさん04/12/16 23:45:45ID:???
>>543 ???
Smartyでの指定の仕方なのですが
0545nobodyさん04/12/17 01:16:41ID:???
>>544
demo\index.php、demo\templates\index.tpl嫁よ。
0546nobodyさん04/12/17 01:52:06ID:???
>>545 ???
どこにも連想配列のKeyを変数で指定している記述は見当たらないんですが
0547nobodyさん04/12/17 11:34:54ID:???
てか、
{$DATA.$key}
これでできるでしょ…。試してないの?
{$DATA[$key]}
でもできるみたいだけど。
0548nobodyさん04/12/19 11:34:13ID:???
Smartyって配列の扱いが面倒な気がするのですが
こんなもんなんでしょうか?
そのうちなれるのかな。
ほかのテンプレートはどうなんすか?
0549nobodyさん04/12/19 11:37:18ID:???
>>548
最近気づいたんだけど
section
でなく
foreach
を使うと配列ラクだよ
0550nobodyさん04/12/19 15:48:21ID:???
テンプレートの記述とは書いてないけどね
0551nobodyさん04/12/19 15:58:49ID:???
>>550
言うたら何が面倒なのかも書いてないやろ。
0552nobodyさん04/12/19 16:36:21ID:???
>>550
なにが面倒なの?
0553nobodyさん04/12/19 21:03:08ID:???
誰がホセなの?
0554nobodyさん04/12/19 21:12:51ID:???
だれがつまらんこと言ってるの?
0555nobodyさん04/12/19 21:40:23ID:???
>>554
まずお前が鼻に付く
0556nobodyさん04/12/19 23:38:58ID:???
そしてお前があごに付く
0557nobodyさん04/12/20 20:15:55ID:???
>>556
何?同じようなこと繰り返せば面白いとでも思ってんのかバーカ
0558nobodyさん04/12/21 04:09:14ID:???
>>557
なんか嫌なことあったの?
0559nobodyさん04/12/21 12:33:51ID:???
SmartyとPear::Auth と HTML_QuickFormを併用してMVC設計してる人いないかな?
0560nobodyさん04/12/21 13:46:25ID:t6MkBwt3
寒稽古してる人いる?
056155904/12/21 13:49:27ID:???
HTML_QuickFormを使うとMとVの分離が怪しくなる。
しかもSmartyとの連携も怪しくなってきたりして。
0562nobodyさん04/12/21 17:58:00ID:???
>>561
同感。
0563nobodyさん04/12/23 06:26:50ID:???
HTML_QuickFormじゃなくてSmartyValidatorのほうはどうですか?誰か使ってる人います?
0564nobodyさん04/12/27 15:43:31ID:???
SmartyValidatorってはじめて聞いたので、ググってみた。
・・・情報が少なすぎる。
0565nobodyさん05/01/03 00:08:40ID:???
最近PHP始めたのですが、ソースが肥大化してしまいSmarty化しているのですが、
while($row = mysql_fetch_array($left)) {
print("[".$row["month"]."/".$row["day"].]");
}
こんな感じのをSmarty化できずに困っています。
{foreach}{/foreach}などを使ってやるようなことは解ったのですが、
key とか name などの使い方が解りません。どなたか教えてください。
0566nobodyさん05/01/03 00:32:46ID:wnsIsqHm
>>565
そんな単純なコードをいじったところで変わりぁせん
0567nobodyさん05/01/03 20:57:14ID:???
>>565

こんな感じか。

PHPのコード
$rows = array();
while ($row = mysql_fetch_array($left)) {
$rows[] = $row;
}
$smarty->assign('rows', $rows);

テンプレート
{foreach from=$rows item=row}
[{$row.month}/{$row.day}]
{/foreach}

Smartyマニュアルの「第4章 変数」の「phpから割り当てられた変数」のあたりを
読むといいよ。
0568nobody& ◆vGPd8m6uvw 05/01/03 21:01:00ID:???
>>567さん
感謝です。
>Smartyマニュアルの「第4章 変数」の「phpから割り当てられた変数」のあたりを
>読むといいよ。

是非読ましていただきます。
0569nobodyさん05/01/04 23:38:34ID:???
Smarty側でforloopを
使うことは罪に当たります。
057056905/01/04 23:39:24ID:???
2005年における初めてのネット上での書き込みが
こんなくだらないものだった。
もう少し考えてから書けば良かったのに俺。
0571nobodyさん05/01/06 13:52:57ID:???
ところで、{foreach}間でeregを使って正規表現を使うには、どうすればいいですか?
0572nobodyさん05/01/06 18:12:11ID:DWsuB/B6
html_optionsではき出してる各要素に、
onclickをつけてjavascriptを呼び出したいんですが、
何か良い方法ないですかね
0573nobodyさん05/01/06 18:23:57ID:???
smartyってHTMLには便利なんだけど
メールのテンプレートに使おうとするとたいへん。
IF文をうまく書かないと
改行がへんなとこで入ったり、改行しなかったりして
結果、テンプレートが見にくくなる。
うまい方法ないかなー?

>>572
適当に html_options2 とか作って
パラメータを増やす
0574nobody& ◆k0eA9hHNm2 05/01/07 00:04:35ID:???
mysqlから取り出したデータを表示させるチャットスクリプトなんですが、
自動リンクさせるためにregex_replaceを追加したのですが、エラーが起きてしまいます。
ソース:{$row.comment|regex_replace:"(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)":" <a href=\"\\1\\2\" target=\"_blank\">\\1\\2</a>"}
どうすればいいですか?
0575nobodyさん05/01/07 00:09:56ID:???
>>574
エラーメッセージを読め
0576nobody& ◆QWv3R1XL8M 05/01/07 00:17:18ID:???
>>574 追記
Warning: Unknown modifier '(' in ちょめちょめ on line 24
と出てします
0577nobodyさん05/01/07 00:38:20ID:???
>>576
あんた誰?
0578nobodyさん05/01/07 01:34:57ID:???
>>577
初心者です。
0579nobodyさん05/01/07 01:36:36ID:???
もしかして>>574=>>576か?
だったら書き込み毎に変えるようなトリップ使わずに
元質問のレス番を名乗れ
058057405/01/07 01:41:48ID:???
>>579さんの指摘はごもっともです。以下気をつけます。
0581nobodyさん05/01/07 01:49:23ID:???
Warning: Unknown modifier '(' in と出てもおそらく '(' が原因ではない。
'/' 3つをエスケープしてないじゃないか。
■ このスレッドは過去ログ倉庫に格納されています