【PHP】 Smarty 隔離スレ 【テンプレート】 at PHP
[2ch|▼Menu]
[前50を表示]
300:196
08/10/15 19:01:26
せっかくなのでSmartyの質問をさせてくれ。

(是非はおいといて)>>278のような事をSmartyで実現したい。

MVCで言うと、new Smarty();が書かれるファイルは、
モデルでもコントローラでもなく、ビューに属する事になる。
sfSmartyViewとかZend_View_Smartyみたいな位置づけになるわけだな。なので、

コントローラ(ラッパーにテンプレート変数を渡す)

ビュー用のラッパー。内部的に$snarty->assign();が書かれる

★テンプレート変数の整形処理(Smartyの便利な構文で書ければ良い)
$name = {$name|escape|なんたら|かんたら}

テンプレートファイル(.tpl)
{$name}

みたいな風にしたいのだが、それは仕様上無理なんだろうか。
{assign}とか{eval}でいける? コストはこの際考えないことにして・・・。


301:nobodyさん
08/10/15 19:38:33
>>299
>tpl.phpが難しいから学習コストが高いということかな?

少なくともSmartyと比較したら数倍難しいし、
素人のロジックがシステムに混入する恐れがある。
define("DEBUG", 1); とか $_POST["xxx"] = "debug data!"; とか書かれてたら寒気しない?

>Smartyで出来る事は理論上すべてPHPで出来る

これは逆じゃないかな。
「symfonyで出来る事は全てPHPで出来る」と言ってるのと同じで、
Smartyは所詮PHPライブラリに過ぎないんだから。

> PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
>「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?

仮にPHPが触れるデザイナがいたとしても、
上に書いたようにセキュリティの観点からは、システムに影響を与える権限を与えないのが普通だと思う。
少なくとも外注のデザイナには絶対に触らせたくないよね。

>tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。

tpl.phpはビューである以上、デザイナが触るべきだと思う。
ロジック的にMVCを分けても、管理体制(担当区分)がわかれていないとエラーが出た時に面倒だから。

そういう意味ではSmartyはその機能性より、
コードの統一性や管理体制に与える恩恵の方が大きいのかもね。


302:nobodyさん
08/10/15 20:31:43
>>300
>(是非はおいといて)>>278のような事をSmartyで実現したい。
{assign}{capture}{eval}あたりで出来るよ。
コンパイル後のソース見ればわかるけど、assignなんかはコストもほとんど変わらない。

// format.tpl
{assign var="name" value=$name|escape|default:"no name"}
{include file="body.tpl"}

// body.tpl
{$name}

>MVCで言うと、new Smarty();が書かれるファイルは、
>モデルでもコントローラでもなく、ビューに属する事になる。

自分はSmarty自体をビューとして考えているかな。
コントローラがビュー(Smarty)を生成し、レスポンスデータを渡す。
ビュー(Smarty)は与えられたレスポンスデータを元に画面を表示する。

↓こんな感じ。
class Controller {
public function action() {
// 実際にはSmarty継承クラスor内包クラスになる
$view = new Smarty();

// 必要な処理をしてビューにレスポンスデータを渡す
$view->setResponse(new Respose(xxxx));

// 整形や表示処理は全てビューにまかせる。
$view->render();
}
}

303:nobodyさん
08/10/15 20:34:36
PHPが書けないデザイナをヘボとか言っちゃう人とは仕事したくないなあ
jspが書けないデザイナもヘボなんだよね?
MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない
うーん、大変だな

304:nobodyさん
08/10/16 02:49:37
>>298
> PHPは正確にはテンプレートエンジンでは無いんですよ。
そうなんですか??

> Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが)
んんーSmarty内でPHPコードを書くのは本末転倒というか本末転倒ですよね。。

あとカスタムタグ?のサンプルありがとうございます!
URLリンク(smarty.incutio.com)というのがおもしろそうでした!

305:nobodyさん
08/10/16 03:51:12
>>304
PHPはプログラミング言語の名称ですよ。

306:nobodyさん
08/10/16 08:06:34
>>303
CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw


個人的にはデザイナはPHPとか勉強するヒマあったら、
システムに組み込みやすいスマートなHTMLコーディング技術を学んで欲しいわ。

307:nobodyさん
08/10/16 17:56:46
>>305
そりゃ、そうでしょうとも…!

308:nobodyさん
08/10/16 19:53:26
PHPという言語は<?php ?>タグの外をそのまま出力するという言語仕様なだけでテンプレートエンジンでは無いよね。

309:196
08/10/19 11:55:40
なるほど、このスレには分業指向の人が多いんだな。

