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

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2008/02/02(土) 00:21:09ID:6cKcKeTp
まぬあるhttp://www.smarty.net/manual/ja/
0341nobodyさん2008/11/17(月) 21:26:39ID:WEpi9J1I
smartyってのはカスタム関数が便利なんだよ
そんで、そのカスタムタグつくったから適当に使ってよ、とクライアントに投げるの。
好き嫌いは有るけど、生phpより見やすいわけね。
OK?
0342nobodyさん2008/11/18(火) 01:32:18ID:???
>>338

たいがいのフレームワークはそうなんじゃないの
0343nobodyさん2008/11/18(火) 06:18:46ID:???
>>341
テンプレートエンジンの理想型だよな。
PGにもデザイナにも優しい。
Smarty3で速度面が大幅改善されるっぽいので期待している。
0344nobodyさん2008/11/19(水) 00:19:12ID:???
>>343
テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。
まあプラグインで作れることは作れるんだが
0345nobodyさん2008/11/19(水) 04:25:55ID:???
Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?
0346nobodyさん2008/11/20(木) 11:05:10ID:WBdj1Bs+
Pearでカレンダーやメニューを作成してテンプレートに出力させたいんだが
このような場合、みなさんどうしてます?

テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?
0347nobodyさん2008/11/20(木) 11:18:04ID:???
>>346
つ{insert}
0348nobodyさん2008/12/03(水) 23:41:44ID:???
これってDjangoみたいなテンプレートの継承ってできないの?
0349nobodyさん2008/12/03(水) 23:58:50ID:???
>>348
簡易的なモノなら簡単に作れるから自作すれ。
0350nobodyさん2008/12/05(金) 11:52:26ID:jMVHCYUr
template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。

template は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。
0351nobodyさん2008/12/05(金) 13:30:34ID:???
cacheを混乱させそうだな。
03523502008/12/05(金) 14:12:47ID:jMVHCYUr
やめときます。
おとなしく対応させて作ります。

ありがとうございました。
0353nobodyさん2008/12/05(金) 20:37:51ID:???
>>350
コンパイルID指定すればOK
http://www.smarty.net/manual/ja/api.fetch.php
0354nobodyさん2008/12/06(土) 01:16:24ID:???
ほうそんな機能が・・・
メリットがまったく思いつかないけど覚えておきます
0355nobodyさん2008/12/06(土) 01:36:14ID:???
いやわかれよw
0356nobodyさん2008/12/07(日) 09:29:45ID:???
もー!ヽ(`Д´)ノ
sfCutString:5とかにすると5文字表示とかってあるよね?
これって反対に、後ろからの5文字を削除とかって出来ないの?
教えてくださいな(´・ω・`)
0357nobodyさん2008/12/08(月) 09:59:13ID:???
ないものはつくるんだ
0358nobodyさん2008/12/08(月) 16:34:14ID:???
ついでに車輪も作っとけ
0359nobodyさん2008/12/08(月) 23:18:30ID:???
あってもつくるんだ
0360nobodyさん2008/12/09(火) 12:27:40ID:???
車輪の再発明は偉大!
0361nobodyさん2008/12/22(月) 09:45:58ID:???
テンプレートエンジンの選択で迷ってるんですが、
smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか?
人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?
0362nobodyさん2008/12/22(月) 13:12:51ID:???
smarty以外を選択する理由がない
0363nobodyさん2008/12/22(月) 13:56:20ID:fwOoSy8e
自作する。
多分テンプレート変数を置換する以上のことはできないだろうけど
0364nobodyさん2008/12/31(水) 21:47:49ID:8KFb7g3b
今作ってるサイトで、smartyが動かないんですが何が原因と考えられるでしょう?
動作させてる環境は2つあり、動かないのはそのうち一つだけです。
Smarty.class.phpへのパスは相対できちんと通していて、同じファイルを
その2つにUploadすると片方でのみ動いてくれません
もちろんそちらでもphpは動いてるんですが、、

原因を探る方法はないでしょうか?
phpが動くサーバなら動くはずなんですよね?
文字コードとかは関係あるでしょうか?

現状では
$smarty->assign('testvar','テスト');
echo "ここまでOK1";
$smarty->display('sample.tpl');
echo "ここまでOK2";
とすると、 「ここまでOK1」だけ出力します「2」はしません

