トップページphp
981コメント365KB

【PHP】 Smarty 【テンプレートエンジン】 第2章

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2010/03/29(月) 14:41:04ID:???
Smarty は PHP のためのテンプレートエンジンです。
具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、
これらの役割を違う人間が受け持っている場合に最適だと言えます。
0488nobodyさん2010/07/02(金) 01:50:44ID:???
>>487
ぐぐって見たけど、複数のエクステンションがあるっぽいね。
どの方法でやってるか書かないと誰も答えられないと思うよ。
0489nobodyさん2010/07/02(金) 12:28:04ID:???
>>488
そんなに複数のエクステンションはないと思いますよ。
自分が試したのは「Dreamweaver Smarty」でググって一番上の方法と、
そのエクステンションの/transrator/SmartyInclude.htm(タグ置換ファイル)
の編集ですね。デリミタタグを{ }から{{ }}に変えるという。
0490nobodyさん2010/07/03(土) 12:42:11ID:???
なんでそんなぼかした言い方するんだ
0491nobodyさん2010/07/03(土) 16:26:42ID:???
どの方法で、どこで躓いているのかが解らないので答えようが無い
0492nobodyさん2010/07/03(土) 16:47:53ID:???
自作のMVCフレームワーク作ってるんだけど、
VをSmarty使うかどうか悩む。

Smartyにはエスケープとか日付フォーマットの変更とか使えるから、
Viewで表示を変える事は出来る。
でも、アクセス毎にコンパイルファイルが生成されるのが気になる。
サイト構造のディレクトリ分けの時とかさ。

意外とPHPフレームワークでSmarty使ってるって少ないんだよね。
Ethnaぐらいか?
0493nobodyさん2010/07/03(土) 19:52:53ID:???
>>492
コンパイルは最初の1回だけでは?毎回ソースをparseするよりは早くなるんだししょうがないっしょ。
あとはキャッシュ使うなりの運用じゃね?
0494nobodyさん2010/07/04(日) 00:41:54ID:???
Smartyって大抵のレンタルサーバーだと元から入ってるもんなの?
0495nobodyさん2010/07/04(日) 01:17:12ID:???
>>493
そうじゃなくて、templates_cとかcacheとかの置き場所に困るんだよ。
サイト構造的に、場面展開する時とかね。

あと、単純にコントローラーにSmarty変数を書いていくと
コントローラーが肥大化してしまうと言う悩みもある。
テンプレートファイルにPHP直書きだとそうでもないからね。
0496nobodyさん2010/07/04(日) 02:26:33ID:???
>>495
置き場所に困る意味がわからないのだが・・・適当な場所にディレクトリ作るだけじゃないの?

あとControllerにSmarty変数を書いてしまって肥大化ってのは、assignが面倒って事?
0497nobodyさん2010/07/04(日) 12:47:58ID:???
適当な場所に作るんだけど、
サイトが大きくなるとその管理・分け方が難しく感じる時があるんだよ。

あと、assignが面倒ってのは大きいね。
モデルからコントローラーに何らかの処理が渡って、
その結果をビュー(テンプレート)に渡すのが流れだけど、
ビュー内のSmarty変数に対してすべてassingするのが面倒。

もちろん、配列でassignして、テンプレでは
{$data.name}みたいな書き方も出来るけど。
0498nobodyさん2010/07/04(日) 18:13:08ID:???
>適当な場所に作るんだけど、
>サイトが大きくなるとその管理・分け方が難しく感じる時があるんだよ。

参考までに現在のプロジェクトディレクトリの構成教えてくれない?
俺はプロジェクリディレクトリ以下に templates/  templates_c/ chache/ を作ってる。

>あと、assignが面倒ってのは大きいね。
>モデルからコントローラーに何らかの処理が渡って、
>その結果をビュー(テンプレート)に渡すのが流れだけど、
>ビュー内のSmarty変数に対してすべてassingするのが面倒。

コントローラからビューに結果を渡す必要があるのだから、Smartyに限らずassignは発生すると思うよ
もし面倒ならコントローラに定義された変数を、自動で全てassignする機能を持たせればよいかと
その場合、コントローラ側で変数名変えたり、増やしたり、振る舞いを変えたりするとテンプレートにまで影響が出る可能性があるので注意だけど