>>301
{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。

>>302
やっぱり、そうなってしまうよなあ。
上で「それはMVCではない」と言われてから、内心悩んでたんだけど。
Smartyの解説ありがとう。その線で学習コストが等価になれるか検討してみる。

>>303
JavaとかMT(使ってる人いるのか?)のプロジェクトなら、そうだろうね。

>>306
HTML書けません、というプログラマーとは間違っても一緒に仕事しないよ。

というより、Smarty文法がわからないデザイナーと一緒に仕事しないでしょ?
同じことでないの?

310:nobodyさん
08/10/19 15:09:25
>>309
>{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。

{php}{/php}タグは禁止に出来ます。

>デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
>へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。

逆になんで必要の無い権限を与えるの?それによるデメリットは考慮しないの?
まっとうなセキュリティの考え方だったら「必要な権限以外は与えない」のが常識だと思うんだけどね。
最低限の権限で不便させない環境を提供出来ないシステム屋こそへぼい人だと思う。


参考までにいくつか質問させておくれ

 ・プロジェクトの人数とか連携手法やらバージョン管理方法は?
 ・テンプレートPHPでエラーが出たら誰の責任になるの?
 ・テンプレートに使ってるPHP系のライブラリとかは?

311:196
08/10/19 15:56:49
>>310
デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
コードレビューとサーバへの設置はプログラマーがやればいいじゃん。

デザイナーにサーバへの書き込み権限を与えた時点で、
(仮にあらゆるコマンドの実行をサーバ上で絶対に行えなくしたとしても)
デザイナーはシステムの正常動作責任を一部負う事になるのは間違いない。
たとえば、必要なパラメタを渡さなかったとか、ファイルを消しちゃったとか。

だから、あらゆる操作をサーバ上で絶対に行えなくすることのメリットは、
デザイナーがサーバを壊さないようにする、という程度に過ぎないので、
それなら優秀で信頼のおけるデザイナーと仕事したほうがいいんじゃないの? と思う。


質問の答えだけど、製品が完成しなかったらチーム全体の責任。
デザイナー主導の案件でもプログラマー主導の案件でも、
インタフェース定義の必要性は発生し、それは両者(主に主導側)の責任になる。
Smarty単体ではシステムの仕様テストは行えないので、
「言われたとおりのSmartyテンプレートだけ書くからあとは知らないよ」というデザイナーは、
HTMLだけしか書かないデザイナーと大して変わらない。

なので俺はそういうデザイナーとは仕事してないし、
もしデザインを外注する事があっても、Smartyの学習を促す事は無いと思う。

あえて擁するなら、へぼプログラマーと連携する時には、Smartyは役に立ったな。
あれを安直に使えば、嫌でもビューとロジックが分離出来るから。
でも今はフレームワークを使うのが普通なので、そのメリットは感じられなくなった。


312:196
08/10/19 16:30:50
超極端な例として、>>310の議論にとって最も良い条件を考える。

・顧客がWebデザインを自分で更新したいと要望している
 実力はへぼかも知れないが、お客様なので無碍にも出来ない
・プログラム開発も初期デザインも業者が行い納品する
・サーバは業者が貸与するので、壊されないように配慮しなければいけない
・ssh権限は与えず、ftpsでテンプレートファイルだけ更新できるようになっている
・プログラムの動作責任は業者が負わないといけない
・テンプレート更新内容のチェックに業者の人的コストは割けないので、
 更新はノーチェックで行い、システムが正常動作しなくなった責任は顧客に負わせなければいけない
・テンプレートにはプログラムから変数を埋め込まなければいけない
・顧客はSmartyの心得と導入への理解がある
・Smartyのうち危険なタグをすべて洗い出し、設定で使用を禁止している
・テンプレートでエラーが出てもセキュリティ的に不適切な出力は行われないよう設定されている

それでも

・パラメタエラー
・クロスサイトスクリプティング

の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
お客様が |escape を書き忘れただけで。
なので>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。

でも、ここまで極端な事例でもない限り、デキル人を探した方が早いなぁ。
顧客には任意の静的HTMLを特定箇所にinclude出来る仕組みのみを提供するとか。
Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。


313:nobodyさん
08/10/19 17:55:19
とにかく難癖つけてSmarty叩きたいのはわかったけど、
結局君がSmarty使いこなせてないだけじゃんww
100%の対策なんて無いんだから、対策しないって言ってるだけって事に気付けww

>デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
>コードレビューとサーバへの設置はプログラマーがやればいいじゃん

 デザイン修正の度にやるんすか。

>デザイナーにサーバへの書き込み権限を与えた時点で

 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
 ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
 消される恐れがあるとわかってて何故権限を与える?w

>Smarty単体ではシステムの仕様テストは行えないので、

 わぁ、きっと君のところはMVC分けが出来てないんですね><
 フレームワーク使えば大丈夫とか思ってるんですね><


314:nobodyさん
08/10/19 18:12:47
>・パラメタエラー
>・クロスサイトスクリプティング
>の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。

 default_modifiersやフィルタって知ってます? 

>Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。

もうSmarty叩きはいいからさ
その安全で扱いやすい俺俺テンプレートエンジンを見せてよ。
君の主張は前提と具体性がないから水掛け論だよ…。

まさか専門学校生じゃないとは思うけど質問に具体的、箇条書きで答えてくれよ。

・プロジェクトの人数は?
・連携手法は?
・バージョン管理方法は?
・デプロイ方法は?
・使用しているPHPライブラリは?
・使用しているフレームワークは?
・使用している俺俺テンプレートエンジンは?

315:nobodyさん
08/10/20 12:22:54
こんなに活発に意見交換があるのに、
どうしてココは『隔離スレ』なの?

316:nobodyさん
08/10/20 12:27:38
名目はともかくスレ独立してるのはありがたいので別にいいや。


317:196
08/10/20 18:54:05
>>313
煽っているように見えて>>311と同じ事を言っているように見える。
なので異論は無い。むしろ、まったくその通りだと思う。

>>314
default_modifiersは初めて知った。
nodefaultsと組み合わせれば、symfonyのescaping strategyに近い所まではいけるな。
escapeはプログラマーの責任でもなくデザイナーの責任でもなく、
フレームワークが基本的に便宜を図る、という解釈をすれば、悪くない思想だと思う。

後半については答えても意味が無いと思うし、
別にSmartyを否定する事が主目的で発言している訳ではないと言っている。

世の中にはSmartyを使うのに明らかに向かない案件もあるし、
そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。

逆に「Smartyを使うならこんな規模や状況やツールに最適だよ」という意見があれば、
それは主張してくれればいいと思う。


318:nobodyさん
08/10/20 19:11:06
>>317
default_modifiersは問題がある(ソースに手を入れれば回避可能だが)から使わないって話なら聞くが
Smartyを3年使ってて知らないってどんだけ・・・

そもそもなんでこのスレにいるん?

319:nobodyさん
08/10/21 01:33:33
>>317
>世の中にはSmartyを使うのに明らかに向かない案件もあるし、
>そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。

本当にそう思ってるなら196から出てくる発言はありえないと思うんだよね。

シチュエーションも取り上げずに、否定だけされても納得は出来ないじゃない?
「俺ならこうする」って意見も無しにダメだしされてもなぁ…default_modifiersすら知らないみたいだし、
単にSmartyの事知らないだけですよね?
議論では無く、相手を論破する事が目的になってませんか?
なんでこのスレにいるん?

320:nobodyさん
08/10/22 10:19:46
>>313>>311が同じに見えるって、どんだけ読解力無いんだお前は…
相反する事言っているのに、なんで>>313に対しては異論唱えないんだ。

321:196
08/10/22 11:20:52
simplateのメンテに貢献したほうがマシな気がしてきた。

>>318
そうだっけか。じゃあ使い物にならないから忘れたのかな。
いずれにせよSmarty使ってた頃は、そこまでいじる気自体が無かったな。

>>319
俺ならこうする、という意見も、具体的なコードも書いたし、
Smartyを否定する事が主目的でも無いし、Smartyのわからないところは質問した。
発言する前にきちんと流れを読んでくれ。
直近の議論は294,299,301,309,310,311だ。

>>320
> 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
> ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
> 消される恐れがあるとわかってて何故権限を与える?w

という意向と>>311との違いは状況判断の部分だけ。
俺は手動デプロイなんていちいちしたくないので、
信頼のおける優秀なデザイナーと仕事をする。
だけど、信頼のおけないデザイナーと仕事せざるを得ないなら、
>>313の言うようにするのもわかる。
前提とか本人の置かれている状況が違うだけなので、特に反論は無い。

それとも、
「デザイナーには完全な制限と束縛を課して徹底的に管理しろ」
というのが一番言いたいことなのかな?
Smartyを使ってデザイナーを檻の中に隔離するんだ、みたいな思想なのかな。


322:196
08/10/22 12:12:03
俺が何故このスレに居るのかとよく問われるので、
お言葉に甘えさせて戴き、整理させていただく。

俺が思う結論
・Smarty文法 {$name} のPHP文法 <?=$name?> に対する優位性
 →メソッドチェインはSmarty文法が少し短いが、習得コストに大差は無さそう。
 →short_open_tagを使いたくない/使えない場合はPHP文法が長くなるが同上。
・Smarty関数 {hoge} のPHP関数 hoge() に対する優位性
 →車輪の再発明をする必要が無いのが利点。
 →なので別のライブラリやヘルパーなどでも良い。
・Smartyのdefault_modifiersを使いビューのHTMLを安全にすること。
 →設計と実装は不完全だが、フレームワークに任せるという考え自体は良いかも。
・ビュー用の変数構築とビューのHTMLファイルを分ける意義
 →Smartyで実現するには{assign}{capture}{eval}を使えば可能。
 →デザイナーに変数構築をやらせる前提では二度手間に感じる。
 →プログラマーが変数構築を担当可能な所には意義があると思うし、
  default_modifiersの不具合をフォローすることも出来そう。
・Smartyはデザイナーがシステムを壊さないよう完全に束縛できるか
 →100%束縛したり管理するのは不可能そう。
 →PHPコード実行の抑止の為にテンプレートエンジンを使うのは一応有効。

何か主張されたのかも知れないと思っていること
・Smartyや他の手段を駆使してデザイナーをシステムから隔離する事自体の意義
 権限とリポジトリの管理と手動デプロイを常に徹底すれ
 →俺は優秀なデザイナーを使うかHTMLで納品させるというアプローチ。
  手動管理はめんどくさいし、たとえ客でも保守費用払わなかったらやりたくない。


323:nobodyさん
08/10/22 13:25:17
だめだこいつ…芯の通った主張が一つもないから、結局何に結論づけてるのかもわからん。
「…で?」としか言えないわ。

324:nobodyさん
08/10/22 13:32:44
default_modifiers忘れてただけとか言い訳が恥ずかしすぎるwww
結局使いこなせてないだけに一票。

「俺の環境ではSmartyが馴染まない」とか、凄くどーでもいい事なんで
こんな所でファビョってないで自作エンジンの制作作業に戻るんだ。

ここは君みたいな優秀なプログラマやデザイナが来ちゃいけない場所なんだ。
な。

325:196
08/10/22 18:45:58
>>324
一体どんな環境なら馴染むの?

326:nobodyさん
08/10/22 20:54:01
>>325
使いこなせればどんな環境でも馴染ませられるよ。
出来ないのはヘボプログラマくらいだろうね。

君は何がしたいんだい?
Smartyを使う気がないなら、こんなスレにいる必要無いんじゃないのかな?

327:質問です
08/11/02 19:17:14
PHPにて

for(i=0;i<6;i++){
echo "$_POST[$i]";
}

みたいなことをsmartyでやる場合、

{section name=i loop=5}
{$smarty.post.i}
{/section}

だと受けとれません。

$_POST[i] としてもだめなようで、
ループしてる回数を、POSTで受けとった配列のキーに割り当てるには
どう書けばいいんでしょうか?

328:nobodyさん
08/11/02 19:19:30 JfJ9McaH
あげます。

329:nobodyさん
08/11/02 20:49:20
書き方くらいちゃんと見なされ

330:nobodyさん
08/11/02 21:45:09
section.{sectionname}.index でループ回数(正確にはstartから増分される値)を取得できる。
その前にpostはassignされてるのか気になるのだが・・・

331:327
08/11/03 23:53:06 CUNAecRE
329さん、330さん、ありがとうございます。

330さんの言うとおり、section.{sectionname}.index で
ループしてる回数を受けとれるのはわかるんですが、
その現在の回数をPOSTで受けとった配列のキーにするにはどのように書けばいいんでしょうか?

単なる配列をまわすときには、

{section name=i loop=$arr}
{$arr[i]}
{/section}

でいけると思うんですが、それがPOSTの配列の場合は一回assignしないといけないんでしょうか?
$smarty.post.キー で受けとれると思い込んでいたんですが。

332:nobodyさん
08/11/03 23:56:08
マニュアル見てる?

333:nobodyさん
08/11/14 17:52:36 nqLSKBoW
すいませんが、教えてください。
php -r 'require "Smarty/Smarty.class.php";'
PHP: Error parsing /etc/php.ini on line 511
PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1
PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/usr/share/pear') in Command line code on line 1
というエラーがでます。
パスは
UNIX: "/path1:/path2"
include_path = ".:/php/includes.:/usr/lib/php/Smarty-2.6.20/libs/"
こうしているのですが、


334:333の続きです。
08/11/14 17:53:36 nqLSKBoW
chown nobody:nobody /var/www/html/smarty/templates_c/
chown 770 /var/www/html/smarty/templates_c/
chown nobody:nobody /var/www/html/smarty/cache/
chown 770 /var/www/html/smarty/cache/

<?php

require_once(SMARTY_DIR . 'Smarty.class.php');

$smarty = new Smarty();

$smarty->template_dir = '/var/www/html/smarty/templates/';
$smarty->compile_dir = '/var/www/html/smarty/templates_c/';
$smarty->config_dir = '/var/www/html/smarty/configs/';
$smarty->cache_dir = '/var/www/html/smarty/cache/';

$smarty->assign('name','Ned');

//$smarty->debugging = true;

$smarty->display('index.tpl');

?>
と持っていったのですが、どうしてエラーがでるのかわかりません。
教えてください


335:333の続きです。
08/11/14 19:12:47 nqLSKBoW
現在のエラーです。
PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1
PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/php/includes:/usr/lib/php/Smarty-2.6.20/libs') in Command line code on line 1
もう一度インストールからはじめたのですが、だめでした。
お願いします。
教えてください




336:nobodyさん
08/11/14 19:56:05
はぁ?お前は何を言ってるんだ?
/usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php
の場所にこのファイルはあるのか?

337:333の続きです。
08/11/14 19:56:14 nqLSKBoW
自己解決しました。
疲れました


338:nobodyさん
08/11/15 22:34:31
もしかして、smarty使ってローカルでテストすると、
それが完成したアカツキには、レンタルサーバーにも
smartyをアップロードしないと動かないの??

339:nobodyさん
08/11/15 22:40:28
そりゃあレンタルサーバーにsmartyがインストールされてるかどうかだろ
されてなきゃ自前でアップロードしろ

340:nobodyさん
08/11/16 14:34:54 VgwBTNK+
>>338
一体何をincludeするつもりなのか

341:nobodyさん
08/11/17 21:26:39 WEpi9J1I
smartyってのはカスタム関数が便利なんだよ
そんで、そのカスタムタグつくったから適当に使ってよ、とクライアントに投げるの。
好き嫌いは有るけど、生phpより見やすいわけね。
OK?

342:nobodyさん
08/11/18 01:32:18
>>338

たいがいのフレームワークはそうなんじゃないの

343:nobodyさん
08/11/18 06:18:46
>>341
テンプレートエンジンの理想型だよな。
PGにもデザイナにも優しい。
Smarty3で速度面が大幅改善されるっぽいので期待している。

344:nobodyさん
08/11/19 00:19:12
>>343
テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。
まあプラグインで作れることは作れるんだが

345:nobodyさん
08/11/19 04:25:55
Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?

346:nobodyさん
08/11/20 11:05:10 WBdj1Bs+
Pearでカレンダーやメニューを作成してテンプレートに出力させたいんだが
このような場合、みなさんどうしてます?

テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?


347:nobodyさん
08/11/20 11:18:04
>>346
つ{insert}

348:nobodyさん
08/12/03 23:41:44
これってDjangoみたいなテンプレートの継承ってできないの?

349:nobodyさん
08/12/03 23:58:50
>>348
簡易的なモノなら簡単に作れるから自作すれ。

350:nobodyさん
08/12/05 11:52:26 jMVHCYUr
template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。

template は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。

351:nobodyさん
08/12/05 13:30:34
cacheを混乱させそうだな。

352:350
08/12/05 14:12:47 jMVHCYUr
やめときます。
おとなしく対応させて作ります。

ありがとうございました。

353:nobodyさん
08/12/05 20:37:51
>>350
コンパイルID指定すればOK
URLリンク(www.smarty.net)

354:nobodyさん
08/12/06 01:16:24
ほうそんな機能が・・・
メリットがまったく思いつかないけど覚えておきます

355:nobodyさん
08/12/06 01:36:14
いやわかれよw

356:nobodyさん
08/12/07 09:29:45
もー!ヽ(`Д´)ノ
sfCutString:5とかにすると5文字表示とかってあるよね?
これって反対に、後ろからの5文字を削除とかって出来ないの?
教えてくださいな(´・ω・`)

357:nobodyさん
08/12/08 09:59:13
ないものはつくるんだ

358:nobodyさん
08/12/08 16:34:14
ついでに車輪も作っとけ

359:nobodyさん
08/12/08 23:18:30
あってもつくるんだ

360:nobodyさん
08/12/09 12:27:40
車輪の再発明は偉大!

361:nobodyさん
08/12/22 09:45:58
テンプレートエンジンの選択で迷ってるんですが、
smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか?
人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?

362:nobodyさん
08/12/22 13:12:51
smarty以外を選択する理由がない

363:nobodyさん
08/12/22 13:56:20 fwOoSy8e
自作する。
多分テンプレート変数を置換する以上のことはできないだろうけど

364:nobodyさん
08/12/31 21:47:49 8KFb7g3b
今作ってるサイトで、smartyが動かないんですが何が原因と考えられるでしょう?
動作させてる環境は2つあり、動かないのはそのうち一つだけです。
Smarty.class.phpへのパスは相対できちんと通していて、同じファイルを
その2つにUploadすると片方でのみ動いてくれません
もちろんそちらでもphpは動いてるんですが、、

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

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

また、せめてassignがちゃんと成立してるかだけでも知りたいですがどうしたら
いいでしょうか?  ご意見よろしく御願いします

365:nobodyさん
08/12/31 21:49:40
>>364
error_reporting
display_errors

366:nobodyさん
08/12/31 23:02:30
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
URLリンク(ri)<)■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
URLリンク(jb)<)