また、せめてassignがちゃんと成立してるかだけでも知りたいですがどうしたら
いいでしょうか?  ご意見よろしく御願いします
0365nobodyさん2008/12/31(水) 21:49:40ID:???
>>364
error_reporting
display_errors
0366nobodyさん2008/12/31(水) 23:02:30ID:???
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
http://ri■ch■ardkosh■im■izu.at.webry.info/
創価の保険金殺人事件。
オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。
http://www15.ocn.ne.jp/~oy■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
http://jb■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/

2ちゃんねるは統一■教会が個人情報を集めるための道具。運営には統一■教会がいる。
駅前で「手相を見せてください」と勧誘してるのが統一教■会。(カルト宗教)  
カルト宗教の下にいる人と上にいる奴を分けて考えないといけない。下にいる利用される人は上がどんなことをしてるか知らない。

ユダヤ権力の子分→2ちゃん運営=統一協会上層部=層化上層部=自民党清和会=野党の朝鮮人ハーフの政治家=
与党の朝鮮人ハーフの政治家=金 正日(キム・ジョンイル )=読売サンケイ=小沢十朗
ユダヤ人=ロックフェラー=ブッシュ=クリントン=ヒラリー=アドルフ・ヒトラー=オサマ・ビンラディン

毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。
荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。
現実には「ネトウヨ」などは存在しない。
http://changi.2ch.net/test/read.cgi/ms/1230363385/
0367nobodyさん2008/12/31(水) 23:44:19ID:???
>>365
ありがとうございます、解決しました
0368nobodyさん2009/01/02(金) 21:57:29ID:PIvYRgwW
月(1月〜12月)を選ぶプルダウンの出力と、selected=selectedの扱いについて質問です

$monthAry[] = "1月"; から $monthAry[] = "12月"まで配列にして
$smarty->assign('monthAry',$monthAry); としました。
formを出力するテンプレートファイルでは以下のようにして、プルダウンのoptionに出力しています。
 {foreach from=$monthAry item=var}
 <option value="{$var}">{$var}</option>
 {/foreach}

この書式で、確認画面からの戻り値{$month}(assign値です)とoption要素のvalueが等しければselectedと
するために以下のようにしたんですが、あまりきれいなソースじゃないと思います

{foreach from=$monthAry item=var}
<option value="{$var}"
{if $var==$month}
selected="selected"
{/if}
>{$var}</option>
{/foreach}

一応ちゃんと動いてますが、もっときれいで効率的な書き方はないでしょうか?
0369nobodyさん2009/01/02(金) 22:04:07ID:???
>>368
http://www.smarty.net/manual/ja/language.function.html.select.date.php
0370nobodyさん2009/01/02(金) 23:18:35ID:???
>>369
横ですがこれのselectedって現在時刻じゃないですか?
0371nobodyさん2009/01/03(土) 01:08:00ID:???
>>369
こんなのがあったんですね、ありがとうございました。
0372nobodyさん2009/01/04(日) 08:20:15ID:S9BZj0MW
フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき

{$name|escape} とすれば上記のとおり見れますよね。
これを、修正画面に持ち越したいときはどうしたらいいんでしょうか?

<input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし
<input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の
inputの表示がおかしくなるし、、
ご意見よろしく御願いします
0373nobodyさん2009/01/04(日) 08:53:47ID:???
セッション
0374nobodyさん2009/01/04(日) 17:11:37ID:???
>>373
ありがとうございます 解決しました
0375モンピー772009/01/05(月) 09:16:41ID:mGW0zuF3
Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを
しているのですが

$o_smarty->default_modifiers = array( 'escape:"html"' );

配列にも適用させること可能なのでしょうか?

みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?