自分用フレームワークなら、自分が使いやすい方で作るのが良いかと思う。
0499nobodyさん2010/07/04(日) 20:22:11ID:???
>>498
単純に「公開用」「会員用」「管理者用」の画面があった場合、
/templates_c
/html、/member、/admin(長くなるから横書きにした)

みたいな感じにするか
/admin
/templates
/templates_c
/cache

とするかそれぞれの好みに寄るだろうけど、
サーバにアップする時、ディレクトリ作ってパーミッションを777にして
とかいう作業が少し面倒に感じてね。

>自分用フレームワークなら、自分が使いやすい方で作るのが良いかと思う。
自分用フレームワークを他人が見ても分かる形にしたいからさ。

その時に、テンプレファイルで{$name}とするのと、<?php echo $name;?>
とするのと、一緒だと思って。
どこかで「ビューで表示を変える」というのを見たから
Smartyを使おうと思ったんだけどね。いまいち、使い方で悩むわけよ。
0500nobodyさん2010/07/04(日) 22:39:56ID:???
>>499
自分だったら
/templates/public/
/templates/member/
/templates/admin/
/templates_c/
/cache/
かな・・・ここらへんはプロジェクトディレクトリの構成によるから、
他のフレームワークを参考に決めればいいと思う。

>>自分用フレームワークを他人が見ても分かる形にしたいからさ。
で、あればView用Interfaceを作っておいて、
好きなテンプレートエンジンを組み込めるようにしておけばいいと思うよ。


実際に他のフレームワークとかビュークラスを触ってみれば良いよ
0501nobodyさん2010/07/05(月) 01:41:29ID:???
View用Interfaceを作ると結局、Smartyを使った方が良いよね
ってなるからな。

Viewとなるテンプレファイルはコントローラーで指定したいから
Interface作ると柔軟性に欠けるんだよな。俺の経験では。

フレームワークはEthnaとZendとCakeを少しかじっただけだから
まだ利点が理解できてないかも知れないけど。
ま、Smartyスレで「フレームワークのビューにSmarty使うってどうよ?」
って問いかける事自体おかしいのかもしれないがw
0502nobodyさん2010/07/05(月) 02:57:05ID:???
>>501
普通はフレームワークに柔軟性と自由度を与える為にInterface化するんだけど・・・Interface自体を思い違いしてない?
もしくはViewじゃなくてSmartyに依存しすぎたInterface設計をしてないかい?
0503nobodyさん2010/07/05(月) 04:43:21ID:???
横だけど、それぞれのモジュールの関連の深さによって、templates/templates_c分けた方が良いと思うな。
ディレクトリごと別のプロジェクトに移しても動くように。
ある意味、オブジェクト思考的なカプセル化というか、粗結合というか。
0504nobodyさん2010/07/05(月) 10:22:53ID:???
>>502
Interfaceを小一時間ほど勉強したけど、完全に勘違いしてた・・・
ただ、あまり利点(使い方)が思い浮かばない。

>で、あればView用Interfaceを作っておいて、
>好きなテンプレートエンジンを組み込めるようにしておけばいいと思うよ。