367:nobodyさん
08/12/31 23:44:19
>>365
ありがとうございます、解決しました

368:nobodyさん
09/01/02 21:57:29 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}

一応ちゃんと動いてますが、もっときれいで効率的な書き方はないでしょうか?

369:nobodyさん
09/01/02 22:04:07
>>368
URLリンク(www.smarty.net)

370:nobodyさん
09/01/02 23:18:35
>>369
横ですがこれのselectedって現在時刻じゃないですか?


371:nobodyさん
09/01/03 01:08:00
>>369
こんなのがあったんですね、ありがとうございました。

372:nobodyさん
09/01/04 08:20:15 S9BZj0MW
フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき

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

<input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし
<input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の
inputの表示がおかしくなるし、、
ご意見よろしく御願いします

373:nobodyさん
09/01/04 08:53:47
セッション

374:nobodyさん
09/01/04 17:11:37
>>373
ありがとうございます 解決しました

375:モンピー77
09/01/05 09:16:41 mGW0zuF3
Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを
しているのですが

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

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

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



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

>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。

377:nobodyさん
09/01/07 10:21:31 nbhiW1pd
>>375
そもそもPHP側ですませておく。
なんのために分離してるのかと

378:nobodyさん
09/01/07 11:39:38
サニタイズはビュー側でもOKだと思うが。