0376nobodyさん2009/01/05(月) 11:59:56ID:???
>>375
default_modifires はクセがあるから気をつけたほうがよいよ。
{foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。

>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。
0377nobodyさん2009/01/07(水) 10:21:31ID:nbhiW1pd
>>375
そもそもPHP側ですませておく。
なんのために分離してるのかと
0378nobodyさん2009/01/07(水) 11:39:38ID:???
サニタイズはビュー側でもOKだと思うが。
0379nobodyさん2009/01/07(水) 12:32:40ID:???
サニタイズ(笑)
0380nobodyさん2009/01/08(木) 12:21:51ID:???
>>379(笑)
0381nobodyさん2009/01/08(木) 13:16:48ID:???
ん?反論できなくて涙目?w
0382nobodyさん2009/01/08(木) 14:37:59ID:/Ay52XkK
>>381
お前が暇人なだけだろw
0383nobodyさん2009/01/08(木) 16:01:24ID:???
>>378
誰も不可とは言ってないと思うが
0384nobodyさん2009/01/08(木) 16:03:12ID:???
>>382
必死だな
0385nobodyさん2009/01/09(金) 02:14:26ID:???
>>383
>>377ではPHP側でやれと書いてあるようにしか読めないんだがww

必死すぎて恥ずかしいな。
0386nobodyさん2009/01/09(金) 13:26:05ID:dxaSQaiQ
>>385
必死厨必死だな。

「みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?」
この意味わかるか?
0387nobodyさん2009/01/09(金) 14:19:53ID:???
「サニタイジング」じゃねーの?
0388nobodyさん2009/01/10(土) 01:02:19ID:???
>>386
スマン。日本語でお願い出来るか?

どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?
0389nobodyさん2009/01/15(木) 22:45:35ID:iReMhog8
smartyを設定したんだけど、ページが表示されません
assignもdisplayも動かないというか、それ以前に
templatesディレクトリの指定とかがうまくいってるのかがわからないです
そういう設定が今どうなっているのか、確認する方法はないでしょうか?
ちなみに今のsmarty.class.phpへの接続は以下のような形です

<?php
//テスト
require_once('Smarty.class.php');//これでSmarty.class.phpに繋がってることは確認済みです
class MySmarty extends Smarty{
function MySmarty(){
$this->Smarty();
$mydir = dirname(__FILE__);
$this->template_dir = $mydir."/templates/";
$this->compile_dir = $mydir."/templates_c/";
$this->config_dir = $mydir."/configs/";
$this->cache_dir = $mydir."/cache/";
$this->caching = 0;
}
}
?>

これを、各phpからrequireさせています
03903892009/01/15(木) 23:24:27ID:iReMhog8
>>389に書いたファイルをrequireした.phpで、

require_once('MySmarty.class.php');
//Smartyクラスのインスタンス作成
$smarty = new MySmarty();
echo "テンプレートディレクトリ:".$smarty->template_dir;

としたら、正しいパスを読み込みました
これはSmarty.class.phpも読み込み成功してるってことですよね?

どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?
0391nobodyさん2009/01/15(木) 23:29:20ID:iReMhog8
ごめんなさい、書き間違えです

×正しいパスを読み込みました
○正しいパスを出力しました

×一つのディレクトリに複数の…
○一つのサイトに複数の…

また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)
0392nobodyさん2009/01/15(木) 23:35:13ID:???
compile_dir,cache_dirへの書き込み権限はありますか?
0393nobodyさん2009/01/16(金) 00:01:11ID:7rtqusgx
>>392
どうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした

そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ
03943892009/01/16(金) 02:58:12ID:???
原因がわかりました! .tplに

<style type="text/css">
<![CDATA[
a:link{color:blue;}
a:focus{color:red}
a:visited{color:purple;}
]]>
</style>
という部分があったためでした。これを削除すると正常にdisplayされました。
念のため、この.tplのソースをコピペしてtest.htmlをつくり、それを直接開くと
どのブラウザでも確認できました
どうやら、Smartyと上の記述の組み合わせでのみエラーになるようです(理由はわからない)

このページは携帯用で、
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
って感じにXML宣言のあるxhtmlだったんですが、この中では<!-- -->は使えないって言うので
上記の形(<![CDATA[ ]]>)にしたところエラーになりました

