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

【PHP】Smarty【Template】

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

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

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0002nobodyさん03/03/10 01:01ID:???
前に無かったっけ?
コンテンツとデザインの分離はしばらく物議かもしそうだし
解決策の1つとしてsmartyいいかもね。

ついでに2げっと。
0003 ◆AngelH/kMI 03/03/10 12:35ID:???
3げとずさー(AA略

最近使い始めたよ>Smarty
使いこなしていると言えるまでにどれだけかかるやら。

0004 ◆AngelH/kMI 03/03/10 12:47ID:???
メモ代わりに。
自分が引っかかったところ。

青マンモス本の時点ではループ指定(テンプレート側)するときに
{$loopname/variable}
だったのが
{$variable[loopname]}
になってる。
$varibableが連想配列なら
{$variable[loopname].arrayname}
こんな感じ。

0005nobodyさん03/03/11 00:06ID:???
Smartyって、コンパイル(?)してキャッシュを作るみたいですが、
キャッシュを作らずにHTMLを吐き出す方法はないでしょうか?
0006nobodyさん03/03/11 17:04ID:???
ついに作られたかsmartyスレ。歓迎。
0007nobodyさん03/03/11 17:06ID:???
>>5
よくわからんが、コンパイルされたファイルとキャッシュされたファイルは別物だが。

キャッシュを作らずHTMLを作るとはどういうこと?
毎回コンパイルするようにしたいなら、設定変えればできるぞ。
0008nobodyさん03/03/11 17:07ID:???
日本語のマニュアル
http://sunset.freespace.jp/smarty/

↑ここもマジで感謝!!
0009nobodyさん03/03/11 17:09ID:???
有名なところだと、XOOPS2にsmartyが使われています。

XOOPS 日本の公式サイト
http://jp.xoops.org/
0010nobodyさん03/03/11 17:25ID:???
誰かSmarty[スマテイ]の基本的な使い方を解説してくれ。簡単にな。
0011nobodyさん03/03/11 17:32ID:???
>>10
まず、スマテイをスマーティーと発音する。
0012nobodyさん03/03/11 17:38ID:???
日本語サイトにメリットとして

>より明確にphpのプレゼンテーションからアプリケーションの ロジックとコンテンツを分離して管理する事を容易にします。
>これはプログラマーとテンプレートデザイナーの役割が異なる 状況か、
>たいていの場合は同じ人間ではないのが最良だという事です。

こう書いてあったんだけど、つまり役割が同じ場合はこれ用なし?
0013nobodyさん03/03/11 17:52ID:???
>>11
スマーティー  発音わかった。 
誰かSmarty[スマーティー]の基本的な使い方を解説してくれ。簡単にな。
0014nobodyさん03/03/11 17:59ID:???
>>13
まず、スマーティーをスマーティと発音する。
0015nobodyさん03/03/11 18:23ID:???
>>14
スマーティ♪ マギーシローっぽい。
0016あぼーんNGNG
あぼーん
0017 ◆AngelH/kMI 03/03/11 19:17ID:???
メモ代わりにドキュメント書いてるんだけど
仕事忙しくてなかなか進まず。

すまんのぅ。
0018nobodyさん03/03/11 22:07ID:???
>>13
ダウンロードしてQUICKINSTALLを読むべし!
0019nobodyさん03/03/12 01:12ID:BE9nbHm+
これでフォームに自動的に値入力(Perl&RubyでいうFillInForm)
の機能があったらかなりイイのだが
も前らPHPではフォームに値付けるのどうされてますか?

PHP版HTML::Template
http://sourceforge.net/projects/phphtmltemplate/
0020あぼーんNGNG
あぼーん
0021nobodyさん03/03/12 05:18ID:???
おまえらなんでsmarty使ってる?
0022 ◆AngelH/kMI 03/03/12 08:47ID:???
>21
自分の場合はデザインとコードの分離のため。
HTMLを書く人間が別にいる場合、分離していないと
かなり面倒なことになる。

そのあたりの議論は
http://pc2.2ch.net/test/read.cgi/php/990953955/
こっちでかなりやっていた気がする。
0023nobodyさん03/03/12 11:09ID:???
かっこよさそうだから。
00242103/03/12 11:35ID:???
>>22
そうそう、前そこのスレでsmartyスレ立てようって言ってたんだけど
あんまりユーザがいないようだから。
でもXOOPS2でsmarty採用したから使う人が増えるかもね。
0025nobodyさん03/03/12 16:12ID:???
smartyは、テンプレートプログラミングみたいで、
デザイナーは、はたして使えるのか?と思うけど、
つか、HTMLテンプレートのほうが分かり易いのかな?と思ったり、
両方使った事ある人どう思う?
0026あぼーんNGNG
あぼーん
0027nobodyさん03/03/12 17:11ID:???
php自体がテンプレートみたいなもんじゃん。アホらしい。
0028nobodyさん03/03/12 17:31ID:???
暇つぶしにCでCGIを書いてみたんだが、
perl,phpは楽だよな。>>27のいうことも分かる。
問題はデザイナーが単独でphpスクリプトを修正できるかというと
そこまで簡単じゃないってことだな。
プログラマ・デザイナの両方の負担の釣り合いが取れるところがsmartyなんじゃないの?
0029nobodyさん03/03/12 18:11ID:???
>>28
MVCってのがある。

V(View)はMからデータを呼び出すだけで単独では通常計算を行わない。
と言うことになっている。

表示すべき項目を$dataと言うハッシュに詰め込んで、

「データは<? print($data["name"]);?>で表示させられるよ。」

とか言っちゃえば良いと。

デザイナがJavaScript位は出来るだろうと(Web制作の某スレではこれはデザイナの仕事ではないらしい。(藁)仮定すると
PHPの豊富な制御構造くらい使いこなせるだろう。

こうしてみるとその辺の下手なテンプレート機構より遙かに強力でしかも汎用的だ。


JSPと同じ思想でPHPを使っちゃおうというのが俺の言いたいこと。
0030nobodyさん03/03/12 21:31ID:???
Templateの存在意義とか話すのはスレ違いだろ。
折角Smartyのスレたったんだし、Smartyの話しようや。
0031nobodyさん03/03/12 23:50ID:???
Smartyだけは厳しいと。
0032nobodyさん03/03/13 00:42ID:???
HTML::Templateならそのまま>>29の言うMだけ
をPerlやRubyにできるな。
HTML::Templateのがよくないか?

PHPでテンプレート使うの馬鹿らしいんだけど、テンプレート
前提でコーディングしとくと、渡す直前で値をダンプしてみれば
エラーの原因とか何やってるのかがすぐわかるのよ。
0033nobodyさん03/03/13 00:50ID:???
たしかにPHPでテンプレートってどうなんだろう?
0034nobodyさん03/03/13 11:02ID:???
誰かsmartyで携帯対応なサイト作ってる香具師いる?
0035nobodyさん03/03/13 11:10ID:???
>>32
いや、だからVにテンプレートを採用するかPHPの特性を素直に使うかの違いよ。
両者ともデータチェックはMの最後なりCの最後なりでチェックできる。
0036 ◆AngelH/kMI 03/03/13 13:30ID:???
>34
微妙に。

>35
まあ、そうだねぇ。
結局は好みの問題。
既存のテンプレートエンジンが気に入らなければ
自分で作ってもいいし、
自分にあうのがあればそれを使えばいいだけ。

自分はループのネスト考えるのがだるくて
既存のものを使ってますが(苦笑
WYSIWYGなエディタでも表示崩れないやつが好き。


あとHTML_Template_ITバージョンアップしてるな。
0037nobodyさん03/03/13 13:31ID:???
>>36
>WYSIWYGなエディタでも表示崩れないやつが好き。

ある?php始めてからもっぱらテキストエディタ派になっちゃいましたが。
0038 ◆AngelH/kMI 03/03/13 13:44ID:???
>37
川里氏/佐藤氏のPHP4テンプレートクラスライブラリ(改)は
割とそのあたり気を使って作られていたよ。
http://www.daiwakantei.co.jp/pc/tmpl2sa.html
Dreamweaverでは平気だった。

Smartyもうまく使えば大丈夫だと思う。
(というか、テンプレートファイルと画像を置く位置かな)

個人的には
http://sunset.freespace.jp/smarty/
ここにスクリーンショットでてるDreamweaverMXの
extensionに期待。
0039山崎渉03/03/13 16:56ID:???
(^^)
0040nobodyさん03/03/15 10:11ID:???
smartyの良さって、デザインとコードの分離もあるけどさ、
コンパイルされたファイルとキャッシュによる表示速度の速度の向上じゃない?
0041nobodyさん03/03/15 12:33ID:???
>>40
>コンパイルされたファイル
結局は1行ごとにインタプリトされると思うよ。
0042nobodyさん03/03/15 23:39ID:X1LKF8i0
話題ないね
0043nobodyさん03/03/16 01:17ID:???
質問だがsmartyを使ってて中にperlのCGIを埋め込むことできる?

つまりブロックで言うとトップとレフトはsmartyのテンプレなんだけど、
真中のコンテンツの部分をperlのCGI(掲示板)を利用したいわけです。

cgiを呼び出せば、内容は表示できそうですが、POSTとかGETした時
内容を渡せるのか?とか難しそうです。

そんなことしてる香具師いる?
0044nobodyさん03/03/16 01:27ID:???
そもそもsmartyはPHP標準?既にインストールされてるの?
0045nobodyさん03/03/16 19:59ID:???
>>44
されてない。
もともとPHP自体がHTMLに埋め込んで使うものだから、
標準インストールする意味はあまり無さそうだと思う。
0046nobodyさん03/03/18 15:26ID:???
smartyで携帯サイト作ってる奴いる?
0047nobodyさん03/03/21 05:00ID:???
>>43
perlのCGI側でHTML::Templateとか使ったほうがラクじゃないの?
0048nobodyさん03/03/21 12:19ID:???
Smarty使えない鯖なんですが
ほかに標準のテンプレート機能ってあるのしょうか?
0049nobodyさん03/03/21 14:56ID:???
>>48
10スレ前の過去ログも読めないのか…
0050nobodyさん03/03/21 19:50ID:02OewLFo
>>48
Smarty使えない鯖ってどんな鯖?
0051nobodyさん03/03/21 19:52ID:???
>>48
>ほかに標準のテンプレート機能ってあるのしょうか?

PHP
0052nobodyさん03/03/21 20:08ID:???
この中に数人テンプレートの意味がわかってない人がいますね。(w
0053nobodyさん03/03/21 20:30ID:???
>>50
PHPが使えないサーバーか、quotaが1MBぐらいのサーバー。
0054nobodyさん03/03/21 20:51ID:???
テンプレートの本質を理解していない>>52

という印象を受けた。
0055nobodyさん03/03/21 21:07ID:???
>>54
本質を聞きたいといってみる。(w
0056nobodyさん03/03/21 21:46ID:???
>>50
WebARENAだがなにか?
0057 ◆AngelH/kMI 03/03/21 23:50ID:???
んー。
safemodeがonになっていても使えるけど>Smarty
後使えない可能性ってなんだろう。
0058 ◆AngelH/kMI 03/03/21 23:51ID:???
というか基本的なことだけど。
「使えない」という状態がいったいどういう状態なのかを
言ってくれないと、アドバイスのしようもない。
0059nobodyさん03/03/21 23:56ID:???
>>58
冷静に考えて、エラーメッセージやエラーの分析を怠る奴がモジュールの導入をミスなくこなしている
可能性は低いと思う。
0060nobodyさん03/03/23 16:35ID:GUMN7n0B
使えないのはSmartyじゃなくて、そいつの頭。
0061nobodyさん03/03/24 00:18ID:???
Smartyってつかったことないが、なんかテンプレートというより
別の構文の言語ってかんじに見える。
おれは patTemplateの方が純粋にテンプレートっぽくって好き。
http://www.php-j.com/tutorial/php/template.php
0062 ◆AngelH/kMI 03/03/24 08:18ID:???
>61
出来ることが多いから自分も最初は
「何となくめんどくせー」
と思って使ってなかったんだけど、
実際に使ってみるとそうでもないよ。
必要ない機能は使わなければいいし。

header、footer、ループ部分を別にするテンプレートは
WYSIWYGなエディタ使えないので個人的にはあまり…
という感じ。

・Smarty
・PHP4 テンプレートクラスライブラリ改(tmpl2.class.php)
・HTML::Template_IT (PEAR)
自分が使ってみて使いやすかったのはこのあたり。
Smartyで注意することはSJISのテンプレートを使うときに
プリフィルタ/ポストフィルタを使って文字エンコードを変えないと
テンプレート内に「宮」とか書かれてるとエラーになってしまうあたり。
ttp://ns1.php.gr.jp/pipermail/php-users/2003-February/013595.html
このあたり参考に。
0063nobodyさん03/03/24 16:20ID:???
Smarty使ってみた感想は多機能なので面倒です。
おまけに、smarty関連のディレクトリでいっぱいになって、
漏れのような小物野郎には大袈裟すぎと気付きました。
大規模システムには使い道があるんだと思うけど、

誰か、気軽に同封できるような、おすすめテンプレート情報もとむ。
0064nobodyさん03/03/24 16:21ID:F52n5d8W
アホで申し訳ないのだが
Smartyの利用条件とかってあるの?
0065nobodyさん03/03/24 16:37ID:???
売るの? 売っちゃダメだよ。
0066nobodyさん03/03/24 17:39ID:???
食べるのはOK?
0067nobodyさん03/03/24 17:52ID:bvsiZdot
Smartyを利用してるアプリで、売られてるものも多数ある。
ライセンスはGNU LGPLなんでそれさえ守っておけばいい。
0068あぼーんNGNG
あぼーん
0069nobodyさん03/03/24 17:59ID:???
Smartyを売っちゃダメだよ。
0070あぼーんNGNG
あぼーん
0071nobodyさん03/03/24 19:30ID:???
>>67,69
ありがとさんすー
0072nobodyさん03/03/25 12:43ID:FOZw8qka
>>69
そうなの?
0073nobodyさん03/03/25 14:04ID:CVcoKJbJ
smarty 使ってみたよ。
マニュアル翻訳された方、ありがとう&お疲れ様。

PHP自体がある程度テンプレート的な使い方が出来るので、
確かに小規模なプロジェクトでは導入コストに較べてメリットは少ないですね。
プラグインとか使って見たいけど、私も使う機会なさそうだな。

ところで、[php] ... [/php] タグの存在に戸惑っています。
テンプレートとロジックを一緒に管理する事ができますッテ…(汗
テンプレートをコンポーネント化するより、
そのテンプレートを呼び出すメソッドを実装して、
その中に初期化など共通する処理を書いた方がいいと思うのだけど…
どうなんでしょう? php とか php_include タグの評判は。
アイデアは確かにいいんですけど、これって別にSmarty使う必要ないですよね?PHPでは。
ロジックの分離という点に置いては、テンプレートには不要だと思う。

PHPにループ用のタグを導入してくれればいいのになぁ…。
0074nobodyさん03/03/25 14:30ID:???
PHPでテンプレートとか言われるとジェネリックプログラミングを想像してよろしくない。

まぁ、形無し言語でそんなもん語っても仕方ないがしかし・・・。
0075nobodyさん03/03/25 16:24ID:FOZw8qka
PHPという文脈でテンプレートと出てきたら、普通はジェネリックプログラミング
なんて浮かばないって。

PHP5の例外処理サポートが楽しみだ。
0076 ◆AngelH/kMI 03/03/25 23:51ID:???
強行日程な出張から帰還〜

>73
とりあえず、[php]タグは忘れてるよ(笑
デザイナーにも教えてない。
余計なことされて事故って後から自分が修正・・・とか嫌だし。

というか、自分はデザインとの分離さえ出来ればいいから
変数への代入とループさえ出来れば困らないんだけどね・・・。
0077nobodyさん03/03/26 00:11ID:???
>>76
余計なことができるような設計にしてる方が問題な訳だけれどね。
0078nobodyさん03/03/26 05:55ID:Zn78/v4/
>>77
一応、[php]タグは禁止する事もできるようになってる。
http://sunset.freespace.jp/smarty/SmartyManual_2-5-0RC1J_html/variable.security.html

うっかりセキュリティの脆弱を招かないためにも、
できれば$security = true、これ推奨。

Smartyはちょっと多機能になりすぎてる感があるね。
例えば最近、テンプレートからphpのオブジェクトのメソッドやらにアクセス出来る
機能が追加されたりしたけど、ロジックとデザインの分離が目的なのであれば、
本当は必要ないと思う。Smartyで何でもかんでもやろうとしすぎている。
せっかく他のテンプレートエンジンと比べて、キャッシュやカスタム関数による拡張性が
優れてるんだから、あんまり飛躍しすぎてヘンな事になってほしくないなぁ。
0079nobodyさん03/03/26 10:58ID:???
>>78
あんたの言うビューとロジックの分離はロジックにビューのいくつかの処理をやらせると言うことでは?
0080nobodyさん03/03/26 16:43ID:???
>>79
あんたデザインとロジック一人で全部やってるだろ?(w
0081nobodyさん03/03/26 17:17ID:???
>>80
はいはい、勝てないからって話をそらさない。
 
00827303/03/27 07:18ID:illH7cXT
[php] タグは見なかったことにしよぉ ... *sight*

> できれば$security = true、これ推奨。
THX これ探していました!!
これで安心してSmarty導入出来そうです(感謝)

>テンプレートからphpのオブジェクトのメソッドやらにアクセス出来る
>機能が追加されたりしたけど、
テンプレートに渡すオブジェクトにはgetメソッドしか実装しない/実行できない様にすれば少しは安全になるかも。
例えば、getDateメソッドに日付の表示フォーマットを引数に指定する等、
テンプレート側で指定できるとちょっと便利かな、と思ったりして。
でも、余計な事が出来てしまうリスクが痛いよなぁ。

ちなみに、テンプレートからオブジェクトのメソッドを呼ぶにはどう記述すればいいんでしょうか?
ドキュメントに、プロパティへのアクセス方法は見つけたのだけど…、
versionが古いのかな。見つけられませんでした<2.3.1です
昨日 2.5.0 RC2 リリースされたみたいなので updateしておこぅ〜っと。

>>79
それって、コンポーネント化と逆の発想?それとも、
例えば、「メールアドレスがある場合、名前にリンクを張る」という処理を
処理してからテンプレートに送るのか、テンプレート側で処理するか、って事ですか?

>>79-81
論点が解からない…。77, 78 は、自分には「Smarty本体には、デザインとロジックの分離の利点を損なう実装を許すような
余計な拡張機能は必要ない」という風に聞こえるのですが、何か勘違いしてる?フォローお願いします。
0083nobodyさん03/03/29 15:15ID:CQcFf7wk
73さん

Smartyで開発するときに注意したほうがいいこと(プログラマと
デザイナの取り決めなど)があったらお教え願えませんか?

(当方PHPは一週間の初心者ですが、今後社内のデザイナと
協力して社外向けWebプログラムを開発します)
00847303/03/29 23:32ID:5Ovapm1S
>>83
当方も、smartyは1週間の初心者です。
どちらかと言うと、教えてもらいたい側の人なのですが、
導入時に考えていた事を叩き台に書き出して見ます。
参考になればいいけど・・・。

まず、注意しないといけない事って、XSS問題とかですよね。
テンプレートに渡す値がエスケープされてるかどうか、
それとも、テンプレート側でエスケープするのか等。
セキュリティの問題の他にサイトのレイアウト崩壊とかも、
XSSで(重要度は違えど)起こり得るので、デザイナの方の理解を得て、
明確にしておいた方がいいとおもう。
セキュリティがデザイナさんの作るテンプレートに依存してしまう状況
というのは、ちょっと怖いので。

それと、情報の隠匿。社内のデザイナということなので、リスクは少ないと思いますが。
でも、不用意にオブジェクトをテンプレートに渡したりて、余計なところにアクセスされたりすると困るかも知れないので。
私も、>>76,>>78 に習って、
”デザイナーには教えない”,”設定で禁止する”と言う方針を見習おうかと思っています。

ところで、grep -E '{.+?}' *.tpl でテンプレート内の埋め込み文全部拾えるかな?
テンプレートの簡単なチェック・スクリプト作っておくと便利かも知れない。
実際の動作テストは、別に用意する必要あるだろうけど。
00857303/03/29 23:34ID:5Ovapm1S
以下、自己補足。

>>73 コンポーネントで管理すること自体は便利な場合もあるけど、
テンプレート内にコードを含めるのは、自分にとってはリスク。
どうしても必要な場合は、[php]タグより include_php を使お〜っと。
上級ユーザではないので、コードが混ざったテンプレートを保守出来る自信ない;;
それに、テンプレート導入の利点がなくなるし。

> テンプレートからオブジェクトのメソッドを呼ぶ
Document 15. Advanced Features -> Objects 内に見つけましたm(_ _
テンプレートから利用できるプロパティ/メソッドを制限できるみたいなので、
セキュリティ面での心配は杞憂だったみたいです。
0086あぼーんNGNG
あぼーん
0087nobodyさん03/03/30 06:50ID:7nc9kl8w
>>84, 85
ご意見ありがとう。

デザイナーにphpタグを教えると、
「私にプログラム組めっていうのかさぁ」
とか言われそう(^^;
コード保守上も、Simple is Best だと思いますから、
phpタグは使わないようにしたいと思います。
(というか、ふつう最初からphpタグ使おうなんて考えないでしょうね)

「XSS」という言葉が理解できません。教えてください。

それから、Smartyはコンパイル処理があるようですが、
漢字コードが含まれていても大丈夫なのでしょうか?
(SJIS、EUCともOK?)
0088nobodyさん03/03/30 10:11ID:ho1IX9Y5
XSS クロスサイトスクリプティング、かな。
0089nobodyさん03/03/30 10:30ID:???
横からスマソが、俺はCSS以外にXSSっていう書き方もあるって言う事は知らなかった。
クロス=Xなのね。
ひとつおりこうになれたYO
ありが�d

       /■\
   ∧_∧ (;´Д` )
    (・ω・)丿 ッパ
.  ノ/  /
  ノ ̄ゝ
いっしょにおにぎりたべませんか?
0090 ◆AngelH/kMI 03/03/30 10:33ID:???
>>87
>それから、Smartyはコンパイル処理があるようですが、
>漢字コードが含まれていても大丈夫なのでしょうか?
>(SJIS、EUCともOK?)

>>62を参考に
0091nobodyさん03/03/31 13:53ID:D0ex7lz/
>>89
CSSじゃCascading Style Sheetsと紛らわしいからね。
0092nobodyさん03/03/31 18:47ID:???
今度からXSSにしよう。
0093nobodyさん03/03/31 18:48ID:???
ごめんなさい。3つ上を見てなかった。
0094nobodyさん03/04/02 04:49ID:???
漢字コードについては、
SJISの2バイト目に { や } が含まれることがある問題ですよね?
デリミタを、文字コードに依存しない他の文字に変更する。
文字コードに依存する部分は全て別のリソースにする。
等も、別の解決策として選択肢にいれておいてもいいのでわ。
0095nobodyさん03/04/03 18:46ID:???
>>63 誰か、気軽に同封できるような、おすすめテンプレート情報もとむ。
http://hoover.ktplan.ne.jp/kaihatsu/php/index.php?type=top
これわかりやすくていいよ。
DW上でも埋め込めるし。
0096nobodyさん03/04/04 04:21ID:CWbmmlFZ
テンプレートの中で他のテンプレートをインクルード
しています(ヘッダとフッタを入れている)。

すべての画面でデザインを統一しようとすると、どんな
小さな画面でもテンプレートにしてやらないと、ヘッダと
フッタが表示されません。
これでは非常に面倒なのですが、何かよい方法はない
でしょうか?
0097nobodyさん03/04/04 11:37ID:???
>>96
テンプレートをメインスクリプトあたりから直接弄ろうとしているからいちいち面倒なんだよ。
viewクラスを作って、「ヘッダとフッタはいつもの奴、メインボディはこれで」って感じで渡して
やればいいんじゃない。

#説明ベタ&Smartyは使ってないので外しているかもしれんが
0098nobodyさん03/04/05 05:35ID:WWynoIxP
>>97
あそっか。
Smartyクラスをextendsしたクラスをつくって
やればいいわけですね。

たいへん参考になりました。ありがとう!
0099nobodyさん03/04/09 02:13ID:???
/www/index.tpl
/subdomain/index.tpl

とか別ディレクトリに同じ名前のテンプレートがある場合は、
どーすればよいの?

同じSmarty.class.php は使えないのかな?
■ このスレッドは過去ログ倉庫に格納されています