379:nobodyさん
09/01/07 12:32:40
サニタイズ(笑)

380:nobodyさん
09/01/08 12:21:51
>>379(笑)

381:nobodyさん
09/01/08 13:16:48
ん?反論できなくて涙目?w

382:nobodyさん
09/01/08 14:37:59 /Ay52XkK
>>381
お前が暇人なだけだろw

383:nobodyさん
09/01/08 16:01:24
>>378
誰も不可とは言ってないと思うが

384:nobodyさん
09/01/08 16:03:12
>>382
必死だな

385:nobodyさん
09/01/09 02:14:26
>>383
>>377ではPHP側でやれと書いてあるようにしか読めないんだがww

必死すぎて恥ずかしいな。

386:nobodyさん
09/01/09 13:26:05 dxaSQaiQ
>>385
必死厨必死だな。

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


387:nobodyさん
09/01/09 14:19:53
「サニタイジング」じゃねーの?

388:nobodyさん
09/01/10 01:02:19
>>386
スマン。日本語でお願い出来るか?

どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?

389:nobodyさん
09/01/15 22:45:35 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させています

390:389
09/01/15 23:24:27 iReMhog8
>>389に書いたファイルをrequireした.phpで、

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

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

どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?

391:nobodyさん
09/01/15 23:29:20 iReMhog8
ごめんなさい、書き間違えです

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

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

