【PHP】 Smarty 【テンプレートエンジン】 第2章
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん
2010/03/29(月) 14:41:04ID:???具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、
これらの役割を違う人間が受け持っている場合に最適だと言えます。
0931nobodyさん
2011/10/16(日) 16:13:23.67ID:???エスケープされるはずの文字列を。
0932nobodyさん
2011/10/19(水) 20:50:23.39ID:???具体的にはどのような文字をエスケープするのでしょうか?
0933932
2011/10/19(水) 20:57:09.49ID:???http://web.shikaku-zukan.com/smarty/func/escape.html
でありますが、htmlallの方の挙動が分かりません
何故あいうえおなどの文字列まで全部エスケープされているのでしょうか?
いったいどういう文字をエスケープし、どういう仕様なのかが分かりません
これを見ると、htmlallよりhtmlの方がいいのかなと思いますが、マニュアルにはhtmlallが指定されています
実際問題どちらがいいのでしょうか?
0934nobodyさん
2011/10/23(日) 05:25:39.09ID:XgYAMZNDphpで 変数animalに「犬」とassignされてて
テンプレートファイルの<script>タグ内でそのsmarty変数を受け取って利用したいとき
どう処理したら良いんでしょうか?
<script>
animal = {$animal};
alert(animal+"を飼っています");
</script>
という形で「犬を飼っています」と表示させたいのですが
{}の処理がわかりません
0935934
2011/10/23(日) 06:28:57.04ID:???上の質問は無視してください
0936nobodyさん
2011/10/26(水) 15:36:49.28ID:JKF2j1ikhttp://ja.wikipedia.org/wiki/Phalanger
0937nobodyさん
2011/11/02(水) 17:28:27.54ID:???古いのしか見つけられなかった。
0938nobodyさん
2011/11/15(火) 14:37:54.73ID:hT8eAUMs0939nobodyさん
2011/11/15(火) 15:34:18.71ID:???それは設定ファイルから読み込まれた変数
ttp://www.smarty.net/docs/ja/language.config.variables.tpl
0940nobodyさん
2011/11/15(火) 16:43:57.31ID:hT8eAUMs0941nobodyさん
2011/11/21(月) 22:03:04.64ID:+dtlHn11以前までは普通にtplファイルをviでごりごり弄ってても、ちゃんとブラウザで表示できたのに
急に真っ白な画面しか出なくなってうまく表示されません
文字コード、改行コードなどは正しいです
簡単なコード(<h2>test</h2>)だけで試しても表示されません
ちなみにApacheのログには何も出ません
原因は恐らくコンパイルされなくなった事にあると思いますが、理由がわかりません
同じような症状になった人とかいますか?
よろしくお願いします
0942nobodyさん
2011/11/21(月) 22:27:40.35ID:+dtlHn11templatesディレクトリの中身を消してもダメでしたし、cacheは利用していません
0943nobodyさん
2011/11/22(火) 00:44:39.57ID:???0944nobodyさん
2011/11/22(火) 02:12:50.43ID:???開発環境なら出力してチェックすべし
0945sage
2011/11/22(火) 06:24:40.86ID:rTYRxhVU不思議なのは更新日が新しくなるとダメだという事
(mvで名前変更はアウト、cpは-aを付けないとアウト)
Smartyの処理の流れは正確にはわからないのですが、
tplファイルを編集→tplファイルが以前の日付よりも新しくなっていたらコンパイルファイルを更新 と認識しています
したがってコンパイルが出来なくなっているのが原因ではないかと書きました
0946nobodyさん
2011/11/22(火) 06:26:28.47ID:???0947nobodyさん
2011/11/22(火) 08:14:29.85ID:???0948nobodyさん
2011/11/22(火) 08:38:20.14ID:???ちなみに、SELinuxはEnforcingだけどDocumentRootのコンテキストタイプはディレクトリ、ファイルともにhttpd_sys_content_tになってる
0949941
2011/11/22(火) 11:32:32.97ID:???Smarty.class.phpに不要なメソッドが追加されていたのが原因でした
削除したところ無事動きました
お騒がせしました
0950nobodyさん
2011/11/22(火) 21:12:01.83ID:???0951nobodyさん
2011/11/23(水) 00:48:14.76ID:???>不要なメソッドが追加されていたのが原因でした
"追加していたのが" or "追加されていたのが(本人の意図しないところで)"
そもそも、不要なメソッドを追加したのが、ご自身ならばコーディングミス。
そうではなくて意図しない所でメソッドが変更されていたなら危機感を感じた方が良いよ。
0952nobodyさん
2011/11/23(水) 00:51:00.68ID:???原因分かった後にどうするのかはSmartyとは関係ないんだし。
0953nobodyさん
2011/11/23(水) 04:17:43.61ID:???簡単に言うと開発環境と実環境が同期されていなかった事が原因です
色々な事情により開発環境と実環境の同期は手作業なため、その部分でミスがありました
0954nobodyさん
2011/12/14(水) 22:49:06.35ID:???Warning: htmlspecialchars() expects parameter 1 to be string, array given in 〜
となるのですが、原因がどうしてもわかりません。
Stringにすると通ります。
すみませんが教えていただけますと幸いです。
よろしくおねがいしますm(_ _)m
0955nobodyさん
2011/12/15(木) 02:00:17.85ID:???ていうか自己解決してるじゃないか
配列を引数で渡しちゃいけない
0956nobodyさん
2011/12/16(金) 01:22:42.74ID:???checkboxなら複数選択って状態があるはずだし配列で渡せないとおかしくない?
と思ってマニアル確認したら渡せることになってるみたい
http://www.smarty.net/docsv2/ja/language.function.html.checkboxes.tpl
今試せる環境がないんでバグなのかマニアルのミスなのかわからないけど
違う原因じゃないかな
0957nobodyさん
2011/12/16(金) 01:39:30.81ID:???selectedは checked="checked"になるわけで
その値をhtmlspecialchars()するとは考えにくいので
>html_checkboxesでselected指定をarrayにすると
が原因じゃなくて、他の指定がおかしいんじゃないだろかと予想してみる
どう指定してるかを貼り付けたほうがよさそう
0958nobodyさん
2012/01/05(木) 17:15:17.69ID:fe3IZuplsmartyに渡したオブジェクトの変数から、
smarty内でそのオブジェクトのメソッドを呼びたいのですが、
どのように書けばいいのでしょうか?
もしかして無理なのでしょうか。
教えていただけると幸いです
0959nobodyさん
2012/01/05(木) 18:08:21.78ID:fe3IZupl普通に->()が使えるのですね。失礼しました
0960nobodyさん
2012/01/12(木) 09:23:32.21ID:iHCFQcsC$smarty = new MySmarty();
$smarty->setCaching(NugiSmarty::CACHING_LIFETIME_SAVED);
$smarty->setCacheLifetime(60); // 60秒間キャッシュ
$smarty->setCompileCheck(false);
このような設定で、キャッシュが60秒ごとに更新されるまでは確認できたのですが
templates_cディレクトリの解析済みキャッシュが更新されておらず、
cacheディレクトリのキャッシュのみが更新されるため、
実質、表示上は更新されないという状況になっています。
(template_cのファイルが更新されないことには、それをもとに更新されるcacheのファイルの内容に変化はない)
どういう指定が必要なんでしょうか。
0961nobodyさん
2012/01/12(木) 09:38:27.74ID:iHCFQcsCSmartyのver3.1.3です
0962nobodyさん
2012/01/12(木) 10:35:24.13ID:???テンプレートはテンプレートをPHPフォーマットにしたものをキャッシュ
テンプレートに変更がなければテンプレートは更新されない
もっと良くマニュアル読んで
0963960
2012/01/12(木) 10:54:47.62ID:iHCFQcsCどもです。そういえば意識してなかったんですが、>>960はテンプレートの変更で試していました。
一応今、次のようなコードでとりあえず更新されるようになりました。
if (!$smarty->isCached($tmpl,$cache_id)) {
//コンパイル済みのファイルがチェックされ、結果的に更新される
$smarty->setCompileCheck(true);
//以下は効かなかった(cacheの更新のみ)
//$smarty->clearCache($master_tmpl,$master_cache_id);
//$smarty->clearAllCache();
}
なんか変は気はするけど、おそらく>>962で説明していただいた違いなんですよね。
つまり最初の設定で
$smarty->setCompileCheck(false);
としているため、再コンパイルの可能性は考慮されない、と。
0964nobodyさん
2012/01/12(木) 11:03:01.62ID:???キャッシュもテンプレートエンジンもあまり意味ないんじゃないの
0965960
2012/01/12(木) 11:20:02.82ID:iHCFQcsC60秒はあくまでテストです。
定期的に更新される外部ファイルを1日1回
全ページ共通のメインテンプレートに埋め込む感じなので。
もちろん、他の実装も可能でしょうけど、
埋め込んでしまえばその都度のinclude分、節約できるかと。
0966nobodyさん
2012/01/12(木) 11:32:10.40ID:???# 1.キャッシュがあるか
あればキャッシュから出力して終了
# 2.キャッシュが無かったのでデータ作成
キャッシュさせて出力
こんな順序で、テンプレートのコンパイルは特に意識しない
テンプレートのコンパイルが必要なのはテンプレートを書き換えた時のみ
共通テンプレートを使うことはよくあるのでテンプレートIDをそれぞれのアクセスに対して付ける
多くの場合はアクセスURLをIDにしておくと事足りる
$tplid = md5($_SERVER['REQUEST_URI']);
とか
0967960
2012/01/12(木) 12:01:23.53ID:iHCFQcsC>テンプレートのコンパイルは特に意識しない
たしかにそうですよね・・・ちょっと組み合わせ方がよくないかもです。
結局今だと、Smartyにデータ(外部ファイル)を再取得するかどうかを判断させちゃっているし
それも再コンパイルが必要な操作なわけだから、それはプログラムのコードの方での判定と、
再コンパイルではなくキャッシュの更新で対応すべきということですよね。
再考してみますm(_ _)m
0968nobodyさん
2012/01/12(木) 21:58:31.95ID:enIWBzTvとかでtemplate_dir、compile_dirを変更しようとしてもデフォルトのとこしかみてくれないんですが、
これだけじゃ変更できないんでしょうか・・。
0969nobodyさん
2012/01/12(木) 22:11:11.29ID:???0970nobodyさん
2012/01/13(金) 01:18:12.35ID:IZyFHZTpとんちんかんなこと聞いているかもしれませんがエスパーの方いらしたらお願いします
0972nobodyさん
2012/01/21(土) 04:32:54.63ID:???実質必須だよ
0973nobodyさん
2012/01/21(土) 08:43:16.52ID:???ありがとうございます
ロケールを指定したら解決しました!
0975!ninja
2012/01/22(日) 01:46:03.48ID:???たとえば
fopen('$x .txt', 'r')
のように変数(x)と文字(.txt)を結合したいです
0976nobodyさん
2012/01/22(日) 01:46:23.87ID:???たとえば
fopen('$x .txt', 'r')
のように変数(x)と文字(.txt)を結合したいです
0977nobodyさん
2012/01/22(日) 01:47:14.02ID:???エラーが出たので連投してしまいました
0978nobodyさん
2012/01/22(日) 03:40:30.08ID:???"{$x.txt}"
つーか、クォートくらい覚えろよ
0979nobodyさん
2012/01/22(日) 03:40:57.43ID:???"{$x}.txt"
0980nobodyさん
2012/01/30(月) 01:25:51.34ID:???> のように変数(x)と文字(.txt)を結合したいです
結合演算子は「.」(ピリオド)。
なので
$x . '.txt'
で結合できるお。
0981nobodyさん
2012/01/30(月) 11:13:04.04ID:???質問スレとか初心者スレとか書いてあるならまだしも、ここSmartyスレだし
レス数が950を超えています。1000を超えると書き込みができなくなります。