と言うのが想像出来ん。もう少し勉強してみるよ。
0505nobodyさん2010/07/07(水) 01:22:28ID:???
PHP5時代の今、まだSmartyなんか使ってるのがいたとはな
驚愕の事実だぜ。
0506nobodyさん2010/07/07(水) 02:25:23ID:???
そもそもテンプレートにPHPのコード書けば終いだもんな
キャッシュもob_get_contents使って自作すればいいし。
0507nobodyさん2010/07/07(水) 04:28:11ID:???
>キャッシュもob_get_contents使って自作すればいいし。
この一行で頭の悪さが露呈しているなw
0508nobodyさん2010/07/07(水) 10:20:55ID:???
いまだにPHP4.4.0なんだが
0509nobodyさん2010/07/07(水) 13:11:32ID:???
smartyのページキャッシュを使いたがらない人がいるんだけど、なんで?
PEARのキャッシュを使いたがるんだ。
0510nobodyさん2010/07/07(水) 13:13:49ID:???
いや、オレはSmartyのキャッシュ使ってるよ、超便利じゃん
PEARのキャッシュ使う人はSmarty使うページと使わないページがあって、それを統一したいとかじゃね?
0511nobodyさん2010/07/07(水) 13:43:12ID:???
>>507
Smarty自体がob_get_contents使ってるんだが。
0512nobodyさん2010/07/07(水) 15:47:30ID:???
キャッシュのグループ機能とか便利だよね
0513nobodyさん2010/07/07(水) 20:07:17ID:???
Smarty使うってことは
フレームワークの大部分はPHP5で記述して
ViewだけPHP4で書くのか?
ダサすぎなんだがw
0514nobodyさん2010/07/07(水) 20:10:42ID:???
フレームワークの大部分www全部じゃないの?PHP4混ざってんの?w
0515nobodyさん2010/07/07(水) 20:14:39ID:???
Smarty3はPHP5なわけだが・・・
0516nobodyさん2010/07/07(水) 21:27:58ID:???
>>514
アホは黙ってろ。

>>515
Smarty3はまだ正式リリースされてねーだろ。
0517nobodyさん2010/07/07(水) 23:07:02ID:???
>>516
日本語は正しく使おうね。
曖昧なままに書くから誤解されるんだ。