また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)

392:nobodyさん
09/01/15 23:35:13
compile_dir,cache_dirへの書き込み権限はありますか?

393:nobodyさん
09/01/16 00:01:11 7rtqusgx
>>392
どうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした

そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ

394:389
09/01/16 02:58:12
原因がわかりました! .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" "URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)" lang="ja" xml:lang="ja">
って感じにXML宣言のあるxhtmlだったんですが、この中では<!-- -->は使えないって言うので
上記の形(<![CDATA[ ]]>)にしたところエラーになりました

1)XML宣言
2)携帯用サイト(外部CSS使えない→1)のせいでコメントは<![CDATA[ ]]>にならざるを得ない)
3)Smarty
という組み合わせは実用不可能というお話でした

395:nobodyさん
09/01/16 06:34:07
>>394
URLリンク(www.phppro.jp)

396:nobodyさん
09/01/16 14:02:35
デリミタの変更はSmarty最初の課題。

397:nobodyさん
09/01/16 23:45:16
CSSは外部でいいやって思ってたけどこういう場合もあるんだな。
Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。

398:nobodyさん
09/01/19 11:16:42 RBlPIEnm
通常のHP案件でSmartyを常用していたのですが、
みんクエのようなRPGタイプのブラウザゲームを制作予定です。
常に値が変動して最新の情報を表示しないといけないケースで、
Smartyを使用するのはナンセンスでしょうか?

