[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/08 11:25 / Filesize : 245 KB / Number-of Response : 924
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:nobodyさん [2008/02/02(土) 00:21:09 ID:6cKcKeTp]
まぬあるwww.smarty.net/manual/ja/

242 名前:nobodyさん mailto:sage [2008/10/13(月) 10:28:16 ID:???]
Smartyがデフォルトのテンプレートエンジンになっているフレームワークってありますか。

243 名前:nobodyさん mailto:sage [2008/10/13(月) 11:11:34 ID:???]
>>240
>・デザイナのコードがシステムに混入しない

いくらなんでもこれは冗談でしょ。

244 名前:nobodyさん mailto:sage [2008/10/13(月) 11:17:06 ID:???]
>>242
普通は自分で選ぶ

245 名前:nobodyさん mailto:sage [2008/10/13(月) 11:31:25 ID:???]
>>240
>→ PHP単体では出来ない。別個にエンジンを作る必要がある。
>  キャッシュ、フィルタ、プラグイン、コンフィグをPHP単体でどうやって書くんですか?
PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。

>→ 少なくとも独自エンジンやPHPを覚えさせるより、簡単で学習環境も整っている。
んなわけない。なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。

>→ 同様の機能(キャッシュ、構文、プラグイン等)を実際に実装して比較してみたかい?
>  スレ頭のピュアコードより5倍遅いとかいうのを真に受けてるだけだろw
>ビジネスロジック層と比べれば軽い処理なので、システム的には対した差はでねーよw
おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。



246 名前:nobodyさん mailto:sage [2008/10/13(月) 11:38:35 ID:???]
>・Smartyのテンプレートでエラーがあった場合、その行番号がずれている
>→ ずれてないよww エラー英文すら読めないレベルかwwww
>  そもそもPHPのテンプレートエラーはシステムに障害をきたすし、論外だ。

「<p>{$var}</p>」と1行だけ書いたテンプレートを用意し、$smarty->assign('var', new MyClass()); してから表示させるとこんなエラー。

PHP Catchable fatal error: Object of class MyClass could not be converted to string in /tmp/templates_c/%%C3^C35^C35E7879%%sample1.tpl.php on line 5

1行目なのに、コンパイルされたファイルの5行目でエラーとなっている。
これでどこがずれてないというの?おまえほんとにSmarty使ってるの?
> エラー英文すら読めないレベルかwwww
とかいうまえに、行番号ぐらい読めるようになろうぜwwww 数字の読み書きなら教えてやるぞwwww

>→PHP単体でなく、Smartyを使う理由?
>・テンプレートエンジンとして必要な機能を備えている
必要な機能はPHP自体がもっている。

>・拡張がし易い
>・デザイナのコードがシステムに混入しない
これはダウト

>・PHPテンプレートエンジンとしてはメジャーで扱える人が多い
PHPそれ自体はSmartyよりはるかにメジャー。PHPなら素人デザイナーでも基本は知っている。
わざわざSmartyを学習させる意味がわかんない。


247 名前:nobodyさん mailto:sage [2008/10/13(月) 11:41:35 ID:???]
>>240
>僕らは楽して堅牢なシステムを作るためにSmartyを使ってるんだ。
>SymphonyとCodeIgniterの利点を教えて欲しいな(^o^
いまどきこんなこと言うのは、フレームワークを使ってないということか。
あるいはオレ様フレームワークか。
これでオレ様フレームワークつかってたら笑うなー。


248 名前:nobodyさん mailto:sage [2008/10/13(月) 12:01:54 ID:???]
>>246
要するに、「うちのデザイナはPHP理解できるからSmartyいらないんだぜ」ってことな。
前提としてる環境が違うんだからいつまでも平行線なんだろうね。他にも摺りあわない理由はありそうだが。


249 名前:nobodyさん mailto:sage [2008/10/13(月) 12:27:09 ID:???]
自社おかかえのデザイナがいるならどうでもいい話だろうが
外注に出す場合、まだsmartyの文法のほうが通じやすいと感じるがなー

既にsmartyを知ってるデザイナもちょこちょこいるし
知らない場合でもマニュアルの「II. テンプレートデザイナのための Smarty」だけ読んどいてで済む
さすがにPHPを覚えてくれとは言えない

250 名前:196 mailto:sage [2008/10/13(月) 14:37:10 ID:???]
やっとフレームワークの話が出てきたな。
名前もうまく書けてないレスが多いが、正しくはsymfonyと言う。

>>236
> Smartyを否定するだけの根拠を持ち出さないから素人扱い

Smartyを否定するつもりは無いよ。
「否定したら玄人」とか、どんな中二病だよw

まず前提として、Smartyの是非を議論する場合、
Smartyありきではなく、Smartyと実装Aと実装Bは対等に比較されるべきなんだよ。

>>237も同じで煽りに内容が無い。




251 名前:196 mailto:sage [2008/10/13(月) 14:56:46 ID:???]
さて本題だけど

> 196が良いって、グローバル変数かつ、ショートタグかつ、エスケープ無しがView的にOKって事かい?

その考え自体がモダンじゃないんだよな。

<?=$name?>を実行するファイルの先頭に書いたら、何が表示される?
Noticeが出るだけだよね(PHP4だと出ないかも)。当たり前のことだ。

「PHP単体」という言葉自体がおかしくて、(SmartyだってPHPだしな)
<?=$name?>を実行するためには、まず$nameに値を代入する必要があるんだよ。
ロジックから$nameに値を代入する過程が必ずあり、そこで、
スコープの決定と、エスケープなどのビュー用の加工処理が行われる。

ちなみに、スコープの決定条件は、196とSmartyで等価だよ。
パーサのメソッドの中でincludeしたら、スコープはそのメソッドの中になる。

212のコードの欠点は、ビュー用の加工処理が、
本来HTMLであるべきファイルの中で行われることだ。Smartyも同様。

まあ、俺はSmartyを否定したいのではなく、
別の選択肢を提示して、それに対する意見を聞きたかっただけなので、
とにかくSmartyを褒めてくれなきゃヤダヤダ、という話なら正直困る。


252 名前:196 mailto:sage [2008/10/13(月) 15:09:46 ID:???]
>>248-249
DreamWeaverでしかページを作れないへぼデザイナーと仕事をするとか、
外注には出すがソースレビューしたくないという場合は、
大人しくWeb製作として依頼して、コーディングは自分でやった方がいいとおもう。

結局Smartyだろうが何だろうがビューはビューなので、
MVCが理解出来ない人にビューを作らせようとしてもうまくいかんし、
テストとデバッグは結局やらなきゃいけないんだよ。

デザイナーから見たら、実際どう描画されるかわからない記号の羅列を
マニュアルと変数名の指示書どおりにHTMLに書き込んでみたりして、
「たぶんこれで出来たと思うんですがどうでしょうか」と言わないといけない時点で、
それはプログラマー仕事としての負荷を被っているわけだよ。
実質的に、分業にもなっていなければ、責任の切り分けにもなっていない。

Smartyの良くないところをあえて挙げるならば、
「Smartyを使えば、へぼデザイナーとへぼプログラマーが協力出来る」という幻想を
蔓延させた事かも知れんねw


253 名前:nobodyさん mailto:sage [2008/10/13(月) 15:10:55 ID:???]
>>251
おまえさんはSmartyを否定してるんじゃなく、テンプレートエンジンを否定してるんだろ?
なら選択肢なんかじゃなくて具体的にどのように実装すべきかを提示してみてくれ

254 名前:196 mailto:sage [2008/10/13(月) 15:24:07 ID:???]
>>253
「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>229はそれを否定していたので、そこからして論外なのだ。

テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
まずそれを考えなおして、表現してみてくれ。

「必ずキャッシュ機能が無いといけない」とか
「PHPとして実行できてはいけない」とか
そういう特殊な前提があるんなら、それを踏まえないとお前さんの役には立てんよ。

俺の要件に則って具体的な実装を述べて良いなら、
196こそが「テンプレートファイル」の答えなのだ。
$nameに何をどこでどうやって代入すればいいのかについては、>>251に書いた。

そうそう、ディスパッチャの存在が前提になるんだ。そこはSmartyと同じだな。


255 名前:nobodyさん mailto:sage [2008/10/13(月) 15:33:22 ID:???]
>>254
いや、だからな
>ロジックから$nameに値を代入する過程が必ずあり、そこで、
>スコープの決定と、エスケープなどのビュー用の加工処理が行われる。
の具体例を提示してみてくれって話なんだが

256 名前:nobodyさん mailto:sage [2008/10/13(月) 17:04:37 ID:???]
ぐだぐだ言い分けしてないで、
Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。

PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
使う事を否定しないが、君なりの構築術があるわけだろ?

それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。

257 名前:nobodyさん mailto:sage [2008/10/13(月) 17:05:33 ID:???]
単にSmartyに馴染めなかった、Smarty使ってる人うぜぇ!
ってだけならすれ違いだから、よそで最高のテンプレートエンジンを開発してくれよな!

258 名前:nobodyさん mailto:sage [2008/10/13(月) 17:10:46 ID:???]
>>254
>「PHPはテンプレートエンジンとしての要件を満たす」というのが196の主張だ。
>>>229はそれを否定していたので、そこからして論外なのだ。

うむ、同意だな。PHPはそれ自体でテンプレートエンジンとして使える。

> テンプレートエンジンとしての要件みたいなものを脳内で想像してるなら、
> まずそれを考えなおして、表現してみてくれ。

テンプレートエンジンとしての要件は、ビューを分離できること、でいいと思う。

>「必ずキャッシュ機能が無いといけない」とか

キャッシュ機能はビュー層が単体で持つべき機能じゃないよな。
もつべきならコントローラ層だ。



259 名前:nobodyさん mailto:sage [2008/10/13(月) 17:18:03 ID:???]
>>256
>ぐだぐだ言い分けしてないで、
>Smartyのここがだめ、俺ならこう書く!ってのをサンプル出せや。
前スレ読め。とっくに出てる。

>PEARとかライブラリとか出してきてる時点で、ピュアPHPじゃねーし。
はあ?ライブラリを使っちゃだめとか、頭どうかしてんじゃねーの。
Smartyだってライブラリだろ。なんでSmartyはよくて、他はだめなの?ばかなの?
それにPHPだけで書かれたライブラリはpure PHPだろ。言葉の意味間違ってるぞ素人さん。

>使う事を否定しないが、君なりの構築術があるわけだろ?
>
>それを示せよ。何と比較してダメなのか、要所要所わかりやすく上げてくれ。
だから前スレよめって。>>193以降全部読め。



260 名前:nobodyさん mailto:sage [2008/10/13(月) 18:24:20 ID:???]
>まあ、俺はSmartyを否定したいのではなく、
別の選択肢を提示して、それに対する意見を聞きたかっただけなので、

>>193をそう解釈しろと言われても困る




261 名前:nobodyさん mailto:sage [2008/10/13(月) 18:40:09 ID:???]
>>256

>何と比較してダメなのか
→ PHPと比較して。

>要所要所わかりやすく上げてくれ。
>>238からのコピペ。
・SmartyでやろうとしていることはPHPでできる
・Smartyは学習コストがかかる
・Smartyは遅い
・Smartyのテンプレートでエラーがあった場合、その行番号がずれている


で、Smarty擁護派が>>240で反論してるけど、Smarty反対派が>>245-246で再反論してて、今はSmarty擁護派の再々反論待ち。
特にエラー行番号についての見解を期待。

262 名前:nobodyさん mailto:sage [2008/10/13(月) 21:39:53 ID:???]
何が見解だよww

>>エラーについて
君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
Smarty自体の処理ははあっておりコンパイルも通っている。
コンパイル後のPHP実行時に、ストリングに変換出来ないクラスをそのままassignして表示してるからPHPがエラー出してるんだろ。
Smarty以前の問題だ。素人レベルのミスだ。

行が違う!とか行ってるけど、
コンパイル後のクラスのライン5みりゃ1発で原因わかるよね。

PHP Catchable fatal error: Object of class MyClass could not be converted to string in /tmp/templates_c/%%C3^C35^C35E7879%%sample1.tpl.php on line 5


Smatyでのエラーは以下のように正しく表示される。

Fatal error: Smarty error: [in sample.tpl line 4]: syntax error: unrecognized tag 'test' (Smarty_Compiler.class.php, line 590) in /xxxx/Smarty.class.php on line 1092


263 名前:nobodyさん mailto:sage [2008/10/13(月) 21:48:53 ID:???]
>PEARにいくらでもライブラリあるけど。プラグインは普通に関数でいいだろ。コンフィグも普通にPHPファイル。
ライブラリを組み合わせるのもSmarty使うのも同じだと思うが?PEARの優位性は何だろね。
関数はグローバル関数かい?w

>なんでPHPよりSmartyのほうが簡単で学習環境も整っているといえるんだよ。
逆もしかり。PHPの方が覚える事も少ないし、文法も完結だからだ。
何度も言うがショートタグが使えない現場は多い。

>おまえこそほんとに測定したのかよ。明らかにSmarty遅いじゃねーか。
したよ。他のエンジンと比べて大差ねーよ。
View処理が 5 : 10 だとしてもビジネス処理に 50 かかれば 55 : 60 程度の差って事だよ。

>エラーコード
上に書いた。PHPの変数の使い方から出直してこい。

>必要な機能はPHP自体がもっている。
PEARとか別のライブラリや、スコープ確保の為にクラス化、関数化は必要だよね?
そうされた一式がSmartyって事なんだが。

>拡張がし易い
プラグイン、フィルタ、リソース等、かなり楽に拡張できるが?

>PHPそれ自体はSmartyよりはるかにメジャー
何度も言わせるな。「PHP単体」じゃ無理だろ。同じ事実現する為のライブラリの学習コストを考えろ。

>フレームワーク
cake、Zend、CodeIgniter使ってる。全部ViewはSmarty拡張クラス組込済。

264 名前:nobodyさん mailto:sage [2008/10/13(月) 22:13:18 ID:???]
>別の選択肢を提示して、それに対する意見を聞きたかっただけなので、

解ったから、具体的に選択肢を提示してくれよ。

ショートタグで値を表示するだけじゃ甲乙つけられないだろ?
ループ、エスケープ、インクルード、条件分岐が入ったViewテンプレートサンプルを上げてくれ。
それを見て「これならSmarty使う必要は無いな」と思わせてくれよ。

俺が出すサンプルは以下だ、
「ヘッダ、フッタを合成して配列の中身をテーブルに出力するだけの簡単な処理」

265 名前:nobodyさん mailto:sage [2008/10/13(月) 22:16:06 ID:???]
===================================================
 PHP + Smartyで記述
===================================================
{include file="header.tpl" title="ページタイトル"}
<table>
<tr>
{foreach from=$rows item=row}
{strip}
<td>{$row.time|date_format:"%T "|default:"00:00:00"}</td>
<td>{$row.name|escape}</td>
<td>{$row.value|escape|default:"DEFAULT"}</td>
{/strip}
{/foreach}
</tr>
</table>
{include file="footer.tpl"}


266 名前:nobodyさん mailto:sage [2008/10/13(月) 22:16:56 ID:???]
===================================================
 PHP単体で記述
===================================================
<?php
$title = "ページタイトル";
include_once "header.php";
?>
<table>
<tr>

<?php foreach((array) $rows as $row) { ?>
<?php ob_start();?>
<td><?php echo $row["time"] ? strftime("%T", $row["time"]) : "00:00:00"; ?></td>
<td><?php echo htmlspecialchars($row["name"]);?></td>
<td><?php echo ($row["value"]) ? htmlspecialchars($row["value"]) : "DEFAULT" ?></td>
<?php echo preg_replace("/[\r\n]/", ob_get_contents()); ?>
<?php ob_end_clean(); ?>
<?php } ?>
<tr>
</table>
<?php include_once "footer.php";?>


267 名前:nobodyさん mailto:sage [2008/10/13(月) 22:17:35 ID:???]
PHP側はこれでも処理が全然足りない。
インクルードファイルの管理や、ローカルスコープ化処理、エラー処理、etc。
結局細かい処理を考えるとSmartyと同程度までの実装は欲しくなってくる。(文法はおいておいて)
そこをライブラリや関数で補うって事なんだろうけど、
実際にそうした場合のテンプレートコードを上げてみてくれ。


268 名前:nobodyさん mailto:sage [2008/10/14(火) 01:17:27 ID:???]
>>262
>君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
>Smarty自体の処理ははあっておりコンパイルも通っている。

あほかお前、なんでSmartyのエラーかPHPのエラーかをここで区別する必要があるんだ?
エラーといわれた場所の行番号が違っていることが問題なんだろうが。
Smartyのエラーなんて、ただの構文解析でのエラーしかでねーじゃんか。
実行時のエラーには無力なうえ、変な行番号ででるんじゃ、使い勝手悪すぎだろ。
PHPなら実行時のエラーも行番号がずれることはない。こんなのあたりまえ。
実行時エラーを変な行番号でしか報告できないSmartyを必死に擁護するほうがどうかしてる。
「Smartyエラー」ってなんだよ、構文解析でのエラーじゃないからSmartyのせいじゃありませんって、アホか。
エラーの種類に関係なく、行番号がずれるのが問題なのに、
構文レベルエラーと実行時エラーを区別する必要がどこにある。


269 名前:nobodyさん mailto:sage [2008/10/14(火) 01:52:38 ID:???]
>>268
デザイナとプログラマの分業がなされているとき
構文エラーはデザイナ責任、実行時エラーはプログラマ責任。
PHPエラーがでたらプログラマが対処すりゃいい。

そもそも、>246のエラーは文字列に変換できないクラスをassignしないもしくは、
assignしたものが直接扱えない変数であることをデザイナに伝えていれば起きない。

270 名前:nobodyさん mailto:sage [2008/10/14(火) 02:36:44 ID:???]
>>268
アホはお前だろw
実行時エラー制御したいなら、Smartyに限らずassign時点で型判別しろよ無能w
それこそSmartyとかPHP以前の話だよ。


>エラーの種類に関係なく、行番号がずれるのが問題なのに、
ずれてねーよw コンパイル後のソースでの行数で、ご丁寧にファイル名まで出てるじゃん。
スクリプト言語しか触った事無い素人には、実行時エラーのデバッグは難しいのかもしれんが、
普通のPGなら上のエラーコード読むだけで、エラー内容もエラー位置も特定出来るわ…

むしろ構文エラーじゃなくて、実行時エラーだって理解出来て問題識別しやすいわw


無能を晒してないで、
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。





271 名前:nobodyさん mailto:sage [2008/10/14(火) 02:40:48 ID:???]
こういう無能がdisplay_errorsをonにしたまま本番公開しちゃって恥ずかし思いするんだろうねぇ('_`

272 名前:nobodyさん mailto:sage [2008/10/14(火) 03:44:58 ID:???]
>>268じゃなくて初心者だけどつくってみたー
よろしくお願いしまーす

<? // きょうつう(init.php)
define('DS', DIRECTORY_SEPARATOR);
define('TEMPLATE_DIR', 'tpl');

function include_template($name, $vars) {
// てきとうにかんすうをていぎします
function h($str){ return htmlspecialchars($str); }
function strip($str){ return preg_replace('/[\n\r]/', '', $str); }

extract($vars);
include TEMPLATE_DIR . DS . $name;
}
?>

273 名前:nobodyさん mailto:sage [2008/10/14(火) 03:46:43 ID:???]
<? // こんとろーら
require_once 'init.php';
$rows = array(
array('time'=>time(), 'name'=>'foo', 'value'=>1),
array('name'=>'bar')
);
include_template('tpl.php', compact('rows'));
?>

<? // てんぷれーと(tpl.php) ?>
<? $title = 'ページタイトル'; ?>
<? include 'header.php' ?>
<table>
<? foreach((array) $rows as $row): ?>
<? ob_start('strip') ?>
<tr>
<td><?=h ($row['time'] ? strftime('%T', $row['time']) : '00:00:00') ?></td>
<td><?=h ($row['name']) ?></td>
<td><?=h ($row['value'] ? $row['value'] : 'DEFAULT') ?></td>
<tr>
<? ob_get_flush() ?>
<? endforeach ?>
</table>
<? include 'footer.php' ?>

でもsmartyのメソッドチェインてきなやつはよいとおもいます

274 名前:nobodyさん mailto:sage [2008/10/14(火) 04:01:40 ID:???]
>>268
>エラーといわれた場所の行番号が違っていることが問題なんだろうが。

言いたいことはわかる。
でも、関数なんだから当然だろ。
引数が不適切なせいで、呼び出し先でエラーが出た場合を考えればわかりやすい。


275 名前:196 mailto:sage [2008/10/14(火) 09:31:04 ID:???]
いや、行番号の話はSmartyとsymfonyを混同した人の指摘?みたいだし、
エラーを追いかけたかったら良いデバッグツールを使えばいいと思うぞ。
PHP標準でスタックトレースも変数の中身も出せるわけだし。

>>263
SimplateいいぞSimplate。暢気な人には魅力がかわらんかも知れんが。
俺が考える「Smartyをわざわざ導入する際のデメリット」が結構解消されてる。
まあ、「SmartyはPHPで書かれている」という大きいメリットは殺ぐのだけど。

>>265-266はMVCを理解してない人の例という意味では良いサンプルだな。
>>271-273ありがとう。俺もせっかくなので一つ案を出す。


276 名前:nobodyさん mailto:sage [2008/10/14(火) 10:01:19 ID:???]
おはよう。

>>275
Simplateいいよね。 客先都合で使えない事が多くて泣けるけど。
>>265-266はMVC的にはどう書くのが正解?

277 名前:196 mailto:sage [2008/10/14(火) 10:20:12 ID:???]
レス番間違えた。272-273、素晴らしいコードをありがとう。
議論としては蛇足になってしまうかも知れないんだけど、
俺が個人的に>>212より>>196が良いと思うと言った部分を紹介します。

特徴(一長一短?)は、テンプレートファイルの可読性が高く、隠蔽されていること。
利点はHTMLからの移植性と習得の容易さ。
欠点は配列操作のコストを二重にかけていること。

改行が多いと叱られたので再挑戦。

>>276
>>272-273のように書くのが正解だと思う。
少なくとも、MとVとCがそれぞれどのファイルかわかるでしょ。


278 名前:196 mailto:sage [2008/10/14(火) 10:21:06 ID:???]
require >>272
// function d($value, $default) { return isset($value) ? $value : $default; }

<?php // メソッドチェイン?をビューと切り離す(tpl.php)
$title = 'ページタイトル';
$disp_rows = array();
foreach((array) $rows as $row) {
$row['time'] = $row['time'] ? strftime('%T', $row['time']) : '00:00:00';
$row['value'] = $row['value'] ? $row['value'] : 'DEFAULT';
array_walk($row, 'h');
array_walk($row, 'strip');
$disp_rows[] = $row;
}
include 'header.php';
include 'body.php';
include 'footer.php';

<? // てんぷれーと(body.php) ?>
<h1><?=$title?></h1>
<table>
<? foreach($disp_rows as $row): ?>
<tr>
<td><?=$row['time']?></td>
<td><?=$row['name']?></td>
<td><?=$row['value']?></td>
</tr>
<? endforeach ?>
</table>


279 名前:196 mailto:sage [2008/10/14(火) 10:30:20 ID:???]
>>276
厳密には、こう考えると良いかも。やっつけだけど。

<? // こんとろーら
require_once 'init.php';
require_once 'model.php';
include_template('tpl.php', compact('rows'));

<? // もでる(model.php)
$rows = array(
array('time'=>time(), 'name'=>'foo', 'value'=>1),
array('name'=>'bar')
);

ちなみに俺は>>278のような書き分けをする時は、
tpl.phpの処理は、コントローラに近い場所に書いているかも。


280 名前:nobodyさん mailto:sage [2008/10/14(火) 11:24:56 ID:???]
>>196
君、MVCを全く理解出来てないよ。

データの表示フォーマット等に関するビューロジックは、ビュー側で処理するべき。
コントローラは必要なデータをモデルからひっぱってデータに渡すだけで表示内容には関与しない。
君の書き方だと、各種表示フォーマットやデフォルト値が変更になった時にビューで処理出来ないでしょう?




281 名前:nobodyさん mailto:sage [2008/10/14(火) 11:31:38 ID:???]
>>265-266>>272-273の違いは何ですか?

MとCはコードに掲載していないだけでVとしては正しいと思います。
何が問題でしょうか?具体的に教えて下さい。

282 名前:nobodyさん mailto:sage [2008/10/14(火) 11:37:48 ID:???]
>>280
変更される度にtpl.phpに修正を入れるんだろうな
単純にテンプレートファイルとビュー用のデータ加工のphpを分けてるだけみたいだし

というか、やってる事はオレオレテンプレートエンジンな件について
要は生phpをテンプレートファイルにできればいいのかな?

283 名前:nobodyさん mailto:sage [2008/10/14(火) 11:50:37 ID:???]
>>282
ねw 多分中学生か高校生の熱血PG志望者だよきっと。

俺も若い頃は動作の重さに超敏感だったし、Smartyとか使う奴はアホかと思っていたw

284 名前:nobodyさん mailto:sage [2008/10/14(火) 12:14:00 ID:???]
>「Smartyをわざわざ導入する際のデメリット」

俺にはこれがわからん。
パッケージインストールもしくはダウンロード→インクルードパス下に解凍したらすぐ使えるよ?
習得の手間は人それぞれだろうけどおそらく196や周辺のPHP知ってるデザイナーは苦労したんだろうな。


285 名前:nobodyさん mailto:sage [2008/10/14(火) 12:15:43 ID:???]
>>281
んーと
「V」にだけ着目するならどっちもただしい、
それこそ全部echo文でもただしいのではとおもいます!

>>272-273は「SmartyでできることはPHPでできる」、の一部のサンプルとして
1. 変数・関数のスコープの限定の実現
2. 生PHP?のテンプレートとしての(そこそこの)書きやすさの実現
 (というかshort_open_tagの積極的な使用)
を主眼においてつくってみました。 >>266から>>273に代わって
何か問題が解決したとすれば、主にはView用変数・ユーザ定義関数がグローバルでなくなったこと
かなとおもいます(まちがってたらアドバイスください><)。

じぶんはというと今テンプレートに
Smartyを使いつづけるか(といってもまだ使って一ヶ月ですが!)
否かまよっているところなので先人さんのいろいろな意見を参考にしたいところで、
最近このスレをみつけてせっかく興味のある話題にめぐりあえたのに
煽り合いばかりでおもしろくないなーとおもっているところです。

286 名前:nobodyさん mailto:sage [2008/10/14(火) 12:23:17 ID:???]
お前が煽ってんだろが

287 名前:nobodyさん mailto:sage [2008/10/14(火) 12:28:17 ID:???]
あ、>>277さん、こちらこそありがとうございます><
最初はもっとボコボコに叩かれるかもとおもってたので…

288 名前:nobodyさん mailto:sage [2008/10/14(火) 12:31:26 ID:???]
>>286
煽ってないですが煽ってると思われたならあやまります。。
すみません

289 名前:nobodyさん mailto:sage [2008/10/14(火) 12:41:55 ID:???]
>>285
>>265-266
「V」に着目するだけというかVのサンプルですが…。
MVC的に見ても、MもCも混在していないので間違いがわかりません。
どこに違和感を感じたのでしょうか?


仕組みを学ぶのは良い事だと思います。
しかし、もう少しSmartyを使い続けてみて下さい。
不満点も沢山見つかると思いますが、メリットも沢山見つかると思います。
「SmartyでできることはPHPでできる」はパッと見出来てるように見えてるだけで、
細かい実装(商業では必須ね)考えると、相当な開発負荷がかかります。

>short_open_tagの積極的な使用
現バージョンのPHPの推奨設定ではshort_open_tag=offなので注意して下さい。
PHP6以降では廃止される可能性もあります。

290 名前:nobodyさん mailto:sage [2008/10/14(火) 12:42:58 ID:???]
>>285
Smartyでできる事を手間をかけてPHPだけで書いてもメリットないだろう
処理速度に多少のアドバンテージがあるくらいで、それも汎用的に書いていけば怪しい

個人的にはSmartyを使うメリットで一番大きいのは、使ってる人が多い事だと思ってる



291 名前:nobodyさん mailto:sage [2008/10/14(火) 12:46:30 ID:???]
SmartyもどきをPHPで作るくらいなら、俺はSmartyを使う。

292 名前:196 mailto:sage [2008/10/14(火) 18:57:31 ID:???]
short_open_tagは俺の趣味です。
「ファイルの末尾に ?> を書かない」と同じくらい、趣味の領域だと思う。
なので、xmlとか読み書きする人は気をつけてください。

>>280
そうだね。当然、MVCという区分上は、tpl.phpはビューに相当する。
「コントローラに近い場所に書いている」という実装が悪いのかな。
例えばsymfonyだったら、tpl.phpこそがhogeSuccess.phpであるべきで、
hogeSuccess.phpからhoge.htmlをincludeしたほうが妥当ってことだよね。
コントローラがinclude_templateを呼ぶのはイビツなんだな。なるほど納得。

それを踏まえて再度意見を戴きたいのだけど、
ビューが分かれててその一方がPHPだと、何かまずいだろうか?
モデルもコントローラも1ファイルじゃないといけないという理屈は無いよね。

>>282
そう。単純に「表示値の準備」と「表示処理」を分けているだけ。

> 要は生phpをテンプレートファイルにできればいいのかな?

ナマじゃなくてもいいんだけど、Smartyほど大げさなモノは、個人的には使わないかな。
テンプレートファイル部分は出来るだけ薄いほうが好き。


293 名前:nobodyさん mailto:sage [2008/10/14(火) 20:46:31 ID:???]
>short_open_tagは俺の趣味です。
なんだ、ただのひねくれものか
お前、友達いないだろ?
お前、自分の事出来る職人だと思ってるだろ?
周りは確実に引いてるパターンが目に浮かぶ
もはやSmartyの話題でも無いので、MVCスレにでも行けや。

294 名前:nobodyさん mailto:sage [2008/10/15(水) 00:24:43 ID:???]
>>292
>>278のコードだけど、tpl.phpとbody.phpを合わせてSmartyで言うところのテンプレートだよね?
tpl.phpでデータを整形をして、body.phpは体裁のみを担当と…。

これは君の主張していた

 ・Smartyより学習コストが低い
 ・(デザイナが)Smartyで出来る事は実現出来る

には当てはまらないよね。

tpl.phpで扱える便利な関数群を提供してあげればいいんだろうけど、
それは>>290-291の言うとおり、結局は我流テンプレートエンジンを作る事態になってしまうよね。
であれば既に完成されたSmartyから乗り換える理由にはなり得ないと思うんだ。
もっとも君が我流テンプレートエンジンを完成させて、公開してくれれば別かもしれないが。

295 名前:nobodyさん mailto:sage [2008/10/15(水) 00:45:46 ID:???]
>>292
>ビューが分かれててその一方がPHPだと、何かまずいだろうか?
>モデルもコントローラも1ファイルじゃないといけないという理屈は無いよね。

ビューをファイル分割する事は、
メリットよりデメリットの方が多い気がするんだよね。

まず、ファイルが増えればバージョン管理やデプロイの手間が増える。

>>278の形式だとbodyの表示を修正したい場合、
読み込み元のtplを把握している必要があるし、
tplが読み込んでいるbodyが他に無いか等も把握していないといけない。

これは非常に面倒。

そんな理由で、どうしても整形処理を別ファイルにしたいのであれば、
tpl.phpからbody.phpを読むのではなく、
body.phpからtpl.phpを読むような形にするのが望ましいと思う。

<? // body.php ?>
<? include "tpl.php" ?>
<? $rows = $tpl->format($rows); // 整形 ?>
<? include "header.php" ?>

〜 表示処理 〜

<? include "footer.php" ?>

そうすると構文こそ違うものの、Smartyとやってる事はほとんど同じになる。
で、Smartyに相当するtpl.phpを作るのは誰がやるんだ…って話になる。

296 名前:nobodyさん mailto:sage [2008/10/15(水) 01:03:17 ID:???]
>>289
じぶんは>>264-267を見てつくってみたのですが
おっしゃってることがよくわかりませんでした。。

Smartyはまだ触ってみるつもりではいます!
>>290さんのおっしゃっるとおり使う人が多いのはよいとおもいますし
たしかカスタムタグみたいなこともカスタム関数でできるんですよね??

ただSmartyに不満を持つたびに、
PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
PHPを使いはじめてから、short_open_tagとか制御構文の別構文(endif, ...)とか
テンプレートとしてのPHPはすごくいい感じだとおもったので
PHPがちゃんとテンプレートとして進化しなかったのがざんねんです。

テンプレートエンジン上にテンプレートエンジンをのっけるという感覚が
今割り切って理解できなくなっているのです。。
short_open_tagがXML処理命令の規則に合わないのはあきらめるしかないです。。

297 名前:nobodyさん mailto:sage [2008/10/15(水) 02:00:05 ID:???]
PHPはすでにテンプレートエンジンとしては不全なんだろ。
それならSmartyを良くするとかもっと良いテンプレートエンジンを作るとかしたほうが生産的だと思うのだが。

まあ、PHPを良くするというのもありか。
しかしテンプレートとプログラムを同居させるというのはどだい無理があると思う。
Smartyのプログラム的文法もかなり無理やりだしな。

298 名前:nobodyさん mailto:sage [2008/10/15(水) 02:42:51 ID:???]
>>296
PHPは正確にはテンプレートエンジンでは無いんですよ。
テンプレートエンジンのようにHTML内に組み込めるようになっているだけなんです。

>PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが)
{php}echo "Hello World"{/php}

>たしかカスタムタグみたいなこともカスタム関数でできるんですよね?
PHPが解る人なら簡単に作れますよ。

(例) タグ内の文字列を置換するタグ{replace}{/replace}タグを作る場合

block.replace.php というファイルをpluginsディレクトリの中に作成し、次のコードを記述するだけです。
function smarty_block_replace($params, $content, &$smarty)
{
retrurn str_replace($p["search"], $p["replace"], $content);
}

以降Smartyテンプレートで次のように記述出来るようになります。

{replace search="本当ですか" replace="マジッスカ"}
 {replace search="凄いですね" replace="パネェっす"}
本当ですか。
    凄いですね。
 {/replace}
{/replace}

// 出力:マジッスカ。パネェっす。

一見、PHP単体でも簡単に実装出来そうに見えますが、タグの入れ子処理等を考えると地味に面倒だったり、テンプレートの可読性が下がったりしますよね。


299 名前:196 mailto:sage [2008/10/15(水) 18:33:26 ID:???]
>>294
tpl.phpが難しいから学習コストが高いということかな?

・PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
・Smartyで出来る事は理論上すべてPHPで出来る(し、その手段もそれなりに用意されている)

というのが俺の意見かな。
俺の環境はsymfonyで、sfFormか、helperか、sfSmartyViewPluginかの選択が必要なので、
既にSmartyで完成されたサイトとかを、わざわざリプレースする必要は無いと思う。

「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?

>>295
なるほど、俺にとっては斬新な発想だった。
ファイルの命名規則をしっかり決めれば、関連性はわかりやすいかと思ってたんだが。

tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。
「$nameの表示はescapeしてnl2brしてください」という要件を把握出来るのが、
デザイナーなのかプログラマーなのかによって話が大きく変わるんだろうな。


300 名前:196 mailto:sage [2008/10/15(水) 19:01:26 ID:???]
せっかくなのでSmartyの質問をさせてくれ。

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

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

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

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

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

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

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




301 名前:nobodyさん mailto:sage [2008/10/15(水) 19:38:33 ID:???]
>>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さん mailto:sage [2008/10/15(水) 20:31:43 ID:???]
>>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さん mailto:sage [2008/10/15(水) 20:34:36 ID:???]
PHPが書けないデザイナをヘボとか言っちゃう人とは仕事したくないなあ
jspが書けないデザイナもヘボなんだよね?
MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない
うーん、大変だな

304 名前:nobodyさん mailto:sage [2008/10/16(木) 02:49:37 ID:???]
>>298
> PHPは正確にはテンプレートエンジンでは無いんですよ。
そうなんですか??

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

あとカスタムタグ?のサンプルありがとうございます!
ttp://smarty.incutio.com/?page=foreachgroupというのがおもしろそうでした!

305 名前:nobodyさん mailto:sage [2008/10/16(木) 03:51:12 ID:???]
>>304
PHPはプログラミング言語の名称ですよ。

306 名前:nobodyさん mailto:sage [2008/10/16(木) 08:06:34 ID:???]
>>303
CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw


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

307 名前:nobodyさん mailto:sage [2008/10/16(木) 17:56:46 ID:???]
>>305
そりゃ、そうでしょうとも…!

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

309 名前:196 mailto:sage [2008/10/19(日) 11:55:40 ID:???]
なるほど、このスレには分業指向の人が多いんだな。

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

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

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

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

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

310 名前:nobodyさん mailto:sage [2008/10/19(日) 15:09:25 ID:???]
>>309
>{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。

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

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

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


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

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



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

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

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


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

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

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


312 名前:196 mailto:sage [2008/10/19(日) 16:30:50 ID:???]
超極端な例として、>>310の議論にとって最も良い条件を考える。

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

それでも

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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

315 名前:nobodyさん mailto:sage [2008/10/20(月) 12:22:54 ID:???]
こんなに活発に意見交換があるのに、
どうしてココは『隔離スレ』なの?

316 名前:nobodyさん mailto:sage [2008/10/20(月) 12:27:38 ID:???]
名目はともかくスレ独立してるのはありがたいので別にいいや。


317 名前:196 mailto:sage [2008/10/20(月) 18:54:05 ID:???]
>>313
煽っているように見えて>>311と同じ事を言っているように見える。
なので異論は無い。むしろ、まったくその通りだと思う。

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

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

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

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


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

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

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

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

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

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



321 名前:196 mailto:sage [2008/10/22(水) 11:20:52 ID:???]
simplateのメンテに貢献したほうがマシな気がしてきた。

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

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

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

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

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


322 名前:196 mailto:sage [2008/10/22(水) 12:12:03 ID:???]
俺が何故このスレに居るのかとよく問われるので、
お言葉に甘えさせて戴き、整理させていただく。

俺が思う結論
・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さん mailto:sage [2008/10/22(水) 13:25:17 ID:???]
だめだこいつ…芯の通った主張が一つもないから、結局何に結論づけてるのかもわからん。
「…で?」としか言えないわ。

324 名前:nobodyさん mailto:sage [2008/10/22(水) 13:32:44 ID:???]
default_modifiers忘れてただけとか言い訳が恥ずかしすぎるwww
結局使いこなせてないだけに一票。

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

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

325 名前:196 mailto:sage [2008/10/22(水) 18:45:58 ID:???]
>>324
一体どんな環境なら馴染むの?

326 名前:nobodyさん mailto:sage [2008/10/22(水) 20:54:01 ID:???]
>>325
使いこなせればどんな環境でも馴染ませられるよ。
出来ないのはヘボプログラマくらいだろうね。

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

327 名前:質問です mailto:sage [2008/11/02(日) 19:17:14 ID:???]
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さん [2008/11/02(日) 19:19:30 ID:JfJ9McaH]
あげます。

329 名前:nobodyさん mailto:sage [2008/11/02(日) 20:49:20 ID:???]
書き方くらいちゃんと見なされ

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



331 名前:327 [2008/11/03(月) 23:53:06 ID:CUNAecRE]
329さん、330さん、ありがとうございます。

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

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

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

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

332 名前:nobodyさん mailto:sage [2008/11/03(月) 23:56:08 ID:???]
マニュアル見てる?

333 名前:nobodyさん [2008/11/14(金) 17:52:36 ID: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の続きです。 [2008/11/14(金) 17:53:36 ID: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の続きです。 [2008/11/14(金) 19:12:47 ID: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さん mailto:sage [2008/11/14(金) 19:56:05 ID:???]
はぁ?お前は何を言ってるんだ?
/usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php
の場所にこのファイルはあるのか?

337 名前:333の続きです。 [2008/11/14(金) 19:56:14 ID:nqLSKBoW]
自己解決しました。
疲れました


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

339 名前:nobodyさん mailto:sage [2008/11/15(土) 22:40:28 ID:???]
そりゃあレンタルサーバーにsmartyがインストールされてるかどうかだろ
されてなきゃ自前でアップロードしろ

340 名前:nobodyさん [2008/11/16(日) 14:34:54 ID:VgwBTNK+]
>>338
一体何をincludeするつもりなのか



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

342 名前:nobodyさん mailto:sage [2008/11/18(火) 01:32:18 ID:???]
>>338

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

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

344 名前:nobodyさん mailto:sage [2008/11/19(水) 00:19:12 ID:???]
>>343
テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。
まあプラグインで作れることは作れるんだが

345 名前:nobodyさん mailto:sage [2008/11/19(水) 04:25:55 ID:???]
Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?

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

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


347 名前:nobodyさん mailto:sage [2008/11/20(木) 11:18:04 ID:???]
>>346
つ{insert}

348 名前:nobodyさん mailto:sage [2008/12/03(水) 23:41:44 ID:???]
これってDjangoみたいなテンプレートの継承ってできないの?

349 名前:nobodyさん mailto:sage [2008/12/03(水) 23:58:50 ID:???]
>>348
簡易的なモノなら簡単に作れるから自作すれ。

350 名前:nobodyさん [2008/12/05(金) 11:52:26 ID:jMVHCYUr]
template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。

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



351 名前:nobodyさん mailto:sage [2008/12/05(金) 13:30:34 ID:???]
cacheを混乱させそうだな。

352 名前:350 [2008/12/05(金) 14:12:47 ID:jMVHCYUr]
やめときます。
おとなしく対応させて作ります。

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

353 名前:nobodyさん mailto:sage [2008/12/05(金) 20:37:51 ID:???]
>>350
コンパイルID指定すればOK
www.smarty.net/manual/ja/api.fetch.php

354 名前:nobodyさん mailto:sage [2008/12/06(土) 01:16:24 ID:???]
ほうそんな機能が・・・
メリットがまったく思いつかないけど覚えておきます

355 名前:nobodyさん mailto:sage [2008/12/06(土) 01:36:14 ID:???]
いやわかれよw

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

357 名前:nobodyさん mailto:sage [2008/12/08(月) 09:59:13 ID:???]
ないものはつくるんだ

358 名前:nobodyさん mailto:sage [2008/12/08(月) 16:34:14 ID:???]
ついでに車輪も作っとけ

359 名前:nobodyさん mailto:sage [2008/12/08(月) 23:18:30 ID:???]
あってもつくるんだ

360 名前:nobodyさん mailto:sage [2008/12/09(火) 12:27:40 ID:???]
車輪の再発明は偉大!



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

362 名前:nobodyさん mailto:sage [2008/12/22(月) 13:12:51 ID:???]
smarty以外を選択する理由がない

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

364 名前:nobodyさん [2008/12/31(水) 21:47:49 ID: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さん mailto:sage [2008/12/31(水) 21:49:40 ID:???]
>>364
error_reporting
display_errors

366 名前:nobodyさん mailto:sage [2008/12/31(水) 23:02:30 ID:???]
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
ri■ch■ardkosh■im■izu.at.webry.info/
創価の保険金殺人事件。
オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。
www15.ocn.ne.jp/~oy■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
jb■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/

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

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

毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。
荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。
現実には「ネトウヨ」などは存在しない。
changi.2ch.net/test/read.cgi/ms/1230363385/

367 名前:nobodyさん mailto:sage [2008/12/31(水) 23:44:19 ID:???]
>>365
ありがとうございます、解決しました

368 名前:nobodyさん [2009/01/02(金) 21:57:29 ID: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さん mailto:sage [2009/01/02(金) 22:04:07 ID:???]
>>368
www.smarty.net/manual/ja/language.function.html.select.date.php

370 名前:nobodyさん mailto:sage [2009/01/02(金) 23:18:35 ID:???]
>>369
横ですがこれのselectedって現在時刻じゃないですか?




371 名前:nobodyさん mailto:sage [2009/01/03(土) 01:08:00 ID:???]
>>369
こんなのがあったんですね、ありがとうございました。

372 名前:nobodyさん [2009/01/04(日) 08:20:15 ID:S9BZj0MW]
フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき

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

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

373 名前:nobodyさん mailto:sage [2009/01/04(日) 08:53:47 ID:???]
セッション

374 名前:nobodyさん mailto:sage [2009/01/04(日) 17:11:37 ID:???]
>>373
ありがとうございます 解決しました

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

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

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

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



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

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

377 名前:nobodyさん [2009/01/07(水) 10:21:31 ID:nbhiW1pd]
>>375
そもそもPHP側ですませておく。
なんのために分離してるのかと

378 名前:nobodyさん mailto:sage [2009/01/07(水) 11:39:38 ID:???]
サニタイズはビュー側でもOKだと思うが。

379 名前:nobodyさん mailto:sage [2009/01/07(水) 12:32:40 ID:???]
サニタイズ(笑)

380 名前:nobodyさん mailto:sage [2009/01/08(木) 12:21:51 ID:???]
>>379(笑)



381 名前:nobodyさん mailto:sage [2009/01/08(木) 13:16:48 ID:???]
ん?反論できなくて涙目?w

382 名前:nobodyさん [2009/01/08(木) 14:37:59 ID:/Ay52XkK]
>>381
お前が暇人なだけだろw

383 名前:nobodyさん mailto:sage [2009/01/08(木) 16:01:24 ID:???]
>>378
誰も不可とは言ってないと思うが

384 名前:nobodyさん mailto:sage [2009/01/08(木) 16:03:12 ID:???]
>>382
必死だな

385 名前:nobodyさん mailto:sage [2009/01/09(金) 02:14:26 ID:???]
>>383
>>377ではPHP側でやれと書いてあるようにしか読めないんだがww

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

386 名前:nobodyさん [2009/01/09(金) 13:26:05 ID:dxaSQaiQ]
>>385
必死厨必死だな。

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


387 名前:nobodyさん mailto:sage [2009/01/09(金) 14:19:53 ID:???]
「サニタイジング」じゃねーの?

388 名前:nobodyさん mailto:sage [2009/01/10(土) 01:02:19 ID:???]
>>386
スマン。日本語でお願い出来るか?

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

389 名前:nobodyさん [2009/01/15(木) 22:45:35 ID: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 [2009/01/15(木) 23:24:27 ID:iReMhog8]
>>389に書いたファイルをrequireした.phpで、

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

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

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



391 名前:nobodyさん [2009/01/15(木) 23:29:20 ID:iReMhog8]
ごめんなさい、書き間違えです

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

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

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

392 名前:nobodyさん mailto:sage [2009/01/15(木) 23:35:13 ID:???]
compile_dir,cache_dirへの書き込み権限はありますか?

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

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

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

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

395 名前:nobodyさん mailto:sage [2009/01/16(金) 06:34:07 ID:???]
>>394
ttp://www.phppro.jp/phpmanual/smarty/language.function.literal.html

396 名前:nobodyさん mailto:sage [2009/01/16(金) 14:02:35 ID:???]
デリミタの変更はSmarty最初の課題。

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

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

399 名前:nobodyさん mailto:sage [2009/01/19(月) 11:19:59 ID:???]
ケースバイケース

400 名前:nobodyさん mailto:sage [2009/01/19(月) 15:19:03 ID:???]
cache切っても充分使えるしな。
重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・




401 名前:nobodyさん mailto:sage [2009/01/20(火) 18:40:01 ID:???]
PHP側で連想配列のキーにピリオドを含む使った

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

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

{$foo[bar.baz]}

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

402 名前:nobodyさん mailto:sage [2009/01/20(火) 20:16:27 ID:???]
つマニュアル

403 名前:nobodyさん mailto:sage [2009/02/03(火) 21:30:12 ID:???]
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さん mailto:sage [2009/02/03(火) 21:32:58 ID:???]
なんで二重括弧なの?

405 名前:nobodyさん mailto:sage [2009/02/03(火) 21:41:22 ID:???]
>>404

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

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

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

406 名前:403 mailto:sage [2009/02/03(火) 21:51:04 ID:???]
環境書き忘れました

CentOS 5.2 Kernel 2.6x
PHP 5.1.6

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

407 名前:nobodyさん mailto:sage [2009/02/03(火) 21:53:11 ID:???]
試してみたいから再現できるコード出してくれ

408 名前:403 mailto:sage [2009/02/03(火) 22:23:57 ID:???]
<?php

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

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

?>

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

{{$test}}

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

409 名前:403 mailto:sage [2009/02/03(火) 22:24:52 ID:???]
間違えました^^;

<?php

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

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

?>

410 名前:nobodyさん mailto:sage [2009/02/04(水) 01:57:17 ID:???]
当然ながら私の環境では再現しません



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

412 名前:nobodyさん mailto:sage [2009/02/04(水) 22:30:27 ID:???]
自分の環境で試してくれる回答者放置とか最悪な質問者だな

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

ttp://www1.axfc.net/uploader/File/so/18050


414 名前:nobodyさん mailto:sage [2009/02/05(木) 08:52:10 ID:???]
問題のあったファイルがお礼とかw

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

416 名前:nobodyさん mailto:sage [2009/03/03(火) 15:34:02 ID:???]
フォーマットのf抜けてた

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

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

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

418 名前:nobodyさん mailto:sage [2009/03/06(金) 03:16:30 ID:???]
>415
register_modifier 使って関数自作すればいいんじゃない?

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

420 名前:nobodyさん mailto:sage [2009/03/13(金) 10:39:43 ID:???]
そうだよ?



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

422 名前:nobodyさん mailto:sage [2009/03/13(金) 11:05:13 ID:???]
Smartyってめっちゃ便利やな!
PHP案件は全部これ使って開発してるぁるょ!

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

424 名前:nobodyさん mailto:sage [2009/03/16(月) 15:28:49 ID:???]
>>423
ggrks

425 名前:nobodyさん mailto:sage [2009/03/16(月) 17:22:30 ID:???]
変数名が違うんだろ

426 名前:nobodyさん mailto:sage [2009/03/19(木) 02:15:19 ID:???]
そのレベルだとSmartyどころかphp初心者だろ……

427 名前:nobodyさん [2009/04/12(日) 10:19:11 ID:tJ4UxLsE]
ヤッターマン公式サイトはSmartyを使っているようだ。
www.ytv.co.jp/yatterman/

428 名前:nobodyさん [2009/04/22(水) 01:10:23 ID:rBHnGmhI]
Smartyのファイル名が
「%%45^45E^45E480CD%%index.tpl.php」

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

429 名前:nobodyさん mailto:sage [2009/04/22(水) 01:44:07 ID:???]
Smarty::_parse_resource_nameに書いてある

430 名前:nobodyさん [2009/04/23(木) 02:53:59 ID:ai/dLDOC]
あいまい検索みたいな事って出来るのでしょうか?

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

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



431 名前:nobodyさん mailto:sage [2009/04/23(木) 02:55:05 ID:???]
430です。すみません、誤爆です・・。質問スレに書きます。


432 名前:nobodyさん mailto:sage [2009/05/03(日) 08:41:04 ID:???]
template_cの中身を見たら
こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php

433 名前:nobodyさん mailto:sage [2009/05/03(日) 12:28:14 ID:???]
コンパイル後のテンプレートファイル

434 名前:nobodyさん mailto:sage [2009/05/03(日) 14:56:11 ID:???]
なるほど
消しても問題なさそうですね?
ありがとうございます

435 名前:nobodyさん mailto:sage [2009/05/03(日) 17:01:11 ID:???]
( ゚д゚)ポカーン

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

437 名前:nobodyさん mailto:sage [2009/05/05(火) 03:15:12 ID:???]
>>436
できる(`・ω・´)

438 名前:nobodyさん mailto:sage [2009/05/05(火) 21:30:24 ID:???]
HTMLファイルだって定義するぐらいはできるんだぜ

439 名前:nobodyさん [2009/05/06(水) 01:41:19 ID:T5mYjMeP]
>>437-438
どこの設定を変更したら出来るのですか?


440 名前:nobodyさん mailto:sage [2009/05/06(水) 07:14:42 ID:???]
>>439
断る(`・ω・´)



441 名前:nobodyさん mailto:sage [2009/05/09(土) 23:09:48 ID:???]
www.smarty.netにつながらないんだけど俺だけ?

442 名前:nobodyさん mailto:sage [2009/05/10(日) 20:05:32 ID:???]
>>441
落ちてるね。こういうサイトはミラーが必要だとおもいまする。

443 名前:nobodyさん mailto:sage [2009/05/12(火) 01:20:58 ID:???]
一生落ちてればいいと思う。

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

445 名前:nobodyさん mailto:sage [2009/05/13(水) 13:46:20 ID:???]
クラスのメソッドを指定できる関数をつくればいいんじゃあ

446 名前:nobodyさん mailto:sage [2009/05/13(水) 21:18:42 ID:???]
初心者で悪いんだが

--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さん mailto:sage [2009/05/13(水) 21:46:03 ID:???]
>>446
こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要

448 名前:nobodyさん mailto:sage [2009/05/14(木) 00:07:02 ID:???]
>>447

イミフ

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

450 名前:nobodyさん mailto:sage [2009/05/14(木) 03:34:09 ID:???]
>>446
それでも問題無い場合もあるよ。
ケースバイケース。

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

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



451 名前:nobodyさん mailto:sage [2009/05/14(木) 03:40:17 ID:???]
>>450
>>447

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


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


453 名前:nobodyさん mailto:sage [2009/05/14(木) 14:45:29 ID:???]
Smartyならデフォルトで適用するフィルターを設置出来る
escapeを入れたら今回記述されたテンプレートでもちょっと安心

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

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

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

455 名前:nobodyさん mailto:sage [2009/05/14(木) 18:51:12 ID:???]
HTMLソースじゃないぞ

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

457 名前:nobodyさん mailto:sage [2009/05/14(木) 21:02:38 ID:???]
> それがsmarty経由でつくられてるもの

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

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

459 名前:nobodyさん mailto:sage [2009/05/14(木) 21:49:19 ID:???]
どんな風に勉強になった?

460 名前:nobodyさん mailto:sage [2009/05/14(木) 23:02:27 ID:???]
({ をデリミタタグとして使っているところとかです。



461 名前:nobodyさん mailto:sage [2009/05/16(土) 17:50:14 ID:???]
MTもSmarty使っているから、参考になると思うよ。

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

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

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

463 名前:nobodyさん mailto:sage [2009/05/22(金) 10:07:23 ID:???]
SmartyはPHPの単なるライブラリだよ・・・?

464 名前:nobodyさん mailto:sage [2009/05/22(金) 10:22:59 ID:???]
Smartyの用途はスレの上のほうで話題になってるじゃん
苦手だからとか上を目指そうとかそういう観点ではなく

465 名前:462 mailto:sage [2009/05/22(金) 11:11:41 ID:???]
>463,464
ご返答ありがとうございます。

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

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

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


467 名前:462 mailto:sage [2009/05/22(金) 17:49:33 ID:???]
>>466

!('A')あ〜
なんか少々モヤモヤが晴れてきました。
引き続き勉強します。

468 名前:nobodyさん mailto:sage [2009/05/23(土) 20:37:34 ID:???]
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;

今日一日中ググりまくっているんですが、どうしてもわかりません。
どなたかお助けください。おねがいします。

469 名前:468 mailto:sage [2009/05/23(土) 20:42:52 ID:???]
phpファイルだけがSJISになってました!
ほんとサーセンでした!!!

470 名前:nobodyさん mailto:sage [2009/05/23(土) 21:22:40 ID:???]
「こんにちは、文字化け!」
はワラタ



471 名前:nobodyさん mailto:sage [2009/05/23(土) 21:30:08 ID:???]
smartyのテンプレートに$hogeという配列が空じゃない場合の条件分岐処理を書きたいんですけど、
この書き方はおかしいのでしょうか

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

たまにif文が動かないのでおかしいと思うのですが

472 名前:nobodyさん mailto:sage [2009/05/23(土) 22:28:46 ID:???]
smarty文法のばあい
===はあるけど!==はないんじゃないか?
マニュアルに記載されてないし

!($hoge==="")
に差し替えてみよう


473 名前:nobodyさん mailto:sage [2009/05/23(土) 23:15:34 ID:???]
is_array() とかつかえなかったっけ?

474 名前:nobodyさん mailto:sage [2009/05/25(月) 00:05:06 ID:???]
>>472
>>473

どちらも動作しました
ありがとうございます

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

フレームワークを使い比べたことがある方、教えてください。

476 名前:nobodyさん mailto:sage [2009/06/30(火) 21:29:17 ID:???]
フレームワークはMVC+αを担当するものとした場合、
SmartyはVのみを担当するテンプレートエンジンでしかない。

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

という使い方が一般的です。

477 名前:475 [2009/07/01(水) 02:15:48 ID:FWyhhBD1]
>>476

簡単ながら簡潔な意見だと思います。ありがとうございます。

478 名前:nobodyさん mailto:sage [2009/07/01(水) 18:56:06 ID:???]
どういたまして。

479 名前:nobodyさん mailto:sage [2009/07/06(月) 17:48:50 ID:???]
Smartyも大きく言えば、関数ライブラリだからな。
HTML内にPHPコードを書いているのと変わらない。
(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる

でも、プログラマー以外がテンプレートを操作する環境なら凄い便利

480 名前:nobodyさん mailto:sage [2009/07/06(月) 17:53:06 ID:???]
小さく言うと何?



481 名前:nobodyさん mailto:sage [2009/07/07(火) 00:33:01 ID:???]
smarty乙php乙時代はC++俺はHTMLホームページビルダー

482 名前:nobodyさん mailto:sage [2009/07/07(火) 03:43:16 ID:???]
<small>関数ライブラリ</small>

大事なことなので小さく言いました。

483 名前:nobodyさん mailto:sage [2009/07/07(火) 04:18:14 ID:???]
>HTML内にPHPコードを書いているのと変わらない。

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

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

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

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


一度Smartyの設計思想を読む事をおすすめ。

484 名前:nobodyさん mailto:sage [2009/07/07(火) 16:14:30 ID:???]
>>483
いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。

あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。

485 名前:nobodyさん mailto:sage [2009/07/08(水) 01:44:36 ID:???]
MVCでの開発経験があれば、Smartyが難しいと感じる事は無いと思う。
最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。

486 名前:nobodyさん mailto:sage [2009/07/08(水) 02:16:30 ID:???]
どの程度までCとVを分離すればいいの?

487 名前:nobodyさん mailto:sage [2009/07/08(水) 05:06:10 ID:???]
ご自由に

488 名前:nobodyさん mailto:sage [2009/07/08(水) 09:25:14 ID:???]
(1)
if ($nantoka) {
$str="yes";
} else {
$str="no";
}

result:{$str}

(2)
result:{if $nantoka}yes{else}no{/if}


489 名前:196 mailto:sage [2009/07/08(水) 09:25:17 ID:???]
Smarty信者はMVCフレームワークとテンプレートエンジンの区別もつかんのか

490 名前:nobodyさん mailto:sage [2009/07/08(水) 09:30:04 ID:???]
>>476で回答済の話をなぜ蒸し返す



491 名前:nobodyさん mailto:sage [2009/07/08(水) 10:06:46 ID:???]
>>487
もっと詳しく

492 名前:nobodyさん mailto:sage [2009/07/08(水) 12:47:51 ID:???]
ココでMVCの話はお門違いだけど、一寸だけ口挟む。

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

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

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

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

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

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

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




493 名前:nobodyさん mailto:sage [2009/07/08(水) 12:53:19 ID:???]
>>492
じゃMとVはどう仕事を割り振ればいいの?

494 名前:nobodyさん mailto:sage [2009/07/08(水) 12:59:50 ID:???]
M(モデル):サーバ処理専用。主にDBがらみの処理
V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る

495 名前:nobodyさん mailto:sage [2009/07/08(水) 13:11:42 ID:???]
でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?

496 名前:nobodyさん mailto:sage [2009/07/08(水) 13:53:41 ID:???]
MVCにとらわれすぎると、逆に可読性下げるからなぁ…
目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね?

使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。

497 名前:nobodyさん mailto:sage [2009/07/09(木) 12:40:59 ID:???]
>>495
> でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?

MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!


498 名前:nobodyさん mailto:sage [2009/07/09(木) 12:46:29 ID:???]
>>496

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

当然、カスタマイズしにくい...

499 名前:nobodyさん mailto:sage [2009/07/10(金) 17:05:35 ID:???]
MVCを意識する・理解するというのは大事だと思うんだが、
どうやってその理解を深める勉強をするの?
結局、自分でソースを書いて、良いか悪いか判断するしかないよね?

俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、
それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。
なら、それで良いのではないか?と思うんだけど、後で困るのだろうか

500 名前:nobodyさん mailto:sage [2009/07/10(金) 17:06:18 ID:???]
お前は何を言ってるんだ



501 名前:nobodyさん mailto:sage [2009/07/10(金) 17:19:26 ID:???]
「そこまでこだわるべきなのか」 ←言いたいこと
「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問

502 名前:nobodyさん mailto:sage [2009/07/10(金) 17:21:09 ID:???]
>>499
>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。

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

って話。

503 名前:nobodyさん [2009/07/10(金) 18:13:16 ID:aQw5S2vU]
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。

504 名前:nobodyさん mailto:sage [2009/07/10(金) 18:17:06 ID:???]
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ?
503さん、まじパねぇっす!

505 名前:nobodyさん mailto:sage [2009/07/10(金) 19:29:24 ID:???]
503さんはエスパーなんです!

506 名前:nobodyさん mailto:sage [2009/07/17(金) 01:42:54 ID:???]
>>494
サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな

507 名前:nobodyさん mailto:sage [2009/07/17(金) 12:08:33 ID:???]
>>506
入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。

508 名前:nobodyさん mailto:sage [2009/07/17(金) 12:24:47 ID:???]
>>506

大丈夫か?
頭打ったろ!

ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ


509 名前:nobodyさん mailto:sage [2009/07/17(金) 19:58:03 ID:???]
自分の頭に無い解釈=不正解

だというプログラマーが多すぎです

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

自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた



511 名前:nobodyさん mailto:sage [2009/07/20(月) 23:16:35 ID:???]
それSmatyじゃなくて
PHP+Smartyじゃん

512 名前:nobodyさん mailto:sage [2009/07/20(月) 23:28:34 ID:???]
まあ、あながち間違ってはいないがな。

513 名前:nobodyさん mailto:sage [2009/07/21(火) 10:38:01 ID:???]
いや、間違ってるだろw
その理論だと世の中全てのPHPコードがMVC実装されてる事になる。

514 名前:nobodyさん mailto:sage [2009/07/21(火) 10:47:00 ID:???]
いや、それは「PHPでMVCを書いた」って事で
Smartyみたいに元から実装されている分けじゃないんでは?

515 名前:nobodyさん mailto:sage [2009/07/22(水) 00:47:18 ID:???]
Smartyhajimemasita

516 名前:nobodyさん mailto:sage [2009/07/22(水) 08:22:08 ID:???]
Hello! Smarty

517 名前:nobodyさん [2009/07/24(金) 20:52:45 ID:kF0trrBu]
で、お前らキャッシュ機能って使ってる?

518 名前:nobodyさん mailto:sage [2009/07/24(金) 22:28:00 ID:???]
キャッシュって使うもんなの?
Smartyだと使わされるもんだと思ってたよ。

519 名前:nobodyさん mailto:sage [2009/07/24(金) 22:42:57 ID:???]
>>518
コンパイル済みテンプレートとキャッシュを混同してるだろw


俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。

520 名前:nobodyさん mailto:sage [2009/07/25(土) 00:10:16 ID:???]
>>519
批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?



521 名前:nobodyさん mailto:sage [2009/07/25(土) 01:34:19 ID:???]
キャッシュ使うとテンプレートの更新が反映されないんだが
更新したらキャッシュ切らないとだめなの?

522 名前:519 mailto:sage [2009/07/25(土) 05:09:32 ID:???]
>>520
Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。

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

DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。

523 名前:nobodyさん mailto:sage [2009/07/25(土) 11:35:37 ID:???]
>>521
テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな

524 名前:nobodyさん mailto:sage [2009/07/26(日) 02:40:29 ID:???]
>>523
ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?

俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!

525 名前:nobodyさん mailto:sage [2009/07/26(日) 03:26:35 ID:???]
じゃDBデータがあるサイトの場合は
その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?

526 名前:nobodyさん mailto:sage [2009/07/26(日) 04:04:17 ID:???]
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、
毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。

コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。

527 名前:nobodyさん mailto:sage [2009/07/27(月) 11:12:36 ID:???]
テンプレート自体をDBに格納してるって話じゃないの?

528 名前:nobodyさん mailto:sage [2009/07/27(月) 11:30:56 ID:???]
え?

529 名前:nobodyさん mailto:sage [2009/07/27(月) 12:48:51 ID:???]
へ?

530 名前:nobodyさん mailto:sage [2009/07/27(月) 17:40:06 ID:???]
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。

上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?



531 名前:nobodyさん mailto:sage [2009/07/27(月) 22:41:03 ID:???]
え?

532 名前:nobodyさん mailto:sage [2009/07/28(火) 10:37:13 ID:???]
テンプレートってDBとかに格納しておけるの?
できるならすごい便利なんだが

533 名前:nobodyさん mailto:sage [2009/07/28(火) 14:22:43 ID:???]
>>532
できなくはないでしょ

534 名前:nobodyさん mailto:sage [2009/07/28(火) 15:09:38 ID:???]
>>532
Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。

535 名前:nobodyさん mailto:sage [2009/07/28(火) 16:09:45 ID:???]
できなくないのは分かるけど
いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?

536 名前:nobodyさん mailto:sage [2009/07/28(火) 17:56:09 ID:???]
>>535
updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね

537 名前:nobodyさん mailto:sage [2009/07/28(火) 20:41:09 ID:???]
>>535
CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。


制作の手間暇考えたら、メリットは薄いと思うけど。

538 名前:nobodyさん mailto:sage [2009/07/29(水) 22:00:38 ID:???]
>>535
ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。

539 名前:nobodyさん mailto:sage [2009/07/30(木) 00:20:18 ID:???]
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…

540 名前:nobodyさん mailto:sage [2009/07/30(木) 12:07:42 ID:???]
>>539
DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。



541 名前:nobodyさん mailto:sage [2009/07/30(木) 12:13:33 ID:???]
少し腐ったぐらいが美味しい...

542 名前:nobodyさん mailto:sage [2009/07/30(木) 12:16:56 ID:???]
ファイルは数が増えるとどんどん大変になるんだよな

543 名前:nobodyさん mailto:sage [2009/07/30(木) 16:35:27 ID:???]
システム作る側は楽かもね。

デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。

544 名前:nobodyさん mailto:sage [2009/07/30(木) 16:40:57 ID:???]
ディレクトリ分けもせずに700個のHTMLと格闘してる奴を見てるとホント馬鹿だと思えてくる

545 名前:nobodyさん mailto:sage [2009/07/30(木) 17:12:18 ID:???]
そんな奴いねーよw

546 名前:nobodyさん mailto:sage [2009/07/30(木) 18:40:48 ID:???]
700個のHTMLって時点でテンプレートを活かしてない感じが…

547 名前:nobodyさん mailto:sage [2009/07/30(木) 18:50:56 ID:???]
テンプレどころかCSSすら使ってないんですわ、マジで。

548 名前:nobodyさん mailto:sage [2009/07/30(木) 18:58:17 ID:???]
でも場末のウェブ制作屋ってほんとひどいからね。
ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。

549 名前:nobodyさん mailto:sage [2009/07/30(木) 21:03:15 ID:???]
>>543
流し込み作業をプログラムですれば良いだけだろ
一括アップロードと変わらん

550 名前:nobodyさん mailto:sage [2009/07/30(木) 22:46:24 ID:???]
>>549
それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。



551 名前:nobodyさん mailto:sage [2009/07/30(木) 23:54:04 ID:???]
というかDBなんてある意味ファイル管理をラップしたようなもんだから
DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。

そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。

552 名前:nobodyさん mailto:sage [2009/07/31(金) 00:03:20 ID:???]
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ

553 名前:nobodyさん mailto:sage [2009/07/31(金) 01:55:56 ID:???]
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか?


って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど

554 名前:nobodyさん mailto:sage [2009/07/31(金) 02:04:43 ID:???]
>>552
制作、運用、実行コスト、全てが大きく変わるわw

検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。

555 名前:nobodyさん mailto:sage [2009/07/31(金) 02:43:31 ID:???]
ナンセンスってほどでも無いっしょ
ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし

556 名前:nobodyさん mailto:sage [2009/07/31(金) 03:11:10 ID:???]
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは
DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない

むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック

557 名前:nobodyさん mailto:sage [2009/07/31(金) 03:49:06 ID:???]
>>555
だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。

>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。

558 名前:nobodyさん mailto:sage [2009/07/31(金) 04:25:59 ID:???]
>>557
ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ

559 名前:nobodyさん mailto:sage [2009/07/31(金) 04:42:31 ID:???]
>>558
FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。

 ・DBコネクション等の負荷が無い
 ・当然PHP側のコードもシンプル
 ・SVN等のバージョン管理システムが使える
 ・使い慣れたエディタで直接編集が可能
 ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
 ・当然複雑な管理画面も不要になる為実装コストは激減

これらはFSなら特別な実装は不要。
君はDBで実装出来るか?

検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。

逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。

560 名前:nobodyさん mailto:sage [2009/07/31(金) 05:22:21 ID:???]
定量的の意味知ってるか?



561 名前:nobodyさん mailto:sage [2009/07/31(金) 05:56:21 ID:???]
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。

562 名前:nobodyさん mailto:sage [2009/07/31(金) 10:54:30 ID:???]
まぁ、喧嘩するなや。
第三者からみたら、有益な討論してるように感じるんだから。

563 名前:nobodyさん mailto:sage [2009/07/31(金) 11:13:51 ID:???]
>>561
低学歴乙

564 名前:nobodyさん mailto:sage [2009/07/31(金) 11:35:24 ID:???]
>>562
有益かはともかくSmartyの議論ではなさそうだな。

565 名前:nobodyさん mailto:sage [2009/07/31(金) 12:20:19 ID:???]
>>564
Smartyの使い方に関する議論だろ

566 名前:nobodyさん mailto:sage [2009/07/31(金) 15:05:22 ID:???]
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ

567 名前:nobodyさん mailto:sage [2009/07/31(金) 16:10:10 ID:???]
逆だと思うが。PHPを使えるプログラマー用の技術だろ。

568 名前:nobodyさん mailto:sage [2009/07/31(金) 18:56:10 ID:???]
>>563
答えられない質問には煽る…典型的な厨ですね。

定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。

569 名前:nobodyさん mailto:sage [2009/07/31(金) 19:46:53 ID:???]
>>568
俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた


> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない

> ・当然PHP側のコードもシンプル
プラグインで済むから同じ

> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ

> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと

> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで

> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん

> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分


テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。

570 名前:nobodyさん mailto:sage [2009/07/31(金) 19:49:07 ID:???]
ファイル操作用のPHPコードと
DB操作用のSQLでは、後者の方が自由度高いと思うけどな



571 名前:nobodyさん mailto:sage [2009/07/31(金) 20:49:32 ID:???]
>>568
煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?

572 名前:nobodyさん mailto:sage [2009/07/31(金) 20:58:48 ID:???]
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか

573 名前:nobodyさん mailto:sage [2009/07/31(金) 21:21:59 ID:???]
>>571
「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?

574 名前:nobodyさん mailto:sage [2009/07/31(金) 23:21:12 ID:???]
>>569
> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。

> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。

> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。

> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?

> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?

> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。

> phpMyAdminで十分
上に同じ。

> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。

>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。

575 名前:nobodyさん mailto:sage [2009/08/01(土) 01:20:41 ID:???]
だから、いちいち煽り入れるなって
お前がせっかく書いたレスも陳腐な物になるぞ

576 名前:nobodyさん mailto:sage [2009/08/01(土) 23:36:43 ID:???]
>>571はどこいっちゃったの?

577 名前:nobodyさん mailto:sage [2009/08/02(日) 01:41:46 ID:???]
お前がいい加減にしろ

578 名前:nobodyさん mailto:sage [2009/08/02(日) 01:48:38 ID:???]
>>571はどこいっちゃったの?

579 名前:nobodyさん mailto:sage [2009/08/02(日) 03:05:41 ID:???]
まぁ普通はDBを使うメリットなんて無いって事さ
DB憶えたての頃は俺も無闇にDB化したがったものだ

580 名前:nobodyさん mailto:sage [2009/08/03(月) 01:13:56 ID:???]
じゃ、大手ポータルサイト(ブログとか)って
テンプレートをDBに入れずにファイルで読み書きしてるのかな?



581 名前:nobodyさん mailto:sage [2009/08/03(月) 03:29:39 ID:???]
そんな極少数の大規模案件を例えに出されてもなぁ・・・
使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)

要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。

582 名前:nobodyさん mailto:sage [2009/08/03(月) 09:46:29 ID:???]
>>581
DB使うメリットないとか言っといて
結局要件しだいかよw


583 名前:nobodyさん mailto:sage [2009/08/03(月) 10:57:19 ID:???]
>>581
つまり、結局は「DB化した方が遥かに楽」なケースが”ある”ということですね

584 名前:nobodyさん mailto:sage [2009/08/03(月) 17:52:34 ID:???]
>>582-583
最初から『意味も無く』FSをDBに置き換えるのがナンセンスと書いてるじゃないかw

揚げ足取りはいいから、具体的なメリットデメリットを提示してくれよ、
大手が使ってるとか、Open系CMSが使ってるからでは話にならん。

585 名前:nobodyさん mailto:sage [2009/08/03(月) 18:04:36 ID:???]
っていうか大手CMSサイトってPHP+Smartyなの?その時点でその話は破綻している。

586 名前:nobodyさん mailto:sage [2009/08/03(月) 18:24:53 ID:???]


どちらも都合のいいように解釈しすぎで、この話はいつまで経っても平行線。

587 名前:nobodyさん mailto:sage [2009/08/03(月) 18:59:14 ID:???]
平行線にすらなっていない。
DB厨がファビョっているだけだ。

588 名前:nobodyさん mailto:sage [2009/08/03(月) 20:12:30 ID:???]
ファビョってるのはむしろお前だろ?1人で戦っているつもりだろうがw

589 名前:nobodyさん mailto:sage [2009/08/03(月) 21:44:15 ID:???]
いちいち煽りに反応しなくていいからw 

とりあえず君のすばらしい経験談と、DB捌きっぷりをこのスレに轟かせれば、
もう少しましな流れになるんじゃないかな?

(^o^)でーたべーす は すごく すごい!・・・なぜなら、すごいから!
(^o^)でーたべーす の すごさがわからないやつは すごくない!

590 名前:nobodyさん mailto:sage [2009/08/03(月) 22:23:10 ID:???]
「要件次第でDB使う」でみんな納得。
丸く納まってよかった。




591 名前:nobodyさん mailto:sage [2009/08/03(月) 22:34:30 ID:???]
以下Smarty3を語るスレになりました。
開発ペース遅すぎるよね。

592 名前:nobodyさん mailto:sage [2009/08/04(火) 00:10:08 ID:???]
htmltemplate.php で十分だしー

593 名前:nobodyさん mailto:sage [2009/08/04(火) 00:13:10 ID:???]
>>590
すまんけどどういう要件ならDB、FSを使うべきかまとめてくれないか?

594 名前:nobodyさん mailto:sage [2009/08/04(火) 01:04:56 ID:???]
>>593
大規模案件ならDB でいいんじゃないか。

595 名前:nobodyさん mailto:sage [2009/08/04(火) 01:51:48 ID:???]
>>593
基本的にはFSじゃないかね。
DBは使う必要があれば使えばいい。
あまり思い浮かばないし、実例も聞かないけどね。

596 名前:nobodyさん mailto:sage [2009/08/04(火) 02:01:18 ID:???]
すまん
結局>>581が結論でいいんじゃないかと言いたかった。

597 名前:nobodyさん mailto:sage [2009/08/04(火) 09:05:44 ID:???]
OK


598 名前:nobodyさん mailto:sage [2009/08/04(火) 11:09:38 ID:???]
>>591
ぜひ参画してくださいよ

599 名前:nobodyさん mailto:sage [2009/08/04(火) 11:24:56 ID:???]
大規模案件にはJAVAという逆説。

600 名前:nobodyさん [2009/08/10(月) 18:05:18 ID:euq/7Zv+]
すみません、質問です
テンプレートファイル内で、{php}〜{/php}って形で、phpのプログラムを実行出来ますが、
この「〜」の部分で、assignされた変数を操作することは出来ないでしょうか

{php}
//ここで{$name}の中身を変更したり、{$name}をキーにして画像を出力する関数を実行したい
{/php}

私の名前は{$name}です

こんな感じで…
よろしくお願いします。



601 名前:nobodyさん mailto:sage [2009/08/10(月) 18:19:27 ID:???]
そのロジックはテンプレートじゃなくて、呼び出し元に書くべきでは・・・

やった事ないけど、Smartyインスタンスをなんらかの形で参照すれば出来るんじゃない?
グローバル変数にするとか、シングルトン使うとか、etc

602 名前:nobodyさん [2009/08/10(月) 18:26:43 ID:euq/7Zv+]
>>601
ありがとうございます、やっぱり呼び出し元でやるべきなんでしょうか?
いまassignされて引き渡されるデータが配列一つなので、それを元にテンプレートでやった方がスマートなんですよね
呼び出し元で各値の条件分岐分やるとassign assign assign…とassignだらけになってしまうので
テンプレ長くする方が問題かなぁ

603 名前:nobodyさん mailto:sage [2009/08/10(月) 18:35:23 ID:???]
>>602
もしかしてこんな感じで解決しない?

if(...) {
$a=1;
} else {
$a=2;
}
$smarty->assign('a',$a);


604 名前:nobodyさん [2009/08/10(月) 18:43:35 ID:euq/7Zv+]
>>603
ありがとうございます、そうですねー、確かにassign段階で書くとそんな感じですよね
決めました。そうします。
テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
いや、テンプレ変更する時のデメリットの方が大きそうだし。。
アドバイスありがとうございました!

605 名前:nobodyさん mailto:sage [2009/08/10(月) 19:16:08 ID:???]
>>604
条件分岐やるとassignが増えるってどういうこと?
配列をそのまま使えば?

606 名前:nobodyさん mailto:sage [2009/08/10(月) 19:21:31 ID:???]
>テンプレかアクションかどっちかが絶対ゴチャゴチャするなら一緒ですねもう。
テンプレートとロジックの切り分けは、そのゴチャゴチャを纏める事にあるんだよw

アクションとテンプレ両方で値を編集しちゃうと、
どこでバグが発生したか突き止められなくなっちゃうでせう。

607 名前:nobodyさん mailto:sage [2009/08/10(月) 19:38:15 ID:???]
>>605
例えば、入力任意のファックス番号とかあったとして、必須入力だったら確かにテンプレでは配列そのまま使って
FAX:{$ary.faxNum} で済むけど、必須じゃないんでその前段階のアクションで
if($ary['faxNum'];){$faxNum = $ary['faxNum'];}
else{$faxNum = "-";}
//assign処理
ってやる必要あるじゃないですか。それが嫌だったんですよ。
必須入力じゃない項目の数だけassignしまくらなきゃいけない。めんどくさいなぁと。
そこでphpかsmartyの構文で、テンプレの中で{if}とかしようと思ったんだけど…

でも、確かに>>606の言う通り、あっちこっちにまたがって値を編集しちゃダメですね。
smarty構文はデザインとか見た目(まさにテンプレート)を自動生成するためだけに使わなきゃなぁと
ようやく結論づきました。

608 名前:nobodyさん mailto:sage [2009/08/10(月) 20:32:12 ID:???]
>>607
if(!isset($ary['faxNum'])) ($ary['faxNum'] = "-";

って書いて、$ary変数だけassignすればいいんじゃない?


その程度の表示分岐処理なら、テンプレート側でもOKかと思う。

{$ary.faxNum|default:"-"}

でいけない?

609 名前:nobodyさん mailto:sage [2009/08/10(月) 20:50:18 ID:???]
値未入力であることを示すのに、何を表示するのかはview側の仕様だわな。

ひょっとしたら先々仕様変更で「入ってまへんで、へよへよ」と表示するようになるかもしれん。
そのとき内部データにそんな値(内容)入れたくないだろ?
608の後半みたいにテンプレ側でやった方がいいよ。

610 名前:nobodyさん mailto:sage [2009/08/10(月) 22:51:30 ID:???]
>>608-609
うーん、そうか。
ケースバイケースでどうやるべきかじっくり考えてやってみるね
ありがとう



611 名前:nobodyさん mailto:sage [2009/08/10(月) 23:13:31 ID:???]
度々申し訳ない
{if}--{/if}の中で、smarty変数を生成できないの? assignと同じことをしたいんだけど
{if $var eq "hoge"}
$newVar = "hogeでした";
{/if}
みたいな…

612 名前:nobodyさん mailto:sage [2009/08/10(月) 23:15:44 ID:???]
assignでなんでだめなの?

613 名前:nobodyさん mailto:sage [2009/08/10(月) 23:42:39 ID:???]
>>612
assignはphp側の処理ですよね、テンプレ側で値を割り当てたいので。。

614 名前:nobodyさん mailto:sage [2009/08/11(火) 01:09:27 ID:???]
{assign} タグ使えば?

615 名前:nobodyさん mailto:sage [2009/08/11(火) 03:32:24 ID:???]
>>614
ありがとう! こんなのがあったのか。助かりました!

616 名前:nobodyさん mailto:sage [2009/08/11(火) 03:33:31 ID:???]
assignassign言うから当然テンプレート側のこと言ってると思ったら
assignタグすら知らんかったのか。

617 名前:nobodyさん mailto:sage [2009/08/11(火) 12:14:27 ID:???]
だからphpタグなんぞで処理したかったのか・・・。

618 名前:nobodyさん mailto:sage [2009/08/12(水) 05:56:44 ID:???]
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)

という配列があります。
これのphotoNameを引き出したくて以下のものを実行してますがうまくいきません。何が原因でしょうか?
{foreach from=$hogeAry item=varAry}
名前は:{$varAry.photoName}<br />
{/foreach}

{$hogeAry.0.photoName} なら、ちゃんとgalleryPic7が出力されます

619 名前:nobodyさん mailto:sage [2009/08/12(水) 06:23:13 ID:???]
varAryの中を見てみたら?

620 名前:nobodyさん mailto:sage [2009/08/12(水) 08:01:33 ID:???]
ループは回ってる?「名前は:」って文字は出力されてる?

{foreach from=$hogeAry item=varAry}
{foreach from=$varAry item=item key=key}
{$key}={$item}<br>
{/foreach}
{/foreach}

で中身表示テストしてみ。



621 名前:nobodyさん [2009/08/12(水) 10:23:00 ID:u9+iooGY]
>>620
0=z
0=z
0=z
とだけ出力して終わってます。。ループ自体はしてるってことですよね?
なんでだろ? 配列じゃないのかな。
上で書いた配列は、以下の実行結果です。(zendFWを使った、クエリの結果)

function gallery($uType,$uId){
$table = $this->_config->table->gallery;
$stt = $this->_db->fetchAll("SELECT * FROM {$table} WHERE `uType`=? AND `uId`=? AND `photo_on`=1 ORDER BY `id` LIMIT 10", array($uType,$uId));
return $stt;
}

$this->view->hogeAry = $this->_db->gallery('spot',$uId);


622 名前:nobodyさん mailto:sage [2009/08/12(水) 10:32:56 ID:???]
>>621
Smarty側に正常にassign出来てない可能性大。

1. hogeAryが正常な配列か確認。
var_dump($this->view->hogeAry);

2. hogeAryがSmartyにassignされてるか確認。

623 名前:nobodyさん [2009/08/12(水) 11:18:13 ID:u9+iooGY]
>>622
var_dump($this->view->hogeAry); の結果は
$hogeAry = Array (
[0] => Array ( [id] => 7 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明1 [photoName] => galleryPic7 [photo_on] => 1 )
[1] => Array ( [id] => 9 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明2 [photoName] => galleryPic9 [photo_on] => 1 )
[2] => Array ( [id] => 10 [uId] => 10237 [uType] => hoge [photo_text] => 写真の説明4 [photoName] => galleryPic10 [photo_on] => 1 )
)

.tplでの
{$hogeAry|@var_dump} の結果は
Array ( [0] => [1] => [2] => ) 1

{$hogeAry.0.photoName} の結果は
galleryPic7

ちゃんとテンプレートまでassignされてきてるってことですよね?
foreachだけがうまくいかないってことかなー

624 名前:nobodyさん mailto:sage [2009/08/12(水) 11:41:14 ID:???]
619はシカトですかそうですか

625 名前:nobodyさん [2009/08/12(水) 12:16:00 ID:u9+iooGY]
>>624
すみません、varAryの中身のチェックの方法がわからなかったもので。。

{foreach item=varAry from=$hogeAry}
{$varAry|@var_dump}<br />
{/foreach}
とりあえず思いつく限りで上記をやったら
string(0) ""
string(0) ""
string(0) ""
が返ってきます

{foreach item=varAry from=$hogeAry}
{$varAry.photoName}<br />
{/foreach}
だと何も返ってきません(改行3つだけです)

ほんとに済みませんでした

626 名前:nobodyさん mailto:sage [2009/08/12(水) 12:34:49 ID:???]
原因切り分けてみたら?
本当にDBから値は取れてるのか、違う関数コールしてないか、
ただの配列なら表示できるのか、などなど。
可能だったら再現するコードも貼って。

627 名前:nobodyさん mailto:sage [2009/08/12(水) 13:54:35 ID:???]
{debug} タグでassignされてる変数確認してみ。

628 名前:nobodyさん [2009/08/12(水) 17:19:17 ID:u9+iooGY]
>>626-627
どうもありがとうございます
普通の配列なら大丈夫です。同じDBから同様の手続きで取得してるクエリ結果(通常の配列)があるんですが、
それはforeachで解析できています。
{debug}はdisplay形式じゃないとダメみたいで、僕のやり方がそうじゃないので動きませんでした。

それで、今ループ処理をsection形式で試してみたんですが、section なら二次元配列の処理大丈夫でした。(以下が動きました。)
{section name=varAry loop=$hogeAry}
{$smarty.section.counter.total}<br> (このカウンターは動きませんでした)
要素: {$hogeAry[varAry].id}<br>
要素: {$hogeAry[varAry].photoName}<br>
要素: {$hogeAry[varAry].photo_text}<br>
{/section}
とりあえず、お騒がせして申し訳なかったですが、foreachは諦めてこっちで極力対応したいです。

629 名前:nobodyさん mailto:sage [2009/08/13(木) 16:40:28 ID:???]
結局原因は何なの?

630 名前:nobodyさん [2009/08/21(金) 13:05:34 ID:WhelcFIU]
質問させてください。
テンプレート中の {$hoge}って変数に対してphpのクラス中のメソッドを実行するって可能でしょうか?
これまでは、php中で
$hoge=$instance->method($hoge1,引数1,引数2);
として、適切な値を返してたんですが、同じ事をテンプレートの中でやりたいと思います。
{$hogetext|nl2br}などでphp関数を実行できるのは知ってるんですが、調べたところメソッドの実行は
見つけられませんでした。無理なんでしょうか?
assign 前に実行すべき?



631 名前:nobodyさん mailto:sage [2009/08/21(金) 14:42:48 ID:???]
修飾子プラグインの中でメソッド呼べばよいのでは

632 名前:nobodyさん mailto:sage [2009/08/21(金) 18:37:07 ID:???]
>>631
どうもありがとうございます
修飾子プラグイン、知りませんでした! 勉強になります、ありがとう

633 名前:nobodyさん mailto:sage [2009/08/21(金) 22:16:33 ID:???]
プラグインの中で他のプラグインの機能を呼び出すことってできますか?

634 名前:nobodyさん mailto:sage [2009/08/21(金) 22:16:56 ID:???]
できるよ

635 名前:nobodyさん [2009/08/22(土) 00:43:33 ID:qs0RE9DR]
修飾子プラグインの勉強始めたんですが、引数を2つもたせる方法がわかりません。
{$num}というsmarty変数に対して、

function smarty_modifier_NUMtoTEXT($num,$aryName){
 return $allAry[$aryName][$num];
}
というプラグインを実行したいんですがどう書いたら良いんでしょうか?
{NUMtoTEXT:$num:"boyAry"}とかやってみたんですがうまくいきません。

636 名前:nobodyさん mailto:sage [2009/08/22(土) 00:59:28 ID:???]
>>635
www.smarty.net/manual/ja/language.modifiers.php

637 名前:nobodyさん mailto:sage [2009/08/22(土) 05:08:49 ID:???]
>>634
kwsk

638 名前:nobodyさん mailto:sage [2009/08/22(土) 12:26:11 ID:???]
>>637
ggrks

639 名前:nobodyさん mailto:sage [2009/08/22(土) 23:19:02 ID:???]
>>636
返事遅れました。うまくいきました、ありがとう

640 名前:nobodyさん mailto:sage [2009/08/25(火) 00:15:56 ID:???]
foreach だの sectionだのって、なんで素直にfor文用意してくれないんだろね
php用テンプレートなのにわざわざ特殊な書式だし、頭に入らなくてしょっちゅうマニュアル見てる
頭悪くて悲しいな



641 名前:nobodyさん mailto:sage [2009/08/25(火) 06:09:04 ID:???]
>>640
Smarty3で追加される

642 名前:nobodyさん mailto:sage [2009/08/25(火) 13:55:26 ID:???]
>>641
ほんとに? 情報ありがとう、気分が楽になったよw
そういう情報を仕入れる前向きさがないとイカンなぁ

643 名前:nobodyさん mailto:sage [2009/08/26(水) 12:19:29 ID:???]
キャッシュしてできたファイルの中にSmartyタグって入れられないよね?

検索フォームがあったとして
<input name="keyword" type="text" value="{$smarty.post.keyword}">

として検索後にデフォルト値を入れてるんだけど、
キャッシュしたらこういう事が出来ないと思って。

644 名前:nobodyさん mailto:sage [2009/08/26(水) 13:37:23 ID:???]
>>643
insertタグで出来るんじゃね?

あと検索結果画面だと思うけど、それってキャッシュするべきじゃなくね?w
するにしてもSmarty側でするもんじゃないと思う。

645 名前:nobodyさん mailto:sage [2009/08/26(水) 14:37:50 ID:???]
そのキーワード毎にキャッシュしたいのならば、それをキャッシュIDにすれば。

646 名前:nobodyさん mailto:sage [2009/08/26(水) 23:01:41 ID:???]
>>644-645
ページのサイドバーをキャッシュしているんだが、
その箇所に検索フォームやログインフォームが入っているんだよ。
確かにキャッシュするべきじゃないが、
部分毎にわかるとキャッシュする意味がないかな?とも思ったり。

やっぱり、設計に問題あるかも・・。

647 名前:nobodyさん [2009/08/28(金) 14:54:05 ID:45fY5t7E]
サイドバーの質問が出てるので聞きます
dbの返り値次第でサイドバーのデザインが数パターンに変わる場合、smartyのif文で書き分けするしかないのかな?
正直{if}に限らず醜いんで多用したくないんですよね…

部分的にデザインパターンを読み込むなど、他の解決方法はないですか?

648 名前:nobodyさん mailto:sage [2009/08/28(金) 15:03:05 ID:???]
コントローラ側で制御すれば?

649 名前:nobodyさん mailto:sage [2009/08/28(金) 15:25:18 ID:???]
テンプレートを数パターン用意すれば?

650 名前:nobodyさん [2009/08/28(金) 16:29:28 ID:45fY5t7E]
>>648−648
そうですね、それがいいですね
ありがとうございました



651 名前:nobodyさん [2009/08/28(金) 16:30:15 ID:45fY5t7E]
>>648-649でした
ありがとう

652 名前:nobodyさん [2009/08/28(金) 17:53:20 ID:MIAE9vSw]
Smartyテンプレif文条件式で、自作のSmartyプラグイン関数を
呼び出すことはできないのでしょうか?



653 名前:nobodyさん mailto:sage [2009/08/28(金) 19:07:18 ID:???]
できるんじゃね?

654 名前:nobodyさん [2009/09/02(水) 05:34:35 ID:55UeyG/q]
{assign}の中で、修飾子プラグインをvalueにもたせることできますか?

{assign var=uType value=$resultAry.uType|NumToText} みたいなことをしたいんですが
試してみてもタグがモロ出しになって修飾子が実行されてないようです。
仕様でしょうか?
書き方が変だとしたら、対処法を教えてください。よろしくお願いします。

655 名前:nobodyさん mailto:sage [2009/09/02(水) 09:19:59 ID:???]
タグがモロ出し の意味がわからない。

656 名前:nobodyさん mailto:sage [2009/09/02(水) 09:35:13 ID:???]
>>654
capture

657 名前:nobodyさん mailto:sage [2009/09/03(木) 08:24:48 ID:???]
>>655,656
ありがとうございました

658 名前:nobodyさん mailto:sage [2009/09/06(日) 21:25:22 ID:???]
負荷テストで調べたんだが、キャッシュって結構効いてるな
1000アクセスある場合を想定してテストしたんだが、
約10〜15%ほどページの読み込みが早かった

659 名前:nobodyさん mailto:sage [2009/09/07(月) 08:07:01 ID:???]
なにをいまさら・・

660 名前:nobodyさん mailto:sage [2009/09/07(月) 22:10:32 ID:???]
>>659
まあ、実感するのはなかなか難しいからな。



661 名前:nobodyさん [2009/09/07(月) 23:17:57 ID:K7GASBY+]
二次元配列を出力しようとすると、
Warning: htmlspecialchars() expects parameter 1 to be string, array given in パス modifier.escape.php on line 26
というエラーが出ます。
調べたところ、色々なサイトで同じ問題を扱ってるのを見つけました。
questionbox.jp.msn.com/qa4209668.html
pcmemorogu.blog14.fc2.com/blog-entry-20.html など

が、これらでの答えの通り、FOREACHする配列全てに $ary|smarty:nodefaults としてみたんですが
まだ完全に上記のエラーが消えません。
他にどんな可能性があるでしょうか?
配列だけでなく、通常のassignされた変数に対しても文字列でなければセットすべきなのでしょうか?
とりあえずやっていますが、変化がありません

662 名前:nobodyさん mailto:sage [2009/09/07(月) 23:25:11 ID:???]
アウトプットフィルタにhtmlspecialcharsが指定されてるんじゃないの?

つか二次元配列を出力しなければならない例が思いつかないけど

663 名前:nobodyさん [2009/09/07(月) 23:49:42 ID:K7GASBY+]
>>662
ありがとうございます
すいません、お礼書きつつ修正重ねてたら上手くいきました
foreachやsectionの中の配列だけでなく、ifの条件節部分でも配列に対しては|smarty:nodefaultsする必要があったようです。

if($testAry|count >0) を
if($testAry||smarty:nodefaults|count >0) にしたら治りました

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

664 名前:nobodyさん mailto:sage [2009/09/08(火) 00:19:32 ID:???]
modifier.escape.phpを修正する方が早いよ

665 名前:nobodyさん [2009/09/08(火) 00:25:48 ID:qSoCHGpf]
>>664さんはそうしてますか?
どう修正したらいいのやら、、と、調べたらありました。

blog.asial.co.jp/309
-----
# function smarty_modifier_escape($string, $esc_type = 'html', $char_set = 'ISO-8859-1')
# {
# // 配列が渡ってきたら何もせずにreturn
# if (is_array($string)) return $string;
# switch ($esc_type) {
# case 'html':

たしかにこれでよさそう。
664さんが別の方法で対応してるなら教えてもらえると嬉しいです。比べつつ勉強したいので。
自分で弄る自信はまだないんですよね、知らないところで悪影響でそうで…

666 名前:nobodyさん mailto:sage [2009/09/08(火) 00:43:09 ID:???]
>>665
if (is_array($string)) return $string; 
で運用してるけど特に問題は無いよ。
配列が来た場合は、全ての要素を再帰的に処理するとかも試したけど、何か不都合があって止めた記憶・・・。

plugins_fix ディレクトリを作り、modifier.escape.php をコピーして修正を施す。
$smarty->plugins_dirの先頭にplugins_fixディレクトリを追加する。
って方法で修正を当てている。
default_modifiers使うと{debug}にも影響が出るから、同様に修正を当てたファイルをplugins_fixディレクトリに置いてる。

667 名前:nobodyさん [2009/09/08(火) 00:47:00 ID:qSoCHGpf]
>>666
詳しい説明ほんとにありがとうございました
debugってまだやったことないのでそっちはわからないですが、参考にさせてもらいます
ありがとうございました。

668 名前:nobodyさん mailto:sage [2009/09/20(日) 18:33:32 ID:???]
だれか公式以外でsmartyダウンロードできるところ知らない?
クソ公式落ちまくっててDLできないんだけど
www.smarty.net/
だれかソースくらいは分散しとけって忠告してやれよ

669 名前:nobodyさん mailto:sage [2009/09/20(日) 18:55:26 ID:???]
落とせるじゃん

670 名前:nobodyさん mailto:sage [2009/09/20(日) 19:52:57 ID:???]
復旧した



671 名前:nobodyさん mailto:sage [2009/09/24(木) 18:00:24 ID:???]
初心者なのであまり良く分からないのですが、テンプレートエンジンはSmarty以外に別のテンプレートも同時使用出来るのでしょうか?
JavaScriptのライブラリのように互いに干渉してしまったりするのでしょうか?

また、調べてみると、何かテンプレートを扱う為にはPHPを学んでいても1〜数週間は馴れるまでかかると書いてありました
ですのでまず最初に一つテンプレートを使用してみようと思っているのですが、やはりSmartyが一番良いのでしょうか?

672 名前:nobodyさん mailto:sage [2009/09/24(木) 18:07:40 ID:???]
まずテンプレート抜きでPHPを身に付けたほうがいいかと

673 名前:nobodyさん mailto:sage [2009/09/25(金) 14:31:20 ID:???]
SmartyってPHP習得した後にやろうとするとハッキリ言って困惑するよな
何だコレ?って感じ
今までPHP学習してきたのってあんま意味無いじゃんって思ったよ
例えばforeachとかさ
HTML?っても最初思った



674 名前:nobodyさん mailto:sage [2009/09/25(金) 14:34:03 ID:???]
PHP習得した後にやらないでいつやるんだよ

675 名前:nobodyさん mailto:sage [2009/09/25(金) 15:24:47 ID:???]
誰もが通る道さ・・・
それを不毛と感じるか、テンプレートエンジンの利点に気がつけるかでPGとしての資質がわかる。

676 名前:nobodyさん mailto:sage [2009/09/25(金) 15:39:52 ID:???]
いや普通につくればphpのforeachもsmartyのforeachも必要だろ。


677 名前:nobodyさん mailto:sage [2009/09/25(金) 21:46:51 ID:???]
そういう事言ってるんじゃないだろ。

678 名前:nobodyさん mailto:sage [2009/09/25(金) 21:47:21 ID:???]
じゃどういうことよ

679 名前:nobodyさん mailto:sage [2009/09/25(金) 22:57:18 ID:???]
同じforeachでも書き方が違って、最初戸惑うってことだろ?

680 名前:nobodyさん mailto:sage [2009/09/25(金) 22:59:20 ID:???]
えっ



681 名前:nobodyさん mailto:sage [2009/09/25(金) 23:47:30 ID:???]
ちゅう

682 名前:nobodyさん mailto:sage [2009/09/26(土) 02:10:40 ID:???]
Smarty 3 is almost here!
[24-Sep-2009] Yes, yes I know. The Smarty 3 beta is taking much longer than expected, but we wanted to be sure we had everything right.
Our preliminary performance tests are already showing us very promising speed improvements over Smarty 2 (2-5x on average), and we're not done! To recap,
Smarty 3 is a 100% rewrite from the ground up, and it is PHP 5 only. We will be getting a feature list up with the Beta, but let me give a quick summary:

683 名前:nobodyさん mailto:sage [2009/09/26(土) 04:04:41 ID:???]
早くなるのはいいな。でも、100%書き直したとなると、いろいろ仕様変わってるのかな。

684 名前:nobodyさん mailto:sage [2009/09/26(土) 09:50:48 ID:???]
100パー書き直したのと、仕様が変わるかどうかは直結しない話でしょう。
むしろ直結するのはバグ率。

685 名前:nobodyさん mailto:sage [2009/09/26(土) 15:22:15 ID:???]
3触ったけどまだ重くて使い物にならないよ。パーサがまともになったせいだろうけど、レンダリングがかなり遅い。
まだかなりバギーだし仕様も固まり切ってないみたいだし、正式リリースは来年末くらいじゃね。

686 名前:nobodyさん mailto:sage [2009/09/28(月) 02:57:25 ID:???]
>>684
直結はしないがPHP周辺ではよくある話だな。
関数を修正してみたら引数の書き方が変わったでござるの巻

687 名前:nobodyさん mailto:sage [2009/09/28(月) 17:38:33 ID:???]
Smarty以外で他にいいテンプレートって何?

688 名前:nobodyさん mailto:sage [2009/09/28(月) 19:12:27 ID:???]
>>687
ttp://www.mimoi.com/product/53

689 名前:nobodyさん mailto:sage [2009/09/29(火) 19:25:53 ID:???]
一応技術板なんだしせめてこのぐらいは・・・
www.j-tsugawa.com/jt-020621-EB3101-G.jpg

690 名前:nobodyさん mailto:sage [2009/09/29(火) 19:36:34 ID:???]
プラスチックが乾いてて、持ち上げようとしただけで割れてしまいそうだ・・・



691 名前:nobodyさん mailto:sage [2009/10/01(木) 12:03:22 ID:???]
流れ図記号は全部○を使っているのは俺だけだろうか。

692 名前:nobodyさん [2009/10/01(木) 18:28:48 ID:KASc2bqu]
//PHP側
$list[0]["text"] = '{ImageBox file="test.jpg"}';

//テンプレート側
{foreach from=$list item="data"}
{$data.text}
{/foreach}

独自関数「ImageBox」で指定したファイルが表示されるようにしたいと思い、
配列をforeachで出力させようとしました。
しかし、{ImageBox}の箇所が変換されずにそのまま文字として出力されます。

指定方法が間違っているのでしょうか?
わかりづらいかと思いますが、アドバイスいただければ助かります。

693 名前:nobodyさん mailto:sage [2009/10/01(木) 20:50:56 ID:???]
PHP側では展開されません。

694 名前:nobodyさん mailto:sage [2009/10/01(木) 21:02:54 ID:???]
そりゃ$list[0]["text"]の内容を書き出してるだけだからな。

phpなら可変関数使うところだが
Smartyはプラグインで可変関数の実装を作らないとダメかも。

695 名前:692 mailto:sage [2009/10/02(金) 00:20:33 ID:???]
>>694
foreachで出力される時に、
変数内のSmarty関数も変換されると思ったのですが、
どうやら違うみたいなんですね・・。

プラグインで実装させるとか、難しそうだ・・・

696 名前:nobodyさん mailto:sage [2009/10/02(金) 00:35:40 ID:???]
そのImageBOXで出力されるものを$out_ImageBOXとか変数に入れ込んでおけば?

697 名前:柏アラフォーパパン& ◆.d6LNJ2fbM.9 [2009/10/02(金) 15:06:34 ID:bCUcRsfE]
dsd

698 名前:nobodyさん mailto:sage [2009/10/03(土) 17:55:56 ID:???]
文字列をテンプレート処理出来るメソッドでも作ればいいんじゃないかね。
$list[0]["text"] = $smarty->fetchFromString('{ImageBox file="test.jpg"}');

699 名前:nobodyさん mailto:sage [2009/10/03(土) 17:57:12 ID:???]
$list[0]["text"] = 'test.jp';

{foreach from=$list item="data"}
{ImageBox file=`$data.text`}
{/foreach}

じゃ駄目なのか?

700 名前:nobodyさん mailto:sage [2009/10/03(土) 18:51:58 ID:???]
よほど特殊な処理をさせたいのでなければ>>699に落ち着くと思う。
まあそういうのはやはりPHPでやるべきだろうな。
smartyは最終出力だけにしておこう。




701 名前:692 mailto:sage [2009/10/04(日) 00:06:35 ID:???]
>>699-700
その方法だと$listに必ず「ImageBox」が無いと駄目です。
ブログみたいに他のタグも挿入したい場合使えないので、
変数(というか配列に入れた値)に、Smartyタグを入れる事を思いつきました。

それで698さんが掻かれているようなプラグインを作って
一旦Smartyタグを処理させてから配列に入れれば、
foreachで出力しても表示されます。
しかし、当然ながらコンパイルファイルが作成されるので
その分ページの生成に時間がかかることになってしまいました・・。
(キャッシュを使えば良いだけですが、なんか気になりました

702 名前:692 mailto:sage [2009/10/04(日) 00:08:43 ID:???]
ちなみに以下のサイトを参考にしました。
ttp://d.hatena.ne.jp/lapis25/20080908/1220861488

>>698さんのソースを頼りに検索したらヒットしました。
凄く参考になりました。ありがとうございます。


703 名前:nobodyさん [2009/10/11(日) 13:15:33 ID:gYB28ahJ]
すみません、質問です
smartyで{if}の中で出力したりすると、このsmartyタグのせいで発生した改行やらスペースやらが
HTMLにもモロに出てしまって美しくありません
どうにかする方法ないでしょうか?

704 名前:nobodyさん mailto:sage [2009/10/11(日) 14:25:24 ID:???]
{strip}{/strip}
で囲うべし。

705 名前:nobodyさん mailto:sage [2009/10/11(日) 15:23:00 ID:???]
>>704
かっこわるいです。次の方お願いします。

706 名前:nobodyさん mailto:sage [2009/10/11(日) 15:43:55 ID:???]
反論ではないけど、
おれはHTMLの頭から終わりまでstripで囲ってるよ。
改行、空白によるブラウザの変なバグにも遭遇しないし、
何より若干ではあるものの軽くなる。
かっこいいかどうかで言えば、おれは改行なしのほうがかっこいいと思う。

707 名前:nobodyさん mailto:sage [2009/10/11(日) 16:11:57 ID:???]
意図した改行を入れたい場合はどうしてるん?
<textarea>の中身とか

708 名前:nobodyさん mailto:sage [2009/10/11(日) 17:59:26 ID:???]
>>704
おおー、そうだそれがありました
ありがとうございました

>>707
<textarea><$hoge|nl2br></textarea>じゃ対処できないもの?

709 名前:nobodyさん mailto:sage [2009/10/11(日) 18:22:54 ID:???]
改行を残したい箇所を
逆にliteralで囲う。

710 名前:nobodyさん mailto:sage [2009/10/12(月) 00:52:20 ID:???]
JavaScriptとか、改行に意味を持つ言語が混在する可能性を考えると一括して{strip}するのは得策じゃない気がする。



711 名前:nobodyさん mailto:sage [2009/10/13(火) 01:13:00 ID:???]
>>703
そこまで気にするなら
{if}
{assign var="hoge"}
{else}
{assign var="hoge"}
{/if}
<textarea>
{$hoge}
</textarea>

712 名前:nobodyさん [2009/10/13(火) 23:52:48 ID:B+0jNtpm]
Smarty3期待アゲ

713 名前:nobodyさん [2009/10/14(水) 00:10:46 ID:k/3ZY/k4]
質問です。

↓の、アンパサンドって何の意味があるのでしょうか?

$smarty =& new Smarty;




714 名前:nobodyさん mailto:sage [2009/10/14(水) 00:27:06 ID:???]
参照代入

715 名前:nobodyさん mailto:sage [2009/10/14(水) 00:36:04 ID:???]
>>713
ないよ。

PHP4でも5でもnewはリファレンスを返すんだけど、
PHP5でそれが明言されるまではnewを=するとnewなオブジェクトがコピーされるという迷信があった。
だから=&と書いてるところがたまにあるけど、Smartyマニュアルでも普通に=だ。
要するに、単なる誤解が生んだもの。

716 名前:nobodyさん mailto:sage [2009/10/14(水) 00:47:30 ID:???]
>>715
ほんとに? 俺も参照代入だよって説明どこかで読んだなぁ
あの解説ウソついたのかしら?

717 名前:nobodyさん mailto:sage [2009/10/14(水) 01:06:18 ID:???]
4なら意味あると思うが

718 名前:nobodyさん mailto:sage [2009/10/14(水) 01:30:24 ID:???]
>>715
つ ttp://jp2.php.net/manual/ja/language.oop.newref.php
どこでそんな嘘をきいたん?

ちなみに5でも代入で変数のコピーが行われるのは同じ。
違うのはオブジェクトのコピー時の内部動作がハッシュテーブルの複製から
オブジェクトの実体の参照カウンタ操作になっている点。(zvalの参照カウンタとは別ね)

719 名前:nobodyさん mailto:sage [2009/10/14(水) 03:14:45 ID:???]
ちょっとコード書いて実験すればわかるだろ
俺面倒だからパスね

720 名前:nobodyさん mailto:sage [2009/10/15(木) 18:15:01 ID:???]
みんなこんな曖昧なままに済ましてきたってことはあまり使ってない機能ってことかな
俺も使った覚えないわ、マニュアル本にも例なんてないし。損してるんだろうか。。



721 名前:nobodyさん mailto:sage [2009/10/16(金) 11:58:47 ID:???]
オブジェクトのリファレンスか。
使い道が思いつかんでもないが実際に
使う場面ってそうそうなさそうな。


722 名前:nobodyさん mailto:sage [2009/10/20(火) 06:10:16 ID:???]
Smarty 3だれか使ってみた??

723 名前:nobodyさん mailto:sage [2009/10/20(火) 10:43:32 ID:???]
使ってみた

724 名前:nobodyさん mailto:sage [2009/10/21(水) 00:53:52 ID:???]
Smarty3微妙だなぁ・・・相変わらず癖の強いコーディングで読むの疲れる。
extendリソースがあるんだけど、使い方解る人いる?

725 名前:nobodyさん mailto:sage [2009/10/21(水) 10:25:55 ID:???]
結局Smartyなんてassign、display、{if}、{foreach}だけで十分じゃん
というかコレが核だと思う
後は必要に応じて・・・って感じで十分だし

726 名前:nobodyさん mailto:sage [2009/10/21(水) 10:59:25 ID:???]
Smarty3のプラグインは何故グローバル関数なんだろ?
どこら変がPHP5 OOPなんだよ

727 名前:nobodyさん mailto:sage [2009/10/21(水) 22:34:20 ID:???]
プロパティもメソッドも全部publicは鬼だ
一方、__callでメソッドの外部化をしてる

extendリソースってどれ??

728 名前:nobodyさん mailto:sage [2009/10/22(木) 01:31:12 ID:???]
>>727
sysplugins/internal.resource_extend.php
ソースコメント読む限りでは他テンプレートエンジンのextendっぽいんだけど、
リソースとして定義されてるので、どう使っていいかよくわからんw

getTemplateSource()読むと、超強引にblockタグとか置換してるみたいなのであまり有用ではなさそうだけど・・・('A`;
2から乗り換える利点がまだ見えないなぁ

729 名前:nobodyさん mailto:sage [2009/10/22(木) 11:33:30 ID:???]
>>725
そんなこといったらPHPだって

730 名前:nobodyさん mailto:sage [2009/10/24(土) 20:08:39 ID:???]
smarty使ってるレンタルブログサイトとかないの?



731 名前:nobodyさん mailto:sage [2009/10/25(日) 04:49:32 ID:???]
>>730
あるとしてもユーザにSmartyフォーマットでのカスタマイズを許可するとは考えにくいな。

732 名前:nobodyさん mailto:sage [2009/10/25(日) 08:28:37 ID:???]
>>730
別にsmartyに限らず、独自の記法などで対応してるところはある。
Smartyじゃないとダメなら自分で作ればいいジャマイカ。

733 名前:nobodyさん mailto:sage [2009/10/27(火) 00:14:32 ID:???]
中身はsmartyだけど、smartyフォーマットは使わせないようにして
<%hogehogeLoop>と書いたら{section name=hoge loop=$id} になるように置換してるブログシステムはあるかもしれない
大体は自前でやってるか、MovableTypeの改造版じゃないかな

734 名前:nobodyさん mailto:sage [2009/10/27(火) 12:20:20 ID:???]
>>725
それだけしか使わないならもっと速いテンプレートエンジンあるんじゃない?

735 名前:nobodyさん mailto:sage [2009/10/27(火) 12:23:42 ID:???]
>>734
それなんてPHP?

736 名前:nobodyさん mailto:sage [2009/10/27(火) 20:55:46 ID:???]
カラーミーショップ プロ
ttp://shop-pro.jp/

ブログじゃなくてネットショップだけど、テンプレートにsmarty使ってるね
EC CUBEの改造版なんだろうけど

737 名前:nobodyさん mailto:sage [2009/10/27(火) 21:04:25 ID:???]
Smartyでレンタルブログ運営したら重くてしかたないんじゃない?
ユーザー大量にいたらキャッシュ効かせても厳しい気がする

738 名前:nobodyさん mailto:sage [2009/10/28(水) 05:06:51 ID:???]
それは設計の問題であり、Smatyが原因にはなり得ない。

739 名前:nobodyさん mailto:sage [2009/10/28(水) 11:11:33 ID:???]
Smartyの設計の問題ってことですね

740 名前:nobodyさん mailto:sage [2009/10/28(水) 13:46:19 ID:???]
おしい。Smartyを使う人の設計の問題。



741 名前:nobodyさん mailto:sage [2009/10/28(水) 15:26:33 ID:???]
>>737
気のせい

742 名前:nobodyさん mailto:sage [2009/10/29(木) 11:06:44 ID:???]
いい話題がありませんねー

743 名前:nobodyさん mailto:sage [2009/10/29(木) 21:54:28 ID:???]
gooブログの有料版の説明のとこにこんな記述がある
{include file="/home/gooblog/Smarty/blog/templates/comment_link.tpl"}

パスにSmarty入ってますがな

744 名前:nobodyさん mailto:sage [2009/10/30(金) 22:56:36 ID:???]
実際にロジックとテンプレート合わせないとテンプレート側の文法の間違い分からないの?

745 名前:nobodyさん [2009/11/01(日) 07:20:38 ID:ZF01kyEW]
Smarty 3.0 Beta 1 Released

746 名前:nobodyさん mailto:sage [2009/11/01(日) 10:57:23 ID:???]
>>744
確かにできないな
まあ元々プログラマーと別環境で作業すること自体難しい気はするが。
>>745
モノリンガルの俺には厳しいようだ

747 名前:nobodyさん mailto:sage [2009/11/01(日) 11:05:45 ID:???]
>>745
突撃してみるか

748 名前:nobodyさん [2009/11/09(月) 13:54:09 ID:jgJG5jOb]
テンプレートに定義していないコード(例えば{test}など)がある場合、
Smarty errorが表示されます。

このエラーを表示しない方法はないのでしょうか?
PHPのエラー表示をしない事で対処するしかないのでしょうか?

749 名前:nobodyさん mailto:sage [2009/11/09(月) 14:06:20 ID:???]
trigger_errorしてるところをスキップしちゃえば?

750 名前:nobodyさん [2009/11/09(月) 20:59:58 ID:I33d9sv+]
$error_reporting
↑これ?



751 名前:nobodyさん [2009/11/11(水) 19:01:43 ID:0BFUpwQj]
Smartyって、テンプレートの中にテンプレートを読み込むようなことできる?
ある変数の値によって、特定の領域の内容をかなりダイナミックにレイアウトごと変更させたいんだけど
変化のバリエーションがかなり多いんで{if}でパターン分け記述するのはあまり現実的じゃないんだよね

外部でhtmlとして整形したものを丸ごとコントローラでassignさせて飲み込ませるしかないかな?

752 名前:nobodyさん mailto:sage [2009/11/12(木) 03:03:02 ID:???]
そのレベルも調べられないお前には無理だ。

753 名前:nobodyさん [2009/11/12(木) 07:44:56 ID:dv0ticwo]
Smarty 3.0 Beta 2 Released

754 名前:nobodyさん mailto:sage [2009/11/12(木) 11:31:04 ID:???]
>>752
おー、サンキューサンキュー♪
includeって機能があったんだね、この辺から調べてみるよ
たすかったわほんと、ありがとね

755 名前:nobodyさん mailto:sage [2009/11/12(木) 12:04:54 ID:???]
test

756 名前:754 [2009/11/12(木) 19:22:51 ID:SoSJwGM8]
ごめん、相談させて欲しい
hoge.tplに
{insert name="hogeAction" title="テスト" script="hoge_action.inc.php"}
って書いて、
同じディレクトリにあるhoge_action.inc.php に
<?php
function smarty_hogeAction($param, $smarty){
return 'あいうえお';
}
?>
って書いたんだけど「あいうえお」の出力がされない。
($param, $smarty)の引数を消して function smarty_hogeAction(){… とやってもダメだ。
何が問題かな? ご意見よろしくお願いします

757 名前:nobodyさん mailto:sage [2009/11/12(木) 19:58:44 ID:???]
書き間違えた
× smarty_hogeAction
○ insert_hogeAction
でやってます

758 名前:756 mailto:sage [2009/11/12(木) 22:52:47 ID:???]
どうも、自己解決しました。
お騒がせしました

759 名前:nobodyさん mailto:sage [2009/11/13(金) 13:18:08 ID:???]
どういう解決方法?

760 名前:756 mailto:sage [2009/11/13(金) 14:36:48 ID:???]
勘違いしてたというか参考にしてたページがわかりにくかったというか、
要するに
.tplでの記述は {insert name="hogeAction"}
スクリプトファイルは insert.hogeAction.php
ファイルの格納場所は /pluginsディレクトリ
として入れてりゃ良いだけの話だった。自前modifierとかわらんかった。
insertタグのscript属性とかなくても良いものを必須みたいに書いてたり、
関数名(function insert_hogeAction(-,-){-})を嘘書いてるサイトみて
変なことやりまくってたよ。恥。



761 名前:nobodyさん mailto:sage [2009/11/13(金) 14:58:34 ID:???]
公式マニュアル見ればよかったのにね

762 名前:756 mailto:sage [2009/11/13(金) 15:11:57 ID:???]
>>761
うん、公式がイマイチわからなくて他のサイトみてたらハマっちゃって。
今また公式見返してるけどやっぱりよくわからない
www.smarty.net/manual/ja/language.function.insert.php
「{insert} 関数の名前は、 ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。」
ってあるけど、それじゃ上手くいかなくて
smarty_insert_hogeAction() って形でやっと上手くいったからなぁ…

こっちの方が公式よりわかりやすかった、俺が物わかり悪いんだろうけど
www.y2sunlight.com/ground/?PHP5.0%2F8.Smarty%A4%F2%CD%FD%B2%F2%A4%B9%A4%EB

763 名前:nobodyさん mailto:sage [2009/11/13(金) 15:22:56 ID:???]
そりゃプラグインとしてファイルを自動読み込みさせてるからだ
www.smarty.net/manual/ja/plugins.naming.conventions.php
>PHP ファイル内で定義する プラグイン関数 は次のように指定します。
>smarty_type_name()


764 名前:756 mailto:sage [2009/11/13(金) 16:02:41 ID:???]
>>763
そうなの。おおお、疑問の本質に近づいてきた、質問させて。
じゃあsmarty_insert_xxx じゃなくて insert_xxx()ってのはプラグイン(別ファイル自動読み込み)じゃないのか。
そもそもinsert_xxx()ってどこに書くの?
$smarty->assign("msg","hello"); みたいな処理を書いてるコントローラ?の.php?
それがわからなくてあっちこっち見る迷走がスタートしたんだ

765 名前:nobodyさん mailto:sage [2009/11/13(金) 16:19:30 ID:???]
偉そうなので教えん

766 名前:nobodyさん mailto:sage [2009/11/13(金) 20:01:32 ID:???]
自分で試せばいいのに。

767 名前:nobodyさん mailto:sage [2009/11/14(土) 14:51:09 ID:???]
キャッシュ効かせても速度あんまり変わらなくね?なんなのこれ

768 名前:nobodyさん mailto:sage [2009/11/14(土) 19:37:58 ID:???]
下記のように、フォームでエラーがあればp要素を表示、なければ何も表示しない場合、
みなさんは、どこまで、どんな方法でテンプレートを利用していますか?
<p class="error">※必須項目です。記入してください。</p>
<p><input type="text" name="mail" value=""></p>

1. エラーメッセージは最初からpでマークアップ済み、そのままassign、smartyには{}のみ
{$errors.mail}

2. エラーメッセージはテキスト、assign時に空欄かどうか判定してpでマークアップ、smartyには{}のみ
{$errors.mail}

3. $errorsにはテキスト、そのままassign、smartyで{if}処理
{if $errors.mail}<p class="error">{$errors.mail}</p>{/if}

4. $errorsにはテキスト、そのままassign、smartyで関数処理
{$errors.mail|markupFunction}

デザイナさんと分業する場合、
プログラム側がマークアップに関わらない3.が一番いい気がしているのですが、
少しテンプレートファイルが煩雑になるのが気になったりもします。

エラーメッセージマークアップ用の小さなテンプレートファイルを作っておいて、
4.のmarkupFunctionから読み出して利用すると比較的キレイな気もしますが、
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。

769 名前:nobodyさん mailto:sage [2009/11/15(日) 03:44:59 ID:???]
>>767
Apacheの連続アクセステストしたけど、アクセス回数が多ければ多いほど
キャッシュの効果は効いたよ。ただし、1.2〜3倍速くなる程度だけど。
>>768
ブログのテンプレみたいなのを作ってるが、3が一番良いよ。
MTなんかもそうだし。

770 名前:nobodyさん mailto:sage [2009/11/15(日) 07:22:36 ID:???]
自分はクラスだけでやってる。

エラーは常に埋め込まれ、CSSで非表示にしておく。もしエラーなら親要素にerrorというクラスを与えて、その子要素のエラーを表示するCSSを書いておく。

div p{ display:none }
div.error p{ display:block }

これでエラー時のテキストもデザイナー側で書ける。

親要素は
<div class='{$error.title}'>
って感じで、タイトル項目がエラーなら error.title に 'error' を assign しておくだけ。



771 名前:潔癖プログラマ mailto:sage [2009/11/15(日) 10:24:50 ID:???]
>>769
やはり3.ですか。

ただその場合
$errors.mailに値があればいいんですけど、
値がなくifがfalseになると、その行末の改行が無視されて
次の行のインデントが崩れちゃうのが気になります。
{/if}のあとに空白1文字入れとくと回避できますが、
「よろしくないテクニック」っぽくて好きになれません。
>>703でも話題にでていたようですが、
このsmartyの仕様は気に入りません(苦笑)。

{if $errors.mail}
    <p class="error">{$errors.mail}</p>
{/if}

こんな感じで3行使うのがいまのところ最善か。
テンプレートファイルがますます煩雑に…(苦笑)。


>>770
CSSのdisplayだけで制御するのは、
自分も一瞬頭をよぎったことはありますが、
やはり気持ちが悪いですごめんなさい。

あとエラー時のテキストが「入力内容をご確認ください」程度ならいいけど、
「メールアドレスが正しくありません」
「必須入力項目です」
「文字数が多すぎます」
とか丁寧に表示してあげる場合に対応しにくい気がします。

772 名前:nobodyさん mailto:sage [2009/11/15(日) 21:24:49 ID:???]
>>770
CSS切っている環境とか携帯対応を考えた場合は向かない仕様だな

773 名前:nobodyさん mailto:sage [2009/11/15(日) 22:48:09 ID:???]
んなもん、{$err} にしといて、
errに <p class="error">エラーメッセージ</p> ぶち込みだわ。

774 名前:nobodyさん mailto:sage [2009/11/16(月) 00:55:30 ID:???]
>>768
汎用性やら考えると3じゃないかな。
他の方法だと、特定箇所だけ見た目を変えたい時にデザイナ側で対応しにくい気がする。
テンプレートを関数もどきとして使うような方法もありかもしれない。

// エラー表示箇所
{include file="error.tpl" error=$errors.mail}

// エラー表示テンプレート error.tpl
{if $error}
<p class="error">{$error}</p>
{/if}

775 名前:潔癖プログラマ mailto:sage [2009/11/16(月) 09:18:08 ID:???]
>>774
なるほど。4.の別解のような感じですが、
それだとincludeするテンプレファイルまでデザイナさんに任せられるので、
複数パターンのテンプレファイルが用意できたり汎用性が高そうですね。

図らずも(?)、{if}による改行問題も、
別ファイルに追い出すことで解決できてるし、
なかなか良いかもしれません。

776 名前:nobodyさん [2009/11/16(月) 12:51:37 ID:tubifOLG]
Smartyは遅いって意見ありますが、体感レベルで明らかに遅いですか?
1秒2秒遅くなった経験がある人いるんでしょうか?

777 名前:nobodyさん mailto:sage [2009/11/16(月) 23:39:48 ID:???]
そんなに遅くないよ。
「遅い」って感じるのは鯖が悪いんだろ

778 名前:nobodyさん mailto:sage [2009/11/17(火) 02:12:17 ID:???]
>>776
古いサーバPC上でキャッシュを無効にして使っても、0.001秒の処理が0.002秒になる程度。
数値的には2倍だが、体感的にはまずわからない。

素のPHPコードに比べたら遅いと言えるが、
個人的にはメリットの方が桁違いに上かな。

779 名前:nobodyさん mailto:sage [2009/11/17(火) 02:16:05 ID:???]
>>777,778
よかったー。いかにもノロノロしてるような状態になるのかと思いました。
安心して作れます、ありがとう

780 名前:nobodyさん mailto:sage [2009/11/17(火) 03:18:29 ID:???]
じゃキャッシュのメリットって何?って感じだな



781 名前:nobodyさん mailto:sage [2009/11/17(火) 06:08:10 ID:???]
Smarty 3.0 Beta 3 Released
ペース早いな

782 名前:nobodyさん mailto:sage [2009/11/17(火) 13:05:14 ID:???]
>>780
更新が少ないもしくは、更新タイミングが決っている場合にキャッシュ有効にすればいい。
大規模サイト用のチューニング項目だと思えばいいんじゃないかね。

783 名前:nobodyさん mailto:sage [2009/11/17(火) 15:47:08 ID:???]
>>780
769にも書いたけど、負荷テストした時は効果合ったよ。
同時アクセス100とか1000の場合に。

784 名前:nobodyさん mailto:sage [2009/11/19(木) 15:56:07 ID:???]
多数の他人に更新させる場合はキャッシュオフ?
掲示板とかね
有効にしといて書き込まれたタイミングでキャッシュ削除するのかな

785 名前:nobodyさん mailto:saga [2009/11/20(金) 13:27:52 ID:???]
ぴーえちぴー5.3.0
りなくす

Smartyでテンプレートが無い場合に白い画面になっちゃうんで、エラーをハンドリングしたいんですけど出来ないでしょうか?
テンプレートがあるか判定なんてめんどーなことしないといけないんですかね?

786 名前:nobodyさん mailto:sage [2009/11/20(金) 13:53:02 ID:???]
できるでしょ
そもそもfatal errorなり出るはず

787 名前:nobodyさん mailto:sage [2009/11/20(金) 13:55:42 ID:???]
PHPのerror_reportingが0になってるとかじゃね?

788 名前:nobodyさん [2009/11/20(金) 14:07:49 ID:L1RHfQMx]
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}
みたいにやりたいです。
エラーレポ調べてみます。

789 名前:nobodyさん [2009/11/20(金) 14:24:17 ID:L1RHfQMx]
error_reportingはnullのようです。ログに出して確認。
3に設定して見ましたが例外はキャッチできませんでした。3が間違いなんでしょうか?

>>786
それは戻り値として出るということですか?

790 名前:nobodyさん mailto:sage [2009/11/20(金) 14:27:34 ID:???]
>>789
error_reporting(E_ALL);



791 名前:nobodyさん mailto:sage [2009/11/20(金) 14:30:40 ID:???]
>>789
もしかしてxampp?

792 名前:nobodyさん [2009/11/20(金) 14:32:43 ID:L1RHfQMx]
displayのソース見ましたが、エクセプションはスローされないようですね…
素直にtemplate_exist使いたいとおもいます。

>>786
voidですね。


793 名前:nobodyさん mailto:sage [2009/11/20(金) 15:02:58 ID:???]
fatal error出るでしょに対する返答がvoidですとか謎い

794 名前:nobodyさん [2009/11/20(金) 15:05:46 ID:L1RHfQMx]
display_errors = Off

display_errors = On
httpd restart

error_reporting(E_ALL);
try
{
$smarty->display($tpl);
}
catch
{
なんたら
}

>>791
XAMPPじゃないです。それぞれソースからいれました。

795 名前:nobodyさん [2009/11/20(金) 15:09:05 ID:L1RHfQMx]
あ、794の結果はダメでした。同じ結果で白い画面になります。

>>793
789への自己レスです。


796 名前:nobodyさん mailto:sage [2009/11/20(金) 15:12:27 ID:???]
ちょろっとググってみたらこんなんもあった

(2)Smartyのファイルを調べてみる
画面が真っ白になった原因として、Smartyのファイルが壊れていることがあるのです。
xoops-manual.net/modules/smartsection/item.php?itemid=17


797 名前:nobodyさん mailto:sage [2009/11/20(金) 15:14:35 ID:???]
>>794
テンプレートファイルが無かった場合に出るエラーは
Smarty.class.phpの1591行目くらいにある
$this->trigger_error('unable to read resource: "' . $params['resource_name'] . '"');
でしょ?

で、例外をスローさせるための案
1.当該箇所を書き換える
2.Smartyクラスを継承したMySmartyクラスを作って_fetch_resource_infoメソッドをオーバライドする
3.set_error_handler関数でwarningが発生した時に例外投げるようにする

xamppじゃないとのことなので真面目に答えてみました

798 名前:nobodyさん [2009/11/20(金) 15:25:36 ID:L1RHfQMx]
>>797
おぉ、まさに欲しかった回答です。
ありがとうございます。
そのワーニングで間違いないです。

1…書き換えるのは好きじゃないです。
2…うーん、処理に悩みそうです。
3…これが簡単そうです。

ちょっとがんばってみます。
たすかります。

799 名前:nobodyさん mailto:sage [2009/11/21(土) 10:25:34 ID:???]
fetchってどういうとき使うの?

800 名前:nobodyさん mailto:sage [2009/11/21(土) 11:47:09 ID:???]
自動送信・返信メールの文面とか。



801 名前:nobodyさん mailto:sage [2009/11/21(土) 13:04:20 ID:???]
>>800
ありがと、メールのテンプレか
就活してたときの毎ナビか何かの企業からメールに
『こんにちわ寒くなりましたね、{$username}さん』
とか、書いてあったのを思い出した

802 名前:nobodyさん mailto:sage [2009/11/21(土) 15:18:41 ID:???]
>>798
普通は三番
サンプルは沢山見つかる

803 名前:nobodyさん [2009/11/26(木) 11:34:27 ID:tP8Fcb0C]
しつもんです
parent.tpl中で、includeを使ってテンプレート化したヘッダを読み込ませたいと思ってるんですが
テンプレート(header.tpl)をページの種類に応じて動的に変更させたいときの手順がよくわからないです。
たとえば、動物の紹介ページでは動物の一覧を、自動車の紹介ページでは自動車の一覧をヘッダに表示したい時、
表示対象の画像や情報(動物写真/自動車写真、それぞれの名前情報など)は、includeタグの中に変数として
持ち込むしかないのでしょうか?

自分のイメージでは{include file='header.tpl' pageType='animal'}として、
変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが。
(なるべく一カ所で取得プロセスを管理したいので)
そんなのは無理で、あらかじめ親のparent.tpl=parent.phpで必要データを取得して、
それをincludeに変数で渡すしかないという結論でいいのでしょうか?

今思いついた方法は、incudeタグ中の変数でpageType='animal'と渡して、それをheader.tplで
自前のmodifierに譲渡しそこから必要データ取得→出力の流れです。
もっとスマートなやり方ないでしょうか? アドバイスお願いします

804 名前:nobodyさん mailto:sage [2009/11/26(木) 15:51:29 ID:???]
>>803
何を言ってるのか良く分からないけど
>変数値animalを受け手のテンプレで解釈してそれを元にDBから必要データを取得できたらいいなと思ったんですが
すればいいのでは?

805 名前:nobodyさん mailto:sage [2009/11/26(木) 15:52:24 ID:???]
補足、テンプレートファイルで解釈するのではなくPHP側でという意味で。

806 名前:nobodyさん mailto:sage [2009/11/26(木) 16:04:59 ID:???]
余計意味がわからない。
なぜmodifier?function作れば?

807 名前:803 [2009/11/26(木) 23:09:48 ID:tP8Fcb0C]
皆さんありがとうございます
>>804
header.tplって、単独のページとしては存在しないあくまでパーツのテンプレートなので、
index.tplに対するindex.phpの様なコントローラ(?)のファイルってheader.tplにはないのではと
考えたのですが…(header.phpにアクセスすることはないと思うので)
思い違いなのでしょうか?
>>806
勉強不足なのかもしれません、functionについて調べてみます。ありがとうございます。

808 名前:nobodyさん mailto:sage [2009/11/26(木) 23:58:18 ID:???]
>>807
includeするんだからindex.phpでやればよいのでは?

809 名前:803 mailto:sage [2009/11/27(金) 01:09:41 ID:???]
>>808
あ、親のページでってことですか、、なるほど!
1)ページのテーマ(animalとか)を引き渡されてDBに働きかけるphpを外部化し、
2)それをheader.tplの親のanimal.php, car.phpなどに読み込んで、
3)結果をincludeタグ渡す
って感じでいいかな。
これならデータの取得部分が複数にばらけることもないのか。。
これのデータ取得の順番を変えたものがfunctionでやるってパターンかもしれない

ありがとうございます。チャレンジしてみます

810 名前:nobodyさん [2009/11/29(日) 07:42:11 ID:wdDHDadn]
テンプレート関数プラグインのfunction(smarty.hogefunc.php)を作ったんですが、
<?php
$var = "abc";
function smarty_function_hogefunc($params, &$smarty){
global $var;
return $var;
}
?>

上記の内容で <div>text</div>{hogefunc} としてもabcを出力しません、なぜでしょうか?
パスが通ってることは確認済みで、 $var="abc"; を echo "abc" とした場合、
abc<div>text</div>の形で出力するようです。
変数のスコープのチョンボをしてるのかなと考えてはみたんですが…
function …{〜} の外に書かれたものは正常に処理されないという仕様なんでしょうか?
申し訳ありませんが、ご意見宜しくお願いします



811 名前:nobodyさん mailto:sage [2009/11/29(日) 13:22:28 ID:???]
お前は何を言ってるんだ

812 名前:nobodyさん mailto:sage [2009/11/29(日) 14:16:45 ID:???]
return "abc";

してみればいいじゃない。

813 名前:810 mailto:sage [2009/11/29(日) 23:16:09 ID:???]
>>812
functionの中でreturn "abc"; すると、それは返すんです。
なんでかなぁ
>>811
わかりにくかったみたいですみません

814 名前:nobodyさん mailto:sage [2009/11/30(月) 09:19:43 ID:???]
functionの中で

・print_r($_GLOBALS)してみる
・echo $varしてみる

815 名前:nobodyさん [2009/12/02(水) 14:25:43 ID:1PNbu+TX]
www.youtube.com/watch?v=lsPL2QoElmw
www.youtube.com/watch?v=DyzzLwlIcpE
www.myspace.com/ametsub3110

www.youtube.com/watch?v=BDD9MZUTQzs
www.myspace.com/serphinjapan

www.apple.com/jp/quicktime/download/
www.jimbeard.com/boomer.html
www.jimbeard.com/Beard%20mp3s/Song%20of%20the%20Sun%20128/Camieff%20Wb.01_01.mp3
www.jimbeard.com/Beard%20mp3s/Song%20of%20the%20Sun%20128/Parsley%20Trees%20Wb.01_01.mp3
www.jimbeard.com/Beard%20mp3s/Truly%20128/Hand%20to%20Hand%20Wb.01_01.mp3
www.jimbeard.com/Beard%20mp3s/Truly%20128/Gonna%20Tell%20on%20You%20Wb.01_01.mp3

816 名前:nobodyさん mailto:sage [2009/12/04(金) 17:16:31 ID:???]
smartyのキャッシュを有効にするとサイドバーにinsertしておいたプラグインが上のほうに来てしまうんだけど、何か原因わかりませんか?
ブラウザで見るソースとcacheフォルダのキャッシュを見ると、DOCTYPEタグより上にプラグインの中身が出てしまってるんです

817 名前:816 mailto:sage [2009/12/05(土) 18:55:21 ID:???]
あー、すげー馬鹿なことやってた
insertプラグインって中でechoしちゃダメなのかreturnしないとイケないのか
キャッシュオフのときは正常に見えるから気付かなかった

818 名前:nobodyさん mailto:sage [2009/12/07(月) 16:47:15 ID:???]
だからいったじゃん

819 名前:nobodyさん [2009/12/09(水) 10:32:51 ID:AWY/enbH]
一部キャッシュして欲しくない部分があるんですが、そこだけ{insert}にして外に出すしかないんでしょうか?

820 名前:819 mailto:sage [2009/12/10(木) 15:56:47 ID:???]
なさそうですね



821 名前:nobodyさん mailto:sage [2009/12/13(日) 22:00:00 ID:???]
>>820
これだとだめなん?
ttp://www.smarty.net/manual/ja/caching.cacheable.php


822 名前:nobodyさん mailto:sage [2009/12/13(日) 23:07:04 ID:???]
>>821
ありがとうございました

823 名前:nobodyさん mailto:sage [2009/12/15(火) 15:00:29 ID:???]
Warning: Smarty error: unable to read resource:

のエラーが出る際に、

自分で作った404エラーページ(のテンプレ)を読み込むことはできますでしょうか?

824 名前:nobodyさん mailto:sage [2009/12/15(火) 15:56:24 ID:???]
とりあえずそれは404じゃない。
$error_reportingを参照したらいいとおもう。

825 名前:823 mailto:sage [2009/12/15(火) 16:39:30 ID:???]
自己解決しました。

826 名前:nobodyさん mailto:sage [2009/12/25(金) 18:27:23 ID:???]
SmartyってWebで検索してもマニュアルかその複製しか全然情報が出てこないけど、どっかいいサイトないですか?
マニュアルはサンプルとか説明が簡単すぎて知りたい情報が出てこないのですが・・・

例えばdefault_resource_typeプロパティで、デフォルトのfile以外の値を知りたいのに、それどころかサンプルすら書かれていなかったり困ります
リソースプラグインの事ももっと知りたいんですが見つかりません

PEARでも感じましたが、なんでこう情報が少ないんでしょうかね?
マニュアルとそのコピー以外の情報が出てきません

827 名前:nobodyさん mailto:sage [2009/12/25(金) 19:02:01 ID:???]
PEARもSmartyも情報は溢れてるよ。
無いのは君の理解力だろう。

Smartyに至ってはマニュアルあれば大抵は事足りる。
リソースプラグインに関しても、マニュアル読んでわからん人には無縁なんじゃねぇかな。
あれ以上丁寧な解説求めるなら金払ってスクールにでも通えばいい。

828 名前:nobodyさん mailto:sage [2009/12/25(金) 21:36:44 ID:???]
ソースも結構シンプルだから
謎があったら追い掛けてみたら?

829 名前:nobodyさん mailto:sage [2009/12/26(土) 18:39:45 ID:???]
>>827
溢れているとまではいかないんじゃないかと俺は思う

830 名前:nobodyさん mailto:sage [2009/12/27(日) 00:20:26 ID:???]
具体的にどんな情報が欲しいの?
「俺の知りたい情報が無い」ってだけじゃ、教える側もわからんだろう

default_resource_typeにしたって、リファレンスのテンプレートリソースとリソースプラグインの項目に十二分な情報載ってると思うしなぁ
ここまで枯れた技術なのに、情報が足りないってのは調べる力か理解力が無いとしか思えないんだが



831 名前:nobodyさん mailto:sage [2009/12/27(日) 11:58:44 ID:???]
もし情報がなかったとしたらこのスレがもっと賑わってると思うんだ

832 名前:nobodyさん mailto:sage [2009/12/27(日) 13:02:13 ID:???]
いやそもそもSmarty使いの絶対数がすくなうわなにをするやめ

833 名前:nobodyさん mailto:sage [2009/12/27(日) 19:56:19 ID:???]
>>831
「もし情報があったとしたら〜」なら同意できるんだけどな。

ブログなんかでちょこっと取り上げているサイトはあっても
ユーザー同士で語り合うようなコミュニティは無い。
マニュアル見ろよってのは当たり前の行為で、
Smartyはそれ以上の使い方(サイト構築のテンプレ利用など)があるから
使い方やアイディアをまとめたサイトがあれば良いとは思う。

834 名前:nobodyさん mailto:sage [2009/12/27(日) 21:01:57 ID:???]
コンパイルせず使う方法ないのかな

835 名前:nobodyさん mailto:sage [2009/12/29(火) 11:19:04 ID:???]
>>833
コミュニティか・・・
たとえば2chにSmartyスレたてたらいいんじゃないかな

836 名前:nobodyさん mailto:sage [2009/12/29(火) 11:34:24 ID:???]
名案だな。

837 名前:nobodyさん mailto:sage [2010/01/06(水) 21:51:18 ID:???]
俺もSmartyのしっかりとしたサイトってないなとは思ってた
マニュアルって簡潔にまとめられてるからね

>>833の言ってるようなことは俺は分かるね
Webだけじゃなく、他にも構築する時にここどうすればいいんだっけ?って時に調べられないからね
情報が少なすぎて

838 名前:nobodyさん mailto:sage [2010/01/07(木) 09:11:46 ID:???]
書籍は?
日本語で複数出版されてるのは恵まれてる方だと思う。

まとめサイトは自分で立ち上げて、ある程度充実させられれば
他の人も情報を集めてくれるようになるかもよ。

839 名前:nobodyさん mailto:sage [2010/01/07(木) 15:20:10 ID:???]
Smartyの本ってある?
Smarty入門しか知らないけれど・・・?

840 名前:nobodyさん mailto:sage [2010/01/07(木) 16:37:46 ID:???]
PHPのウェブアプリの本だとSmarty出てきたりするな



841 名前:nobodyさん mailto:sage [2010/01/07(木) 23:58:21 ID:???]
Smartyのキャッシュ機能ってなにをキャッシュしてるん?
$smarty->assignで割り当てるのは変数だからキャッシュじゃないし

842 名前:nobodyさん mailto:sage [2010/01/08(金) 00:03:40 ID:???]
すまんアホなこと書いた

843 名前:nobodyさん mailto:sage [2010/01/08(金) 09:13:25 ID:???]
だから具体的にどんな情報が欲しいんだよw
WEBに溢れている情報を漁るだけで、大抵の事は答え一歩手前まで調べられるだろ・・・



844 名前:nobodyさん mailto:sage [2010/01/08(金) 10:58:43 ID:???]
Smartyをカッコよく使いこなす方法

845 名前:nobodyさん mailto:sage [2010/01/08(金) 11:57:09 ID:???]
2chで教えて君をしてる時点でかっこわるい

846 名前:nobodyさん mailto:sage [2010/01/08(金) 12:11:21 ID:???]
もっとSmartyをスマートに使う方法

847 名前:nobodyさん mailto:sage [2010/01/09(土) 17:17:11 ID:???]
使いこなし方まではWebで出てこないな、確かに

848 名前:nobodyさん mailto:sage [2010/01/17(日) 19:36:43 ID:???]
Smarty使う場合はdisplay()以降に処理は記述しない方が吉?

849 名前:nobodyさん mailto:sage [2010/01/18(月) 03:14:17 ID:???]


850 名前:nobodyさん mailto:sage [2010/01/18(月) 11:28:14 ID:???]
別にそんなことはないかと思うが
2枚以上のテンプレートをdisplay()する場合もあるし



851 名前:nobodyさん [2010/01/18(月) 14:06:09 ID:AGLkXiCO]
smarty2では
$smarty->assign('pref', array('01' => '北海道', '02' => '青森'));

{$pref.01}
で北海道が取れていたのだけど、
Smarty3Beta板では
{$pref['01']}
としないと取れなくなったのは仕様変更ですか?

852 名前:nobodyさん [2010/01/18(月) 14:06:25 ID:YiIR+7Mx]
質問です。

$hoge = array(
 array("name" => "aaaaa", "value" => 1),
 array("name" => "bb", "value" => 2),
 array("name" => "ccc", "value" => 3),
 array("name" => "dddddd", "value" => 4)
);

$fuga = array(
 array("value" => 2), array("value" => 4)
);

上記二つのような配列変数があります。
Smartyを使って、$hogeの内容をチェックボックスとして表示しようと思っています。
また、$fugaの内容と一致するvalueの部分を選択状態にしておきたいです。
(例)
□aaaaa   ■bb   □ccc
■dddddd

テンプレート側でどのように指定すれば、上記方法を実現できるでしょうか。
{foreach}を使おうと思ってるんですが・・・

853 名前:nobodyさん mailto:sage [2010/01/18(月) 14:25:16 ID:???]
>>852
html_checkboxes使うの?それとも手動でやるの?

854 名前:nobodyさん mailto:sage [2010/01/18(月) 15:07:42 ID:???]
>>853
手動です
html_checkboxesのほうがやりやすいのでしょうか?

855 名前:nobodyさん mailto:sage [2010/01/18(月) 15:59:06 ID:???]
>>854
foreachでやるなら普通にループさせて
要素を出すところでifで比較してchecked入れればいいんじゃない?
$fugaのデータ構造がそのまま使えなくてちょい面倒だけど
予め使いやすいように変換するか、更にループさせて全件比較すればいいかと

856 名前:nobodyさん [2010/01/20(水) 22:11:47 ID:q80CCbb+]
以下のようにinterfaceによる拡張を試しています。

interface iSmarty { const MY_NAME = "foo"; }
class MySmarty extends Smarty implements iSmarty {/*設定*/}

{$smarty.const.MY_NAME}
値fooが表示されることを期待したのですが、MY_NAME(定数名)が表示されてしまいます。

マニュアルの{$smarty.const}の項を見ると、defineによる例が掲載されていて
確かにdefineで定義されていれば正しく値が表示されます。
バージョン2.1なのでちょっと古いのかなとも思うんですが、
php5のコードを追加するのは無理でしょうか。

857 名前:856 mailto:sage [2010/01/20(水) 23:35:47 ID:???]
すみません、しばらく考えていたのですが、断念することにしました。
拡張も考えてみたのですが、もとがphp4ですから、こちらのPHP環境と合わせて考えると
サブクラスで定義した"クラス定数"をテンプレートから呼び出すことは
おそらく無理と判断しましたm(_ _)m

確かなことは言えませんが、クラスを変数で参照できるphp5.3以降でなら
プラグイン等で機能追加できるような気がします。

858 名前:nobodyさん mailto:sage [2010/01/21(木) 04:40:11 ID:???]
php4だから無理ってどういうこっちゃ?どこに書いてあるん?

マニュアルの例はもうちょっと落ち着いて見直してみたほうがいいと思うけど

859 名前:nobodyさん mailto:sage [2010/01/29(金) 18:46:34 ID:???]
インサートプラグインの中でもテンプレート指定してキャッシュさせてるけど
インサートプラグインが1ページに5、6個あるとかなり速度低下してきてしまう

860 名前:nobodyさん mailto:sage [2010/01/30(土) 00:48:00 ID:???]
>>859
そんな、あなたにsmarty3の出番ですよ。
プラグインを書く必要ないぞ。



861 名前:859 mailto:sage [2010/01/30(土) 10:34:45 ID:???]
え、そうなの?プラグイン書かなくていいってどういうことですか?
今はindex.tplに{insert name="hoge"}って書いて
[insert.hoge.php]
function smarty_insert_hoge($params, &$smarty) {
 if(!$smarty->is_cached('plugin_hoge.tpl', "plugin|hoge")) {
  DBからデータを取ってきてassign
 }
 return $smarty->fetch('plugin_hoge.tpl', "plugin|hoge");
}
DBに更新を加える時にclear_cacheという感じでやってるんですが、作り方としておかしいですか?
こういうインサートプラグインが増えてくると、is_cachedとfetchをその分しなきゃいけないんで遅くなってると思うんですが
smarty3だと改善されてるんでしょうか?

862 名前:nobodyさん mailto:sage [2010/01/30(土) 11:59:30 ID:???]
Smarty3だと{nocache}で囲むだけでいいらしいよ。だから、インサートプラグインいらず。

863 名前:nobodyさん mailto:sage [2010/01/30(土) 12:29:50 ID:???]
nocacheなら↓で実現できたヤツですね、最初からあるのとないのでは大違いでしょうが。
www.smarty.net/manual/ja/caching.cacheable.php

864 名前:nobodyさん mailto:sage [2010/01/30(土) 14:12:57 ID:???]
Smarty2より遅いSmarty3なんてゴミにしかなりえない

865 名前:859 mailto:sage [2010/01/30(土) 14:45:10 ID:???]
>>862
キャッシュしたいのでnocacheは用途が違う気がします

866 名前:nobodyさん mailto:sage [2010/01/30(土) 15:09:07 ID:???]
あらかじめオブジェクトをシリアライズしておいて、それをアンシリアライズして読めば早いよってことなんだけど
方法がよく分からない。
結局require_once "Smarty.class.php"しなきゃいけないんだよね?
意味分かる人教えてください

Smartyの読み込みコスト(時間)を削減する
ttp://code.xenophy.com/?p=73

867 名前:nobodyさん mailto:sage [2010/01/30(土) 16:02:16 ID:???]
意味わかんない記事ですね
効果も0.01秒だし

868 名前:nobodyさん mailto:sage [2010/01/30(土) 16:56:45 ID:???]
0.01秒って結構大きいんじゃね?

869 名前:nobodyさん mailto:sage [2010/01/30(土) 16:57:37 ID:???]
なんで?

870 名前:nobodyさん mailto:sage [2010/01/30(土) 17:23:46 ID:???]
あれ?デカくね?



871 名前:nobodyさん mailto:sage [2010/01/30(土) 17:31:09 ID:???]
なんでと聞いているんだ

872 名前:nobodyさん mailto:sage [2010/01/30(土) 18:09:30 ID:???]
1回表示するたびに0.01秒だろ
うちのサイトだと0.01秒早くなったら速度2倍だぜ

873 名前:nobodyさん mailto:sage [2010/01/30(土) 18:11:35 ID:???]
感じられねーだろw

874 名前:nobodyさん mailto:sage [2010/01/30(土) 21:26:36 ID:???]
>>873
濡れ濡れよ

875 名前:nobodyさん [2010/01/31(日) 16:37:31 ID:tjv1ZgGA]
compile_dirのディレクトリがなかったり、書き込み権がない場合
コンパイルエラーになりますが、たまにパーミッション設定を忘れたりして
こういう現状が度々あります。

忘れず確認すれば良い事ですが、なにか効率の良い方法はないでしょうか?

876 名前:nobodyさん mailto:sage [2010/01/31(日) 16:53:46 ID:???]
どんな風にできたらいいの?

877 名前:nobodyさん [2010/01/31(日) 17:59:24 ID:tjv1ZgGA]
・コンパイルエラーを出さない
・コンパイル用のディレクトリがない場合、自動的に作成

と言うぐらいしか思いつきません
後者はis_dirでチェックすればいいと思うのですが、前者は方法自体わかりません・・・

878 名前:nobodyさん mailto:sage [2010/01/31(日) 18:01:14 ID:???]
>>877
エラーメッセージでファイルを検索→当該行をコメントアウト

879 名前:nobodyさん mailto:sage [2010/02/01(月) 13:24:00 ID:???]
>>878
そんな凄い事が出来るんですか?
当該行をコメントアウトって、文字列の置換とは違うんですよね?

880 名前:nobodyさん mailto:sage [2010/02/02(火) 14:53:16 ID:???]
Smarty2.6からSmarty3への移行ってlibsの中身変えるだけでいいんですか?



881 名前:nobodyさん mailto:sage [2010/02/02(火) 14:54:00 ID:???]
えっ?

882 名前:nobodyさん mailto:sage [2010/02/02(火) 16:28:53 ID:???]
string:リソースとforが欲しいだけなんだが、Smarty2に入れてくれ

883 名前:nobodyさん mailto:sage [2010/02/03(水) 00:29:48 ID:???]
>>880
互換性はあるとかないとか、
廃止される構文もあるとかないとか

884 名前:nobodyさん mailto:sage [2010/02/03(水) 01:26:14 ID:???]
stringリソースは自分で作れ。

PHPっぽく数学処理出来るのはいいよね。Smarty3。
開発に時間かけ過ぎてて、既に腐り始めている気がするけど。

extend欲しいな。

885 名前:nobodyさん [2010/02/05(金) 12:00:27 ID:1wZyvV1Q]
default_modifiersでescape:htmlやってたらforeachでエラー出るとか{debug}ができないとか
そういうのは最新版では治ってるの?

886 名前:nobodyさん mailto:sage [2010/02/05(金) 16:09:07 ID:???]
debugとescapeプラグインを数行書き換えるだけで治る。

887 名前:nobodyさん mailto:sage [2010/02/05(金) 18:17:12 ID:???]
Smarty3のstringリソースってキャッシュしてくれないのか、ファイルの更新日時とか取得できないから当たり前か・・・

888 名前:nobodyさん mailto:sage [2010/02/06(土) 16:55:05 ID:???]
smartyとquickformの組み合わせでdefault_modifiers escapeするとフォームが全部エスケープされてしまうね
じゃ、nodefaultsにすりゃいいかというと、フォームのユーザが追加できるようにしている場合、
デフォルトの値(フォームのセレクトとか)にエスケープしたい文字があると途端に無理が出る
結局ロジック側でh()するしかなくなる

889 名前:nobodyさん [2010/02/09(火) 13:31:36 ID:Af+mgrun]
Smartyで画像の出力ってできる?
"Content-Type: image/jpeg"的な意味で。

890 名前:nobodyさん mailto:sage [2010/02/10(水) 09:26:09 ID:???]
プラグイン作れば?



891 名前:nobodyさん mailto:sage [2010/02/10(水) 11:02:43 ID:???]
>>889つーか、ここは正攻法でMLに投げるんだ!

892 名前:nobodyさん mailto:sage [2010/02/12(金) 16:19:32 ID:???]
>>889
テンプレートファイルの内容を画像データにすればいいんじゃないかな・・・

893 名前:nobodyさん mailto:sage [2010/02/12(金) 21:11:24 ID:???]
パーサーが変なの拾って壊しちゃうかと
displayやfetchしてる所でget_file_contentするだけだろ
しょーもな

894 名前:nobodyさん mailto:sage [2010/02/12(金) 21:12:15 ID:???]
関数名違うかも

895 名前:nobodyさん mailto:sage [2010/02/17(水) 16:31:45 ID:???]
file_get_contents()だな。
確かにSmartyが有用なケースが思いつかない。

896 名前:nobodyさん mailto:sage [2010/02/20(土) 12:34:03 ID:???]
MTってSmarty使ってるのか

897 名前:nobodyさん mailto:sage [2010/02/20(土) 12:44:55 ID:???]
気のせいか

898 名前:nobodyさん [2010/02/20(土) 17:16:25 ID:0jUjLrgq]
ファイルではなく
変数に格納されたテンプレートを使うために
変数用のリソースプラグインを使って試行錯誤してるのですが
相談させてください。

このリソースプラグインに変数(テンプレートの内容)を渡す方法ですが
2つ思いつきました。

1つは
$hoge = "ここにテンプレートの内容";
$smarty->fetch("var:hoge");

のように変数名を渡して
プラグイン側で グローバル変数の$hogeの内容を取得。
しかしグローバル変数を使うというのがちょっと気になります。

もう1つの案は
$smarty->fetch("var:{$hoge}");
としてテンプレートの内容自体を渡す方法。

しかしこれだと長い名前の中間ファイル(template_cにできるファイル)
が作られてなんだか気持ちが悪いです。

毎回コンパイルでいいので中間ファイルは作られないほうがいいのですが
それもできない感じ。

みなさんはどうしてますか?


899 名前:nobodyさん mailto:sage [2010/02/20(土) 22:01:34 ID:???]
リソースプラグイン側で
グローバル変数じゃなくてSmartyにassignされた変数を見るようにすればいいんじゃねーの?

900 名前:898 mailto:sage [2010/02/24(水) 09:57:22 ID:???]
>>899
規制でかけなかった・・・

結局Smartyを拡張してプロパティを追加したら
プラグイン側で普通に見れました

>>899
ありがとうございます
なるほど、それは気づきませんでした
そのほうが手軽ですね




901 名前:nobodyさん mailto:sage [2010/03/03(水) 01:14:47 ID:???]
Tenjin使い始めた。smartyより3倍早いらしい。
フレームワークをやったことなかったけど、比較的わかり易い。

902 名前:nobodyさん mailto:sage [2010/03/03(水) 16:18:29 ID:???]

www.kuwata-lab.com/presen/LL2007LT.pdf

14-15ページを見た感じだと制御はPHPそのままで
PHPタグ外部分はわざわざechoするのか・・・

903 名前:nobodyさん [2010/03/04(木) 15:15:33 ID:jG8+9EsN]
Smarty3はいつになったら出るんだよ。

904 名前:nobodyさん mailto:sage [2010/03/05(金) 09:36:42 ID:???]
遅い3はいらない

905 名前:nobodyさん [2010/03/06(土) 00:22:27 ID:3cIJcZyy]
Smartyのoutputfilterで文字コードをUTF-8からSJISに変換する処理を入れています。

こんな風に
$smarty->register_outputfilter("filterSjis");

function filterSjis($buff, &$smarty) {
return mb_convert_encoding($buff,"SJIS-win","UTF-8");
}

ブラウザで表示させると頭に「?」が入ってるんだけどこれはなぜでしょうか?
Smarty 2.6.26 PHP 5.3.2 です

906 名前:nobodyさん mailto:sage [2010/03/06(土) 01:54:29 ID:???]
UTF-8テンプレートにBOMが入ってんじゃねーの?

907 名前:nobodyさん mailto:sage [2010/03/06(土) 08:38:23 ID:???]
ありがとう
その通りでした


908 名前:nobodyさん mailto:sage [2010/03/06(土) 10:16:09 ID:???]
自己中マルチはシネよ

909 名前:nobodyさん mailto:sage [2010/03/06(土) 11:56:50 ID:???]
すまんね PHPはあんまり慣れてないんだ
普段はGAEでjavaなんだよ
これあげるからシネとかいわないで
mix-tube.appspot.com/

910 名前:nobodyさん mailto:sage [2010/03/06(土) 12:20:22 ID:???]
そういう問題じゃないけど許す



911 名前:nobodyさん mailto:sage [2010/03/06(土) 13:54:43 ID:???]
さらに宣伝かよ

912 名前:nobodyさん mailto:sage [2010/03/07(日) 07:30:25 ID:???]
β8はfinal betaらしいので、次はRC版か

913 名前:nobodyさん mailto:sage [2010/03/11(木) 09:30:07 ID:???]
俺の勉強不足かも知れないんだけど、
cache_lifetimeって以下の仕様じゃないんだね

10秒に設定→10秒経ってるキャッシュファイルは全て削除

914 名前:nobodyさん [2010/03/11(木) 17:23:06 ID:TZPJnNmb]
削除されるわけないだろ。

915 名前:nobodyさん mailto:sage [2010/03/12(金) 13:20:51 ID:???]
じゃ、キャッシュ溜まりまくるけど
どの段階でclear_all_cacheするの?

916 名前:nobodyさん mailto:sage [2010/03/12(金) 15:48:13 ID:???]
>>913
同じく削除されると思うのが普通な気がする
セッション管理みたいに

>>915
必要なら好きなときにどうぞ


917 名前:nobodyさん mailto:sage [2010/03/12(金) 17:14:35 ID:???]
削除というよりは、要求されたページのキャッシュがlife timeより古かったら
再生成(上書き)されると思ってる。
つまり、要求されなきゃそのまま放っておかれる(わざわざ消さない)と。

918 名前:nobodyさん mailto:sage [2010/03/12(金) 21:49:30 ID:???]
マニュアル良く読めw


919 名前:nobodyさん mailto:sage [2010/03/13(土) 05:31:12 ID:???]
>>918
ん?

920 名前:nobodyさん mailto:sage [2010/03/13(土) 13:02:36 ID:???]
cache_lifetime = -1;にしてるオレには関係のない話だな



921 名前:nobodyさん mailto:sage [2010/03/13(土) 15:04:04 ID:???]
負荷だいじょうぶか?

922 名前:nobodyさん mailto:sage [2010/03/13(土) 16:11:14 ID:???]
-1は無期限でキャッシュし続ける
0が毎回作成
CMSみたいに管理画面から更新するなら、
そのタイミングで必要な分だけキャッシュを削除すればいいしね

923 名前:nobodyさん mailto:sage [2010/03/13(土) 16:11:51 ID:???]
×キャッシュし続ける
○キャッシュを使い続ける
でした






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<245KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef