トップページphp
1001コメント342KB

【PHP】 Smarty 隔離スレ 【テンプレート】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/02/02(土) 00:21:09ID:6cKcKeTp
まぬあるhttp://www.smarty.net/manual/ja/
0442nobodyさん2009/05/10(日) 20:05:32ID:???
>>441
落ちてるね。こういうサイトはミラーが必要だとおもいまする。
0443nobodyさん2009/05/12(火) 01:20:58ID:???
一生落ちてればいいと思う。
0444nobodyさん2009/05/13(水) 11:19:30ID:Q3CLDrVp
{insert}
で指定する関数名に
クラスのメソッドを指定する方法はありませんか?
0445nobodyさん2009/05/13(水) 13:46:20ID:???
クラスのメソッドを指定できる関数をつくればいいんじゃあ
0446nobodyさん2009/05/13(水) 21:18:42ID:???
初心者で悪いんだが

--Hoge.php--------

class Hoge {
  var piyo;

  function Hoge() {
    $this->piyo = $_POST['some'];

    require_once 'view.tpl';
  }
}

--view.tpl---------

<p><?php echo $this->piyo; ?></p>


テンプレートとしての機能ってこれじゃ駄目なの?
0447nobodyさん2009/05/13(水) 21:46:03ID:???
>>446
こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要
0448nobodyさん2009/05/14(木) 00:07:02ID:???
>>447

イミフ
0449nobodyさん2009/05/14(木) 02:00:08ID:???
POSTで送られたデータを無加工で出力するなって事だ
そりゃそうと、普通にメソッドコール出来たと思ったけど
0450nobodyさん2009/05/14(木) 03:34:09ID:???
>>446
それでも問題無い場合もあるよ。
ケースバイケース。

複数人(特に外注)を使う場合は、記述方法の統一されたテンプレートエンジンをオススメだけどね・・・
PHPをテンプレートエンジンとして使う=テンプレートを扱う人にシステム全権限を与える。

善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。
0451nobodyさん2009/05/14(木) 03:40:17ID:???
>>450
>>447
04524462009/05/14(木) 14:32:58ID:???
>>447
ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?


>>450
とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。
0453nobodyさん2009/05/14(木) 14:45:29ID:???
Smartyならデフォルトで適用するフィルターを設置出来る
escapeを入れたら今回記述されたテンプレートでもちょっと安心

とりあえず、OpenPNEはやってた
興味があればソース眺めると良いかと
0454nobodyさん2009/05/14(木) 17:49:28ID:A4v4Hdy/
>>453
質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?

見れるんなら見たいんですけど。
0455nobodyさん2009/05/14(木) 18:51:12ID:???
HTMLソースじゃないぞ
0456nobodyさん2009/05/14(木) 20:10:22ID:???
>455
smartyでいうところのコンパイルされていないファイルって、見れるんですか?
だとしたら他人事ではないんですけど。
0457nobodyさん2009/05/14(木) 21:02:38ID:???
> それがsmarty経由でつくられてるもの