399:nobodyさん
09/01/19 11:19:59
ケースバイケース

400:nobodyさん
09/01/19 15:19:03
cache切っても充分使えるしな。
重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・


401:nobodyさん
09/01/20 18:40:01
PHP側で連想配列のキーにピリオドを含む使った

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

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

{$foo[bar.baz]}

はだめだったんだけど、何か他の表現方法あるのかな?

402:nobodyさん
09/01/20 20:16:27
つマニュアル

403:nobodyさん
09/02/03 21:30:12
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"}}

404:nobodyさん
09/02/03 21:32:58
なんで二重括弧なの?

405:nobodyさん
09/02/03 21:41:22
>>404

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

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

ちなみに括弧ひとつにしても同じエラー出ます。

406:403
09/02/03 21:51:04
環境書き忘れました

CentOS 5.2 Kernel 2.6x
PHP 5.1.6

preg_matchでSmartyのタグ探して処理させてるから
タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。

407:nobodyさん
09/02/03 21:53:11
試してみたいから再現できるコード出してくれ

408:403
09/02/03 22:23:57
<?php

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

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

?>

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

{{$test}}

###こんな単純なコードさえエラー出ます###

409:403
09/02/03 22:24:52
間違えました^^;

<?php

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

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

?>

410:nobodyさん
09/02/04 01:57:17
当然ながら私の環境では再現しません

