【PHP】 Smarty 【テンプレートエンジン】 第2章
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2010/03/29(月) 14:41:04ID:???具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、
これらの役割を違う人間が受け持っている場合に最適だと言えます。
0488nobodyさん
2010/07/02(金) 01:50:44ID:???ぐぐって見たけど、複数のエクステンションがあるっぽいね。
どの方法でやってるか書かないと誰も答えられないと思うよ。
0489nobodyさん
2010/07/02(金) 12:28:04ID:???そんなに複数のエクステンションはないと思いますよ。
自分が試したのは「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:???VをSmarty使うかどうか悩む。
Smartyにはエスケープとか日付フォーマットの変更とか使えるから、
Viewで表示を変える事は出来る。
でも、アクセス毎にコンパイルファイルが生成されるのが気になる。
サイト構造のディレクトリ分けの時とかさ。
意外とPHPフレームワークでSmarty使ってるって少ないんだよね。
Ethnaぐらいか?
0493nobodyさん
2010/07/03(土) 19:52:53ID:???コンパイルは最初の1回だけでは?毎回ソースをparseするよりは早くなるんだししょうがないっしょ。
あとはキャッシュ使うなりの運用じゃね?
0494nobodyさん
2010/07/04(日) 00:41:54ID:???0495nobodyさん
2010/07/04(日) 01:17:12ID:???そうじゃなくて、templates_cとかcacheとかの置き場所に困るんだよ。
サイト構造的に、場面展開する時とかね。
あと、単純にコントローラーにSmarty変数を書いていくと
コントローラーが肥大化してしまうと言う悩みもある。
テンプレートファイルにPHP直書きだとそうでもないからね。
0496nobodyさん
2010/07/04(日) 02:26:33ID:???置き場所に困る意味がわからないのだが・・・適当な場所にディレクトリ作るだけじゃないの?
あと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:???単純に「公開用」「会員用」「管理者用」の画面があった場合、
/templates_c
/html、/member、/admin(長くなるから横書きにした)
みたいな感じにするか
/admin
/templates
/templates_c
/cache
とするかそれぞれの好みに寄るだろうけど、
サーバにアップする時、ディレクトリ作ってパーミッションを777にして
とかいう作業が少し面倒に感じてね。
>自分用フレームワークなら、自分が使いやすい方で作るのが良いかと思う。
自分用フレームワークを他人が見ても分かる形にしたいからさ。
その時に、テンプレファイルで{$name}とするのと、<?php echo $name;?>
とするのと、一緒だと思って。
どこかで「ビューで表示を変える」というのを見たから
Smartyを使おうと思ったんだけどね。いまいち、使い方で悩むわけよ。
0500nobodyさん
2010/07/04(日) 22:39:56ID:???自分だったら
/templates/public/
/templates/member/
/templates/admin/
/templates_c/
/cache/
かな・・・ここらへんはプロジェクトディレクトリの構成によるから、
他のフレームワークを参考に決めればいいと思う。
>>自分用フレームワークを他人が見ても分かる形にしたいからさ。
で、あればView用Interfaceを作っておいて、
好きなテンプレートエンジンを組み込めるようにしておけばいいと思うよ。
実際に他のフレームワークとかビュークラスを触ってみれば良いよ
0501nobodyさん
2010/07/05(月) 01:41:29ID:???ってなるからな。
Viewとなるテンプレファイルはコントローラーで指定したいから
Interface作ると柔軟性に欠けるんだよな。俺の経験では。
フレームワークはEthnaとZendとCakeを少しかじっただけだから
まだ利点が理解できてないかも知れないけど。
ま、Smartyスレで「フレームワークのビューにSmarty使うってどうよ?」
って問いかける事自体おかしいのかもしれないがw
0502nobodyさん
2010/07/05(月) 02:57:05ID:???普通はフレームワークに柔軟性と自由度を与える為にInterface化するんだけど・・・Interface自体を思い違いしてない?
もしくはViewじゃなくてSmartyに依存しすぎたInterface設計をしてないかい?
0503nobodyさん
2010/07/05(月) 04:43:21ID:???ディレクトリごと別のプロジェクトに移しても動くように。
ある意味、オブジェクト思考的なカプセル化というか、粗結合というか。
0504nobodyさん
2010/07/05(月) 10:22:53ID:???Interfaceを小一時間ほど勉強したけど、完全に勘違いしてた・・・
ただ、あまり利点(使い方)が思い浮かばない。
>で、あればView用Interfaceを作っておいて、
>好きなテンプレートエンジンを組み込めるようにしておけばいいと思うよ。
と言うのが想像出来ん。もう少し勉強してみるよ。
0505nobodyさん
2010/07/07(水) 01:22:28ID:???驚愕の事実だぜ。
0506nobodyさん
2010/07/07(水) 02:25:23ID:???キャッシュもob_get_contents使って自作すればいいし。
0507nobodyさん
2010/07/07(水) 04:28:11ID:???この一行で頭の悪さが露呈しているなw
0508nobodyさん
2010/07/07(水) 10:20:55ID:???0509nobodyさん
2010/07/07(水) 13:11:32ID:???PEARのキャッシュを使いたがるんだ。
0510nobodyさん
2010/07/07(水) 13:13:49ID:???PEARのキャッシュ使う人はSmarty使うページと使わないページがあって、それを統一したいとかじゃね?
0512nobodyさん
2010/07/07(水) 15:47:30ID:???0513nobodyさん
2010/07/07(水) 20:07:17ID:???フレームワークの大部分はPHP5で記述して
ViewだけPHP4で書くのか?
ダサすぎなんだがw
0514nobodyさん
2010/07/07(水) 20:10:42ID:???0515nobodyさん
2010/07/07(水) 20:14:39ID:???0517nobodyさん
2010/07/07(水) 23:07:02ID:???日本語は正しく使おうね。
曖昧なままに書くから誤解されるんだ。
それから、冷やかし、煽り、中傷、その他他人が不快に思う言動は他でやってくれたまえ。
0518nobodyさん
2010/07/07(水) 23:47:02ID:???0519nobodyさん
2010/07/07(水) 23:47:40ID:???0520nobodyさん
2010/07/08(木) 23:50:36ID:???0521nobodyさん
2010/07/09(金) 01:41:14ID:???0522nobodyさん
2010/07/09(金) 06:35:49ID:???誤って!cakeさんに誤って!PHP4でも凄いですね!って言って!!ほら!!
0523nobodyさん
2010/07/09(金) 16:35:32ID:???prefilterには$tpl_sourceでテンプレートの中身(文字列)と、&$smartyが渡されるのですが
テンプレートのファイルパスを取得する方法はないでしょうか?
通常ならばセットしたテンプレートのパスがそのままなので問題ないのですが
{include}を使った場合に、インクルード「された」テンプレートのパスが分からないので困っています。
テンプレートのパスによってフィルタの挙動を変えたいと思っているもので…
0524nobodyさん
2010/07/14(水) 18:02:47ID:???■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:???0527nobodyさん
2010/07/15(木) 12:52:10ID:???0528nobodyさん
2010/07/15(木) 14:40:56ID:???0529nobodyさん
2010/07/16(金) 06:21:58ID:???0530nobodyさん
2010/07/17(土) 21:47:29ID:???すげーw
0531nobodyさん
2010/07/17(土) 21:53:00ID:???Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
Smarty それ自体 アダプタ
0533nobodyさん
2010/07/19(月) 17:40:42ID:???0534nobodyさん
2010/07/19(月) 17:43:59ID:???0535nobodyさん
2010/07/19(月) 18:47:15ID:???0536nobodyさん
2010/07/19(月) 19:52:37ID:???cache ・・・ 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が、テンプレートファイルにそんなものはなく、それどころか以下のような状況です
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です)
0542541
2010/07/21(水) 04:38:29ID:giVfeoMU<div>
&gt;
<table class="tableH">〜〜
です。 すみません、半角で書いたら>に変換されたので全角に書き直しました
0543nobodyさん
2010/07/21(水) 05:30:29ID:???テンプレートじゃないなら、変数確認したら。
0544nobodyさん
2010/07/24(土) 20:12:03ID:???Smarty アダプタパターン
Smarty アダプタパターン
Smarty アダプタパターン
Smarty アダプタパターン
0545nobodyさん
2010/07/24(土) 23:04:53ID:???0546nobodyさん
2010/07/25(日) 09:06:29ID:???0547nobodyさん
2010/07/25(日) 19:40:03ID:???0548nobodyさん
2010/07/26(月) 01:04:19ID:???0549nobodyさん
2010/07/26(月) 13:24:20ID:???0551nobodyさん
2010/08/17(火) 14:35:20ID:???0552nobodyさん
2010/09/01(水) 11:43:21ID:13m9QA4Uに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:???だとダメなの?
それか、templates/に入れてしまうとか
0554552
2010/09/01(水) 13:26:42ID:13m9QA4Uはい。それだと「 Smarty error: unable to read resource」というエラーになります。
templatesに入れないのは、Smartyを使わない箇所でも読み込ませたいからです。
なので、相対パスで指定できるのがベストだと思い、質問しました。
0555nobodyさん
2010/09/01(水) 14:14:05ID:???0556552
2010/09/01(水) 15:57:34ID:13m9QA4U0557nobodyさん
2010/09/02(木) 01:43:43ID:???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'}
0558552
2010/09/02(木) 10:21:12ID:???こういう、2つの領域を指定する方法もあるんですね。勉強になります。
出来れば、実行ファイルを修正するのは嫌だったのですが、
この方法を試してみます。ありがとうございました。
0559nobodyさん
2010/09/13(月) 05:38:22ID:???自分は設定ファイルにテンプレートディレクトリ、includeディレクトリなんかのパスを書いといて呼び出す時にそれプラスファイルまでのパスを呼んでる。
0560nobodyさん
2010/09/14(火) 14:06:28ID:???今はdwooの時代ですよ
0561nobodyさん
2010/09/14(火) 14:41:32ID:???0562nobodyさん
2010/09/16(木) 09:23:10ID:???せめて日本語ドキュメントがあれば推し進められるんだがねぇ
0563nobodyさん
2010/09/16(木) 09:56:08ID:???smartyのドキュメントがdwooのドキュメントでもあるからね
0564しますよ
2010/09/16(木) 10:06:49ID:???0565nobodyさん
2010/09/16(木) 10:15:18ID:???0566nobodyさん
2010/09/16(木) 15:07:19ID:???0567nobodyさん
2010/09/16(木) 19:56:26ID:???0568nobodyさん
2010/09/16(木) 20:00:37ID:???0570nobodyさん
2010/09/16(木) 20:16:16ID:???0571nobodyさん
2010/09/16(木) 20:40:06ID:???0573nobodyさん
2010/09/17(金) 12:22:32ID:???0574nobodyさん
2010/09/17(金) 14:12:42ID:???前スレも大した情報交換もなかったしね
0575nobodyさん
2010/09/17(金) 20:29:00ID:???0576nobodyさん
2010/09/17(金) 22:21:37ID:???0577nobodyさん
2010/09/17(金) 22:34:12ID:???0578nobodyさん
2010/09/18(土) 00:19:23ID:???DWOOはAdapter機構が良い感じだね、
フレームワークのViewHelperを活かしつつSmarty風に構文書ける。
ただし、2月から更新停滞しているのが怖い。
0579nobodyさん
2010/09/18(土) 09:46:34ID:???ttp://devzone.zend.com/article/12366
>>578
ttp://github.com/Seldaek/Dwoo
0580nobodyさん
2010/09/19(日) 03:40:35ID:???新しいものを導入したい気持ちはわかるが、
せめて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:???どれだけ情弱だよ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:???■ このスレッドは過去ログ倉庫に格納されています