> それ
ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど
0458nobodyさん2009/05/14(木) 21:26:13ID:???
>457
あ、そういうことでしたか。
そして、ダウンロードもしてみました。
他の人がつくったsmartyのテンプレートファイル初めてみた。
勉強になるな〜
0459nobodyさん2009/05/14(木) 21:49:19ID:???
どんな風に勉強になった?
0460nobodyさん2009/05/14(木) 23:02:27ID:???
({ をデリミタタグとして使っているところとかです。
0461nobodyさん2009/05/16(土) 17:50:14ID:???
MTもSmarty使っているから、参考になると思うよ。

ただ、OpenPNEの方がわかりやすいね。
なんか日本人的な書き方のような気がする
0462nobodyさん2009/05/22(金) 09:35:19ID:???
Smartyの順序って
「PHPが苦手だからSmartyを使おう」
それとも
「PHPができるからSmartyでさらに上を目指そう」
のどっちなんですか?

わかる人からするとアホな質問かもしれませんが、
PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。
0463nobodyさん2009/05/22(金) 10:07:23ID:???
SmartyはPHPの単なるライブラリだよ・・・?
0464nobodyさん2009/05/22(金) 10:22:59ID:???
Smartyの用途はスレの上のほうで話題になってるじゃん
苦手だからとか上を目指そうとかそういう観点ではなく
04654622009/05/22(金) 11:11:41ID:???
>463,464
ご返答ありがとうございます。

スレも1から全部読みました。
そして、ここ数日ネットで調べまくったんですが、
どこも書いてあることは「デザインとプログラムを分離できるもの」ということで、
頭が悪すぎるのか、結局「smartyが何をしている」というのがわからずじまいでした。
そこで、書き込んでみたのです。

要は「工具セット」ってことですかね。
上の方で延々と行われた議論は
「使う工具(smartyの機能)なんか自分で作ればいい」派と
「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。
0466nobodyさん2009/05/22(金) 11:43:37ID:???
smarty使ってMVCのviewを強化したい派(利便性高・コスト高)と
php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな
04674622009/05/22(金) 17:49:33ID:???
>>466

!('A')あ〜
なんか少々モヤモヤが晴れてきました。
引き続き勉強します。
0468nobodyさん2009/05/23(土) 20:37:34ID:???
Smartyを勉強し始めたのですが、
phpコードに書いた和文が文字化けしてしまいます。
テンプレートの和文は文字化けしません。

phpで$smarty->assign('name', 'みなさん');として
tplに「こんにちは、{$name}!」とすると、
htmlで「こんにちは、文字化け!」とでてしまうのです。

全部UTF-8で書いています。
サーバーはsixcoreをかりており、mbstringの設定はこうしています。
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = UTF-8
mbstring.encoding_translation = Off
mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII
mbstring.substitute_character = none;

今日一日中ググりまくっているんですが、どうしてもわかりません。
どなたかお助けください。おねがいします。
04694682009/05/23(土) 20:42:52ID:???
phpファイルだけがSJISになってました!
ほんとサーセンでした!!!
0470nobodyさん2009/05/23(土) 21:22:40ID:???
「こんにちは、文字化け!」
はワラタ
0471nobodyさん2009/05/23(土) 21:30:08ID:???
smartyのテンプレートに$hogeという配列が空じゃない場合の条件分岐処理を書きたいんですけど、
この書き方はおかしいのでしょうか

{if $hoge!==""}text{/if}

たまにif文が動かないのでおかしいと思うのですが
0472nobodyさん2009/05/23(土) 22:28:46ID:???
smarty文法のばあい
===はあるけど!==はないんじゃないか?
マニュアルに記載されてないし

!($hoge==="")
に差し替えてみよう
0473nobodyさん2009/05/23(土) 23:15:34ID:???
is_array() とかつかえなかったっけ?
0474nobodyさん2009/05/25(月) 00:05:06ID:???
>>472
>>473

どちらも動作しました
ありがとうございます
0475nobodyさん2009/06/30(火) 18:33:31ID:Cv5BCTzF
既存のソースをフレームワークを使って書き直したいんだけど、smartyは他のフレームワークと比べて
何か利点はありますか?それとも他のフレームワークを使った方がよいですか?

フレームワークを使い比べたことがある方、教えてください。
0476nobodyさん2009/06/30(火) 21:29:17ID:???
フレームワークはMVC+αを担当するものとした場合、
SmartyはVのみを担当するテンプレートエンジンでしかない。

・既存のソース+Smarty
・他のフレームワーク+Smarty

という使い方が一般的です。
04774752009/07/01(水) 02:15:48ID:FWyhhBD1
>>476

簡単ながら簡潔な意見だと思います。ありがとうございます。
0478nobodyさん2009/07/01(水) 18:56:06ID:???
どういたまして。
0479nobodyさん2009/07/06(月) 17:48:50ID:???
Smartyも大きく言えば、関数ライブラリだからな。
HTML内にPHPコードを書いているのと変わらない。
(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

でも、プログラマー以外がテンプレートを操作する環境なら凄い便利
0480nobodyさん2009/07/06(月) 17:53:06ID:???
小さく言うと何?
0481nobodyさん2009/07/07(火) 00:33:01ID:???
smarty乙php乙時代はC++俺はHTMLホームページビルダー
0482nobodyさん2009/07/07(火) 03:43:16ID:???
<small>関数ライブラリ</small>

大事なことなので小さく言いました。
0483nobodyさん2009/07/07(火) 04:18:14ID:???
>HTML内にPHPコードを書いているのと変わらない。

PHPコードを書かせない(制限する)為に、Smartyがあるわけだが。

>(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

内部的にPHPに変換及びキャッシュを行うから、きっちり設定をすればパフォ的には気にとめる程じゃ無くね?
システム規模によるだろうけど、大抵は処理全体の1割未満のリソースしか食わんよ。

上手に導入出来れば開発が相当楽になるので、結果的にコストパフォーマンスは上がるしさ。


一度Smartyの設計思想を読む事をおすすめ。
0484nobodyさん2009/07/07(火) 16:14:30ID:???
>>483
いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。

あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。
0485nobodyさん2009/07/08(水) 01:44:36ID:???
MVCでの開発経験があれば、Smartyが難しいと感じる事は無いと思う。
最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。
0486nobodyさん2009/07/08(水) 02:16:30ID:???
どの程度までCとVを分離すればいいの?
0487nobodyさん2009/07/08(水) 05:06:10ID:???
ご自由に
0488nobodyさん2009/07/08(水) 09:25:14ID:???
(1)
if ($nantoka) {
$str="yes";
} else {
$str="no";
}

result:{$str}

(2)
result:{if $nantoka}yes{else}no{/if}
04891962009/07/08(水) 09:25:17ID:???
Smarty信者はMVCフレームワークとテンプレートエンジンの区別もつかんのか
0490nobodyさん2009/07/08(水) 09:30:04ID:???
>>476で回答済の話をなぜ蒸し返す
0491nobodyさん2009/07/08(水) 10:06:46ID:???
>>487
もっと詳しく
0492nobodyさん2009/07/08(水) 12:47:51ID:???
ココでMVCの話はお門違いだけど、一寸だけ口挟む。

> どの程度までCとVを分離すればいいの?

普通、MとCを何処まで分離すればイイの?という質問が多いと思う。
" CとV "と言ってしまう時点で、MVCがまるで判っていない印象。

MVCの中心にあるのは、C(コントローラ)
何故 C かと言えば、Webアプリのエントリーポイント(プログラムの着火点)は、アドレスであると考えたから。
どんな処理でも、まずそのスクリプトにブラウザでアクセスしないと何も起こらないという事実から、エントリーポイントをアドレスと考えた。

次に、このアドレスの扱いを拡張しようと考えた。

スクリプト名 / メソッド名 / 引数 ... って感じで、アドレスから処理を操ろうとした訳だ。

この時、上記の記述を実際の処理に落とし込むのが、C(コントローラ)の役割。
C は、受け取ったアドレスから、処理の出力先を M(モデル)にするか、V(ビュー)にするか判断するだけ...

ここから、Cは只単に処理を振り分けるだけと考えれば、おのずとMVCそれぞれの割り振りも判ってくるハズ


0493nobodyさん2009/07/08(水) 12:53:19ID:???
>>492
じゃMとVはどう仕事を割り振ればいいの?
0494nobodyさん2009/07/08(水) 12:59:50ID:???
M(モデル):サーバ処理専用。主にDBがらみの処理
V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る
0495nobodyさん2009/07/08(水) 13:11:42ID:???
でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
0496nobodyさん2009/07/08(水) 13:53:41ID:???
MVCにとらわれすぎると、逆に可読性下げるからなぁ…
目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね?

使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。
0497nobodyさん2009/07/09(木) 12:40:59ID:???
>>495
> でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?

MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!
0498nobodyさん2009/07/09(木) 12:46:29ID:???
>>496

確かに可読性は下がる。また、RoRが過ぎるとフレームワークのブラックボックス化が著しくなり、
背後でどんな処理がなされているのか、まるで判らなくなる。

当然、カスタマイズしにくい...
0499nobodyさん2009/07/10(金) 17:05:35ID:???
MVCを意識する・理解するというのは大事だと思うんだが、
どうやってその理解を深める勉強をするの?
結局、自分でソースを書いて、良いか悪いか判断するしかないよね?

俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、
それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。
なら、それで良いのではないか?と思うんだけど、後で困るのだろうか
0500nobodyさん2009/07/10(金) 17:06:18ID:???
お前は何を言ってるんだ
0501nobodyさん2009/07/10(金) 17:19:26ID:???
「そこまでこだわるべきなのか」 ←言いたいこと
「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問
0502nobodyさん2009/07/10(金) 17:21:09ID:???
>>499
>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。

例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?

って話。
0503nobodyさん2009/07/10(金) 18:13:16ID:aQw5S2vU
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。
0504nobodyさん2009/07/10(金) 18:17:06ID:???
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ?
503さん、まじパねぇっす!
0505nobodyさん2009/07/10(金) 19:29:24ID:???
503さんはエスパーなんです!
0506nobodyさん2009/07/17(金) 01:42:54ID:???
>>494
サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな
0507nobodyさん2009/07/17(金) 12:08:33ID:???
>>506
入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。
0508nobodyさん2009/07/17(金) 12:24:47ID:???
>>506

大丈夫か?
頭打ったろ!

ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ
0509nobodyさん2009/07/17(金) 19:58:03ID:???
自分の頭に無い解釈=不正解

だというプログラマーが多すぎです
0510nobodyさん2009/07/20(月) 22:58:34ID:KgRJffi+
勘違いしていたかも知れないんだけど、Smarty自体がMVCフレームワークだよね?
Modelは関数の処理で
Viewの部分がdisplayやfetchでテンプレ表示で
Controllerが最初のクラス実行で

自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた
0511nobodyさん2009/07/20(月) 23:16:35ID:???
それSmatyじゃなくて
PHP+Smartyじゃん
0512nobodyさん2009/07/20(月) 23:28:34ID:???
まあ、あながち間違ってはいないがな。
0513nobodyさん2009/07/21(火) 10:38:01ID:???
いや、間違ってるだろw
その理論だと世の中全てのPHPコードがMVC実装されてる事になる。
0514nobodyさん2009/07/21(火) 10:47:00ID:???
いや、それは「PHPでMVCを書いた」って事で
Smartyみたいに元から実装されている分けじゃないんでは?
0515nobodyさん2009/07/22(水) 00:47:18ID:???
Smartyhajimemasita
0516nobodyさん2009/07/22(水) 08:22:08ID:???
Hello! Smarty
0517nobodyさん2009/07/24(金) 20:52:45ID:kF0trrBu
で、お前らキャッシュ機能って使ってる?
0518nobodyさん2009/07/24(金) 22:28:00ID:???
キャッシュって使うもんなの?
Smartyだと使わされるもんだと思ってたよ。
0519nobodyさん2009/07/24(金) 22:42:57ID:???
>>518
コンパイル済みテンプレートとキャッシュを混同してるだろw


俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。
0520nobodyさん2009/07/25(土) 00:10:16ID:???
>>519
批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?
0521nobodyさん2009/07/25(土) 01:34:19ID:???
キャッシュ使うとテンプレートの更新が反映されないんだが
更新したらキャッシュ切らないとだめなの?
05225192009/07/25(土) 05:09:32ID:???
>>520
Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。

519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。

DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。
0523nobodyさん2009/07/25(土) 11:35:37ID:???
>>521
テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな
0524nobodyさん2009/07/26(日) 02:40:29ID:???
>>523
ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?

俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!
0525nobodyさん2009/07/26(日) 03:26:35ID:???
じゃDBデータがあるサイトの場合は
その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?
0526nobodyさん2009/07/26(日) 04:04:17ID:???
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、
毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。

コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。
0527nobodyさん2009/07/27(月) 11:12:36ID:???
テンプレート自体をDBに格納してるって話じゃないの?
0528nobodyさん2009/07/27(月) 11:30:56ID:???
え?
0529nobodyさん2009/07/27(月) 12:48:51ID:???
へ?
0530nobodyさん2009/07/27(月) 17:40:06ID:???
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。

上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?
0531nobodyさん2009/07/27(月) 22:41:03ID:???
え?
0532nobodyさん2009/07/28(火) 10:37:13ID:???
テンプレートってDBとかに格納しておけるの?
できるならすごい便利なんだが
0533nobodyさん2009/07/28(火) 14:22:43ID:???
>>532
できなくはないでしょ
0534nobodyさん2009/07/28(火) 15:09:38ID:???
>>532
Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。
0535nobodyさん2009/07/28(火) 16:09:45ID:???
できなくないのは分かるけど
いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?
0536nobodyさん2009/07/28(火) 17:56:09ID:???
>>535
updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね
0537nobodyさん2009/07/28(火) 20:41:09ID:???
>>535
CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。


制作の手間暇考えたら、メリットは薄いと思うけど。
0538nobodyさん2009/07/29(水) 22:00:38ID:???
>>535
ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。
0539nobodyさん2009/07/30(木) 00:20:18ID:???
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…
0540nobodyさん2009/07/30(木) 12:07:42ID:???
>>539
DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。
0541nobodyさん2009/07/30(木) 12:13:33ID:???
少し腐ったぐらいが美味しい...
■ このスレッドは過去ログ倉庫に格納されています