411:403
09/02/04 19:44:57
既にSmartyが実働してるサーバからSmarty関連のファイルを引っ張ってきて
インストールしたら正常に動きました。
公式の最新バージョンはバグ有りなんですかね?
何はともあれ、お騒がせしました。

412:nobodyさん
09/02/04 22:30:27
自分の環境で試してくれる回答者放置とか最悪な質問者だな

413:403
09/02/05 07:13:36
大変失礼しました。
わざわざ確認していただき、ありがとうございます。
お礼?になるか分かりませんが、問題のあった方のSmartyをアップしておきます。
libsの中身を入れ替えるだけで多分再現できると思います。

URLリンク(www1.axfc.net)


414:nobodyさん
09/02/05 08:52:10
問題のあったファイルがお礼とかw

415:nobodyさん
09/03/03 15:33:16
値がある場合はstring_formatの%0.1,なかった場合は にしたいんだけど
{var|default:' '|string_format:'%0.1'}
だと値が無い場合には全て0.0になってしまうし、
{var|string_format:'%0.1'|default:' '}
だと値が無い場合にnoticeが出てしまって両立できないんだけど、
どうしたらいいかな?

416:nobodyさん
09/03/03 15:34:02
フォーマットのf抜けてた

417:nobodyさん
09/03/05 19:41:11
CakePHP1.2にSmartyView入れて使い始めてみたんだけど
$form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま?

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

モデルだけ指定すると出力されるんだが、、

418:nobodyさん
09/03/06 03:16:30
>415
register_modifier 使って関数自作すればいいんじゃない?

419:nobodyさん
09/03/12 20:22:12
昨日テンプレートエンジンというものを知って調べたが、こんなもん速度と品質犠牲に使う本気で奴バカすぎ。ヒアドキュメントで十分すぎ。

420:nobodyさん
09/03/13 10:39:43
そうだよ?

421:nobodyさん
09/03/13 10:48:04
PHP自体がテンプレートエンジンであり
速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを
419は知らないのだった

422:nobodyさん
09/03/13 11:05:13
Smartyってめっちゃ便利やな!
PHP案件は全部これ使って開発してるぁるょ!

423:smarty初心者
09/03/16 14:02:13 UpVqDdxv
Fatal error: Call to a member function assign() on a non-object in・・・*.php on line 32
というエラーがでるのですが、どういう意味なのでしょうか?
教えてください。

424:nobodyさん
09/03/16 15:28:49
>>423
ggrks

425:nobodyさん
09/03/16 17:22:30
変数名が違うんだろ

426:nobodyさん
09/03/19 02:15:19
そのレベルだとSmartyどころかphp初心者だろ……

427:nobodyさん
09/04/12 10:19:11 tJ4UxLsE
ヤッターマン公式サイトはSmartyを使っているようだ。
URLリンク(www.ytv.co.jp)

428:nobodyさん
09/04/22 01:10:23 rBHnGmhI
Smartyのファイル名が
「%%45^45E^45E480CD%%index.tpl.php」

と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか?
%%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。
しかし、それ以外の数字と記号の意味がわかりません。

429:nobodyさん
09/04/22 01:44:07
Smarty::_parse_resource_nameに書いてある

430:nobodyさん
09/04/23 02:53:59 ai/dLDOC
あいまい検索みたいな事って出来るのでしょうか?

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

opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、
preg_matchなどの正規表現でファイル名を調べる方法もありますが、
もう少し短い手順で、簡単に調べられる方法はないでしょうか?

431:nobodyさん
09/04/23 02:55:05
430です。すみません、誤爆です・・。質問スレに書きます。


432:nobodyさん
09/05/03 08:41:04
template_cの中身を見たら
こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php

433:nobodyさん
09/05/03 12:28:14
コンパイル後のテンプレートファイル