それから、冷やかし、煽り、中傷、その他他人が不快に思う言動は他でやってくれたまえ。
0518nobodyさん2010/07/07(水) 23:47:02ID:???
そんなことよりSmartyはアダプタですよ?
0519nobodyさん2010/07/07(水) 23:47:40ID:???
おい、cakePHPさんの悪口はそこまでにしとけよ!!
0520nobodyさん2010/07/08(木) 23:50:36ID:???
Smartyはそれ自体がアダプタです(キリッ
0521nobodyさん2010/07/09(金) 01:41:14ID:???
テンプレートはデザイナーにも自由に触らせます(キリッ
0522nobodyさん2010/07/09(金) 06:35:49ID:???
ほらcakeさんを馬鹿にしたから、厨が沸いちゃったでしょ!
誤って!cakeさんに誤って!PHP4でも凄いですね!って言って!!ほら!!
0523nobodyさん2010/07/09(金) 16:35:32ID:???
Smartyのprefilterで質問です。
prefilterには$tpl_sourceでテンプレートの中身(文字列)と、&$smartyが渡されるのですが
テンプレートのファイルパスを取得する方法はないでしょうか?

通常ならばセットしたテンプレートのパスがそのままなので問題ないのですが
{include}を使った場合に、インクルード「された」テンプレートのパスが分からないので困っています。

テンプレートのパスによってフィルタの挙動を変えたいと思っているもので…
0524nobodyさん2010/07/14(水) 18:02:47ID:???
スレチ失礼。ATNDより、PHP関連の勉強会を紹介します。


■Ktai Library for cakephp 勉強会@関東
URL: http://atnd.org/events/6209
日時: 2010/07/17 11:00 to 15:00
場所: マイ・スペース&ビジネスブース池袋西武横店
参加条件: Masa-Pさんの本「PHPで作る携帯サイト デベロッパーズガイド」を持参、かつ4章までを自力である程度実装できている、もしくは出来る方


■OpenPNE3で学ぶsymfony勉強会
URL: http://atnd.org/events/6255
日時: 2010/07/24 15:00 to 17:00
場所: 手嶋屋新宿御苑オフィス
内容: この勉強会は毎回OpenPNE3の各機能、仕様にフォーカスを当て、ベースフレームワークであるsymfonyを理解していく勉強会です。
参加者はみんなsymfonyに興味のあるプログラマです。Webエンジニアとのネットワークづくりにもお役立てください。


■Python4PHPer 第7回講習会
URL: http://atnd.org/events/6344
日時: 2010/08/12 10:00 to 22:00
場所: 国立オリンピック記念青少年総合センター
内容: Python未経験者向けの、PythonとGoogle App Engine (GAE) の入門講座です。


■第11回 LOCAL PHP部勉強会
URL: http://atnd.org/events/6443
日時: 2010/08/28 14:00 to 16:30
場所: 札幌市産業振興センター セミナールーム9
0525nobodyさん2010/07/14(水) 19:57:00ID:???
まともな質問にレスすらつかないスレに宣伝されてもな
0526nobodyさん2010/07/15(木) 11:02:53ID:???
Smartyと何の関係もない宣伝ってどうなのよ
0527nobodyさん2010/07/15(木) 12:52:10ID:???
RC3来たよ。
0528nobodyさん2010/07/15(木) 14:40:56ID:???
RCいつ取れんだよ
0529nobodyさん2010/07/16(金) 06:21:58ID:???
そのうちとれんだろ
0530nobodyさん2010/07/17(土) 21:47:29ID:???
Smartyってそれ自体がアダプタなんだろ?
すげーw
0531nobodyさん2010/07/17(土) 21:53:00ID:???
Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
0532nobodyさん2010/07/18(日) 23:57:58ID:???
>>530
すごいよねw
何ていってもアダプタだしw
0533nobodyさん2010/07/19(月) 17:40:42ID:???
キーワード:Smarty アダプタ
0534nobodyさん2010/07/19(月) 17:43:59ID:???
compileとcacheの違いが分かりません!
0535nobodyさん2010/07/19(月) 18:47:15ID:???
実際のファイル見ればいいじゃない
0536nobodyさん2010/07/19(月) 19:52:37ID:???
compile ・・・ テンプレートをPHPコードにコンパイルしたファイル
cache ・・・ PHPコードを実行した出力結果のキャッシュ
0537nobodyさん2010/07/20(火) 01:42:52ID:???
>>536
>cache ・・・ PHPコードを実行した出力結果のキャッシュ
htmlということで宜しいか?
0538nobodyさん2010/07/20(火) 03:39:17ID:???
>>537
そう考えていいけど、キャッシュしない部分はそのままphpコードが残るはず。
0539nobodyさん2010/07/20(火) 18:17:46ID:???
教えてください。

$smarty->assign('arr',array(
'2010-07' => '7月のデータ',
'2010-08' => '8月のデータ',
));
の様にキーに-記号が含まれてる場合に
{$arr.2010-07}とすると
$arr[2010]-7みたいなパースになってしまうのですが
どのように書けばいいのでしょうか?
0540nobodyさん2010/07/20(火) 20:17:27ID:???
バッククォートでくくる
0541nobodyさん2010/07/21(水) 04:35:28ID:giVfeoMU
smarty2をphp5.2.9でつかっていて、ブラウザで出力結果を見たところ、「>」が表示されています。
が、テンプレートファイルにそんなものはなく、それどころか以下のような状況です


Safari5
-------------------------
・ソースを見ても該当箇所に > はない
<div><table class="tableH">〜〜


Firefox3.6.6
-------------------------
・ソースを見ても > はない
<div><table class="tableH">〜〜
・「>」を選択して、選択した部分のソースを表示だと
<div>
>
<table class="tableH">〜〜


Chrome5
-------------------------
・ソースを見ても > はない
<div><table class="tableH">〜〜

・「>」を選択して、要素の検証をすると
<div>
">"
<table class="tableH">〜〜


何が原因なんでしょうか? ご意見よろしくお願いします。(ブラウザは全てmacです)
05425412010/07/21(水) 04:38:29ID:giVfeoMU
Firefoxでの検証は「選択部分のソース表示」で

<div>
&gt;
<table class="tableH">〜〜

です。 すみません、半角で書いたら>に変換されたので全角に書き直しました
0543nobodyさん2010/07/21(水) 05:30:29ID:???
Smarty関係なさそうだけど。
テンプレートじゃないなら、変数確認したら。
0544nobodyさん2010/07/24(土) 20:12:03ID:???
Smarty アダプタパターン
Smarty アダプタパターン
Smarty アダプタパターン
Smarty アダプタパターン
Smarty アダプタパターン
0545nobodyさん2010/07/24(土) 23:04:53ID:???
それにしてもアダプタパターンは無いわw
0546nobodyさん2010/07/25(日) 09:06:29ID:???
蒸し返すなよ
0547nobodyさん2010/07/25(日) 19:40:03ID:???
土曜の夜に相手してくれる人がいなくて、よほど暇なんだろうよ。
0548nobodyさん2010/07/26(月) 01:04:19ID:???
「Smarty アダプタパターン」でググると・・・w
0549nobodyさん2010/07/26(月) 13:24:20ID:???
池沼の笑いのツボは理解できないぜ・・・w
0550nobodyさん2010/08/07(土) 17:46:45ID:???
>>548
お前のレスがヒットするな
0551nobodyさん2010/08/17(火) 14:35:20ID:???
眠い
0552nobodyさん2010/09/01(水) 11:43:21ID:13m9QA4U
/home/test/public_html/page/index.php
にSmartyコードが書いてあり、
/home/test/public_html/page/templates/
のテンプレートを参照しているとします。

相対パスで
/home/test/public_html/include/header.tpl
のファイルをSmartyテンプレート内で読み込みたいと思い、
{include file='../include/header.tpl'}

としたのですが、読み込めません。
上記を絶対パスで
{include file='/home/test/public_html/include/header.tpl'}
とすれば読み込めます。

相対パスで指定したいのですが、テンプレート内を修正するだけで
includeする方法はないでしょうか?
0553nobodyさん2010/09/01(水) 12:11:46ID:???
{include file='../../include/header.tpl'}
だとダメなの?
それか、templates/に入れてしまうとか
05545522010/09/01(水) 13:26:42ID:13m9QA4U
>>553
はい。それだと「 Smarty error: unable to read resource」というエラーになります。

templatesに入れないのは、Smartyを使わない箇所でも読み込ませたいからです。
なので、相対パスで指定できるのがベストだと思い、質問しました。
0555nobodyさん2010/09/01(水) 14:14:05ID:???
パーミッション?
05565522010/09/01(水) 15:57:34ID:13m9QA4U
開発しているのはWindowsXP上ですので、パーミッションではないと思います。
0557nobodyさん2010/09/02(木) 01:43:43ID:???
>>554
http://www.smarty.net/manual/ja/template.resources.php
$template_dir の外に置かれたテンプレートを使うには、リソースの種類 file: を指定しなければなりません。 その後にテンプレートへの絶対パスを続けます。
とあるのでセキュリティ的な仕様かと。


絶対パスが嫌ならpublic_htmlをテンプレートディレクトリに含めるか、
テンプレートリソースを作るなりすればいいと思うよ。

$template_dir = array(
"/home/test/public_html/page/templates/",
"/home/test/public_html/"
);

{include file='include/header.tpl'}
05585522010/09/02(木) 10:21:12ID:???
>>557
こういう、2つの領域を指定する方法もあるんですね。勉強になります。

出来れば、実行ファイルを修正するのは嫌だったのですが、
この方法を試してみます。ありがとうございました。
0559nobodyさん2010/09/13(月) 05:38:22ID:???
PHPのincludeは絶対パスのほうが早いらしいから、絶対パスにする癖をつけるのも悪くないんじゃない?
自分は設定ファイルにテンプレートディレクトリ、includeディレクトリなんかのパスを書いといて呼び出す時にそれプラスファイルまでのパスを呼んでる。
0560nobodyさん2010/09/14(火) 14:06:28ID:???
smartyなんて時代遅れですよ
今はdwooの時代ですよ
0561nobodyさん2010/09/14(火) 14:41:32ID:???
ドゥヲォォォ
0562nobodyさん2010/09/16(木) 09:23:10ID:???
DWOOが素晴らしいのは同意だが、いかんせん知名度が・・・('A`
せめて日本語ドキュメントがあれば推し進められるんだがねぇ
0563nobodyさん2010/09/16(木) 09:56:08ID:???
smartyが使えればそのまま移行できるから問題ない
smartyのドキュメントがdwooのドキュメントでもあるからね
0564しますよ2010/09/16(木) 10:06:49ID:???
一応日本語訳も作りましたからスレ立つぐらいになれば翻訳データ公開
0565nobodyさん2010/09/16(木) 10:15:18ID:???
dwooってどれくらい素晴らしいの?
0566nobodyさん2010/09/16(木) 15:07:19ID:???
dwooはsmartyの後継という立場で互換性と高速が売り
0567nobodyさん2010/09/16(木) 19:56:26ID:???
そんなにスゴいんならSmartyと入れ替えるよ
0568nobodyさん2010/09/16(木) 20:00:37ID:???
dwooでわからない事があるんですけどどこで聞いたらいいですか?
0569nobodyさん2010/09/16(木) 20:09:41ID:???
>>568
筋でいえば作者でしょ。
プログラマで英語できないとけっこう致命的じゃない?
0570nobodyさん2010/09/16(木) 20:16:16ID:???
聞くのは2ちゃんでです
0571nobodyさん2010/09/16(木) 20:40:06ID:???
Smartyと互換性があるって、もしかしてSmartyAdapter使った場合ってこと?
0572nobodyさん2010/09/17(金) 01:29:26ID:???
>>568
スレ立ててもいいんじゃない?
このスレと対立しそうだけど。
0573nobodyさん2010/09/17(金) 12:22:32ID:???
過疎ると思うけどここはsmartyスレだし別スレ立ててください
0574nobodyさん2010/09/17(金) 14:12:42ID:???
そもそもSmartyもdwooも導入しちゃえばそこまでじゃないの?
前スレも大した情報交換もなかったしね
0575nobodyさん2010/09/17(金) 20:29:00ID:???
よーし、ドゥオー導入しちゃうぞ
0576nobodyさん2010/09/17(金) 22:21:37ID:???
Smarty作ったやつも使う奴もセンスがどうかしてる
0577nobodyさん2010/09/17(金) 22:34:12ID:???
Dwoo作ったヤツのセンスは?
0578nobodyさん2010/09/18(土) 00:19:23ID:???
たかだが道具に目くじら立ててる方がどうかしてるw

DWOOはAdapter機構が良い感じだね、
フレームワークのViewHelperを活かしつつSmarty風に構文書ける。

ただし、2月から更新停滞しているのが怖い。
0579nobodyさん2010/09/18(土) 09:46:34ID:???
ttp://devzone.zend.com/article/12322
ttp://devzone.zend.com/article/12366

>>578
ttp://github.com/Seldaek/Dwoo
0580nobodyさん2010/09/19(日) 03:40:35ID:???
>>579
新しいものを導入したい気持ちはわかるが、
せめてSmartyと比較するなり、詳しく紹介してくれないとスレ違いというか、
誰もまともに見てくれないかと・・・


個人的にはDWOOの構造は好みなんだが、
安定性、ベンチマーク、導入実績のレビューが無い時点で本格導入には躊躇している(Smarty3も同様だが)
0581nobodyさん2010/09/19(日) 09:41:02ID:???
ベンチマークなんて自分で取ればいいだろ
0582nobodyさん2010/09/20(月) 04:52:19ID:???
信用たるベンチマークはそう簡単に取れるものでは無いけどな
0583nobodyさん2010/09/20(月) 09:47:00ID:???
ちゃんとしたベンチマークを取る知識もないなら気にせず使いたいものを使え
0584nobodyさん2010/09/21(火) 01:44:32ID:???
今時PHPでテンプレートエンジンてw
どれだけ情弱だよw
0585nobodyさん2010/09/27(月) 04:06:51ID:???
じゃあ今どきの流行は何なんだ
0586nobodyさん2010/09/27(月) 11:19:29ID:???
今どきの流行
<html>
<head><title>ほげ</title></head>
<body>
<h1>ほげテーブル</h1>
<?php
$conn = mysql_connect('hostname', 'username', 'password');
mysql_select_db('dbname');
$res = mysql_query('SELECT * from table_hoge');
while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
echo $row[0] . "<br>\n";
}
?>
</body>
</html>
0587nobodyさん2010/09/27(月) 11:36:12ID:???
HTMLにコード入れ込むもキモ
■ このスレッドは過去ログ倉庫に格納されています