1)XML宣言
2)携帯用サイト(外部CSS使えない→1)のせいでコメントは<![CDATA[ ]]>にならざるを得ない)
3)Smarty
という組み合わせは実用不可能というお話でした
0395nobodyさん2009/01/16(金) 06:34:07ID:???
>>394
ttp://www.phppro.jp/phpmanual/smarty/language.function.literal.html
0396nobodyさん2009/01/16(金) 14:02:35ID:???
デリミタの変更はSmarty最初の課題。
0397nobodyさん2009/01/16(金) 23:45:16ID:???
CSSは外部でいいやって思ってたけどこういう場合もあるんだな。
Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。
0398nobodyさん2009/01/19(月) 11:16:42ID:RBlPIEnm
通常のHP案件でSmartyを常用していたのですが、
みんクエのようなRPGタイプのブラウザゲームを制作予定です。
常に値が変動して最新の情報を表示しないといけないケースで、
Smartyを使用するのはナンセンスでしょうか?
0399nobodyさん2009/01/19(月) 11:19:59ID:???
ケースバイケース
0400nobodyさん2009/01/19(月) 15:19:03ID:???
cache切っても充分使えるしな。
重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・
0401nobodyさん2009/01/20(火) 18:40:01ID:???
PHP側で連想配列のキーにピリオドを含む使った

$foo['bar.baz']='hoge';

のような変数をSmarty側にassignした場合、
テンプレ側ではどういう表現をすればアクセスできるの?

{$foo[bar.baz]}

はだめだったんだけど、何か他の表現方法あるのかな?
0402nobodyさん2009/01/20(火) 20:16:27ID:???
つマニュアル
0403nobodyさん2009/02/03(火) 21:30:12ID:???
phpからdisplayしようとすると

Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /usr/share/pear/Smarty/libs/Smarty_Compiler.class.php on line 454

Fatal error: Smarty error: [in main.tpl line 1]: syntax error: unrecognized tag: include file="header.tpl" (Smarty_Compiler.class.php, line 455) in /usr/share/pear/Smarty/libs/Smarty.class.php on line 1092

こんなエラーが出てしまうんですけども、原因を教えていただけないでしょうか。
ちなみにmain.tplの中身はこんなのです。

{{include file="header.tpl"}}
{{foreach from=$include_files item=file}}
{{include file="$file"}}
{{/foreach}}
{{include file="footer.tpl"}}
0404nobodyさん2009/02/03(火) 21:32:58ID:???
なんで二重括弧なの?
0405nobodyさん2009/02/03(火) 21:41:22ID:???
>>404

Smarty.class.phpを継承したクラスも使ってるので、本家との差別化のためです。

継承したほうは
$this->left_delimiter = '{{';
$this->right_delimiter = '}}';
を設定してあるので大丈夫だと思うんですけども。

ちなみに括弧ひとつにしても同じエラー出ます。
04064032009/02/03(火) 21:51:04ID:???
環境書き忘れました

CentOS 5.2 Kernel 2.6x
PHP 5.1.6

preg_matchでSmartyのタグ探して処理させてるから
タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。
0407nobodyさん2009/02/03(火) 21:53:11ID:???
試してみたいから再現できるコード出してくれ
04084032009/02/03(火) 22:23:57ID:???
<?php

require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください

$a = 'test';
$mysmarty->assign('test', $test);
$mysmarty->display('test.tpl');

?>

-----------------------------------------

{{$test}}

###こんな単純なコードさえエラー出ます###
04094032009/02/03(火) 22:24:52ID:???
間違えました^^;

<?php

require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください

$a = 'test';
$mysmarty->assign('test', $a);
$mysmarty->display('test.tpl');

?>
0410nobodyさん2009/02/04(水) 01:57:17ID:???
当然ながら私の環境では再現しません
04114032009/02/04(水) 19:44:57ID:???
既にSmartyが実働してるサーバからSmarty関連のファイルを引っ張ってきて
インストールしたら正常に動きました。
公式の最新バージョンはバグ有りなんですかね?
何はともあれ、お騒がせしました。
0412nobodyさん2009/02/04(水) 22:30:27ID:???
自分の環境で試してくれる回答者放置とか最悪な質問者だな
04134032009/02/05(木) 07:13:36ID:???
大変失礼しました。
わざわざ確認していただき、ありがとうございます。
お礼?になるか分かりませんが、問題のあった方のSmartyをアップしておきます。
libsの中身を入れ替えるだけで多分再現できると思います。

ttp://www1.axfc.net/uploader/File/so/18050
0414nobodyさん2009/02/05(木) 08:52:10ID:???
問題のあったファイルがお礼とかw
0415nobodyさん2009/03/03(火) 15:33:16ID:???
値がある場合はstring_formatの%0.1,なかった場合は にしたいんだけど
{var|default:' '|string_format:'%0.1'}
だと値が無い場合には全て0.0になってしまうし、
{var|string_format:'%0.1'|default:' '}
だと値が無い場合にnoticeが出てしまって両立できないんだけど、
どうしたらいいかな?
0416nobodyさん2009/03/03(火) 15:34:02ID:???
フォーマットのf抜けてた
0417nobodyさん2009/03/05(木) 19:41:11ID:???
CakePHP1.2にSmartyView入れて使い始めてみたんだけど
$form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま?