434:nobodyさん
09/05/03 14:56:11
なるほど
消しても問題なさそうですね?
ありがとうございます

435:nobodyさん
09/05/03 17:01:11
( ゚д゚)ポカーン

436:nobodyさん
09/05/04 18:34:03 bGJWbWfu
MTでPHPを使う部分にSmartyを使っているみたいなのですが、
MTのテンプレートを見ると <mt: >な独自タグを使っています。
Smartyで独自タグって定義できるのでしょうか?

437:nobodyさん
09/05/05 03:15:12
>>436
できる(`・ω・´)

438:nobodyさん
09/05/05 21:30:24
HTMLファイルだって定義するぐらいはできるんだぜ

439:nobodyさん
09/05/06 01:41:19 T5mYjMeP
>>437-438
どこの設定を変更したら出来るのですか?


440:nobodyさん
09/05/06 07:14:42
>>439
断る(`・ω・´)

441:nobodyさん
09/05/09 23:09:48
www.smarty.netにつながらないんだけど俺だけ?

442:nobodyさん
09/05/10 20:05:32
>>441
落ちてるね。こういうサイトはミラーが必要だとおもいまする。

443:nobodyさん
09/05/12 01:20:58
一生落ちてればいいと思う。

444:nobodyさん
09/05/13 11:19:30 Q3CLDrVp
{insert}
で指定する関数名に
クラスのメソッドを指定する方法はありませんか?

445:nobodyさん
09/05/13 13:46:20
クラスのメソッドを指定できる関数をつくればいいんじゃあ

446:nobodyさん
09/05/13 21:18:42
初心者で悪いんだが

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

class Hoge {
  var piyo;

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

    require_once 'view.tpl';
  }
}

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

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


テンプレートとしての機能ってこれじゃ駄目なの?

447:nobodyさん
09/05/13 21:46:03
>>446
こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要

448:nobodyさん
09/05/14 00:07:02
>>447

イミフ

449:nobodyさん
09/05/14 02:00:08
POSTで送られたデータを無加工で出力するなって事だ
そりゃそうと、普通にメソッドコール出来たと思ったけど

450:nobodyさん
09/05/14 03:34:09
>>446
それでも問題無い場合もあるよ。
ケースバイケース。

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

善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。

451:nobodyさん
09/05/14 03:40:17
>>450
>>447

452:446
09/05/14 14:32:58
>>447
ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?


>>450
とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。


453:nobodyさん
09/05/14 14:45:29
Smartyならデフォルトで適用するフィルターを設置出来る
escapeを入れたら今回記述されたテンプレートでもちょっと安心

とりあえず、OpenPNEはやってた
興味があればソース眺めると良いかと

454:nobodyさん
09/05/14 17:49:28 A4v4Hdy/
>>453
質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?

見れるんなら見たいんですけど。

455:nobodyさん
09/05/14 18:51:12
HTMLソースじゃないぞ

456:nobodyさん
09/05/14 20:10:22
>455
smartyでいうところのコンパイルされていないファイルって、見れるんですか?
だとしたら他人事ではないんですけど。

457:nobodyさん
09/05/14 21:02:38
> それがsmarty経由でつくられてるもの

> それ
ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど

458:nobodyさん
09/05/14 21:26:13
>457
あ、そういうことでしたか。
そして、ダウンロードもしてみました。
他の人がつくったsmartyのテンプレートファイル初めてみた。
勉強になるな〜

459:nobodyさん
09/05/14 21:49:19
どんな風に勉強になった?

460:nobodyさん
09/05/14 23:02:27
({ をデリミタタグとして使っているところとかです。

461:nobodyさん
09/05/16 17:50:14
MTもSmarty使っているから、参考になると思うよ。

ただ、OpenPNEの方がわかりやすいね。
なんか日本人的な書き方のような気がする

462:nobodyさん
09/05/22 09:35:19
Smartyの順序って
「PHPが苦手だからSmartyを使おう」
それとも
「PHPができるからSmartyでさらに上を目指そう」
のどっちなんですか?

わかる人からするとアホな質問かもしれませんが、
PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。

463:nobodyさん
09/05/22 10:07:23
SmartyはPHPの単なるライブラリだよ・・・?

464:nobodyさん
09/05/22 10:22:59
Smartyの用途はスレの上のほうで話題になってるじゃん
苦手だからとか上を目指そうとかそういう観点ではなく

465:462
09/05/22 11:11:41
>463,464
ご返答ありがとうございます。

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

要は「工具セット」ってことですかね。
上の方で延々と行われた議論は
「使う工具(smartyの機能)なんか自分で作ればいい」派と
「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。

466:nobodyさん
09/05/22 11:43:37
smarty使ってMVCのviewを強化したい派(利便性高・コスト高)と
php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4988日前に更新/245 KB
担当:undef