{$form->create('Modelhoge', array('action'=>'Actionhoge'))}

モデルだけ指定すると出力されるんだが、、
0418nobodyさん2009/03/06(金) 03:16:30ID:???
>415
register_modifier 使って関数自作すればいいんじゃない?
0419nobodyさん2009/03/12(木) 20:22:12ID:???
昨日テンプレートエンジンというものを知って調べたが、こんなもん速度と品質犠牲に使う本気で奴バカすぎ。ヒアドキュメントで十分すぎ。
0420nobodyさん2009/03/13(金) 10:39:43ID:???
そうだよ?
0421nobodyさん2009/03/13(金) 10:48:04ID:???
PHP自体がテンプレートエンジンであり
速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを
419は知らないのだった
0422nobodyさん2009/03/13(金) 11:05:13ID:???
Smartyってめっちゃ便利やな!
PHP案件は全部これ使って開発してるぁるょ!
0423smarty初心者2009/03/16(月) 14:02:13ID:UpVqDdxv
Fatal error: Call to a member function assign() on a non-object in・・・*.php on line 32
というエラーがでるのですが、どういう意味なのでしょうか?
教えてください。
0424nobodyさん2009/03/16(月) 15:28:49ID:???
>>423
ggrks
0425nobodyさん2009/03/16(月) 17:22:30ID:???
変数名が違うんだろ
0426nobodyさん2009/03/19(木) 02:15:19ID:???
そのレベルだとSmartyどころかphp初心者だろ……
0427nobodyさん2009/04/12(日) 10:19:11ID:tJ4UxLsE
ヤッターマン公式サイトはSmartyを使っているようだ。
http://www.ytv.co.jp/yatterman/
0428nobodyさん2009/04/22(水) 01:10:23ID:rBHnGmhI
Smartyのファイル名が
「%%45^45E^45E480CD%%index.tpl.php」

と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか?
%%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。
しかし、それ以外の数字と記号の意味がわかりません。
0429nobodyさん2009/04/22(水) 01:44:07ID:???
Smarty::_parse_resource_nameに書いてある
0430nobodyさん2009/04/23(木) 02:53:59ID:ai/dLDOC
あいまい検索みたいな事って出来るのでしょうか?

例えば、test_file.phpというファイル名のファイルがあったとして
testで検索してもそのファイルがヒットするようにしたいのです。

opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、
preg_matchなどの正規表現でファイル名を調べる方法もありますが、
もう少し短い手順で、簡単に調べられる方法はないでしょうか?
0431nobodyさん2009/04/23(木) 02:55:05ID:???
430です。すみません、誤爆です・・。質問スレに書きます。
0432nobodyさん2009/05/03(日) 08:41:04ID:???
template_cの中身を見たら
こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php
0433nobodyさん2009/05/03(日) 12:28:14ID:???
コンパイル後のテンプレートファイル
0434nobodyさん2009/05/03(日) 14:56:11ID:???
なるほど
消しても問題なさそうですね?
ありがとうございます
0435nobodyさん2009/05/03(日) 17:01:11ID:???
( ゚д゚)ポカーン
0436nobodyさん2009/05/04(月) 18:34:03ID:bGJWbWfu
MTでPHPを使う部分にSmartyを使っているみたいなのですが、
MTのテンプレートを見ると <mt: >な独自タグを使っています。
Smartyで独自タグって定義できるのでしょうか?
0437nobodyさん2009/05/05(火) 03:15:12ID:???
>>436
できる(`・ω・´)
0438nobodyさん2009/05/05(火) 21:30:24ID:???
HTMLファイルだって定義するぐらいはできるんだぜ
0439nobodyさん2009/05/06(水) 01:41:19ID:T5mYjMeP
>>437-438
どこの設定を変更したら出来るのですか?
0440nobodyさん2009/05/06(水) 07:14:42ID:???
>>439
断る(`・ω・´)
■ このスレッドは過去ログ倉庫に格納されています