08/10/13 21:48:53
>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さん
08/10/13 22:13:18
>別の選択肢を提示して、それに対する意見を聞きたかっただけなので、
解ったから、具体的に選択肢を提示してくれよ。
ショートタグで値を表示するだけじゃ甲乙つけられないだろ?
ループ、エスケープ、インクルード、条件分岐が入ったViewテンプレートサンプルを上げてくれ。
それを見て「これならSmarty使う必要は無いな」と思わせてくれよ。
俺が出すサンプルは以下だ、
「ヘッダ、フッタを合成して配列の中身をテーブルに出力するだけの簡単な処理」
265:nobodyさん
08/10/13 22:16:06
===================================================
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さん
08/10/13 22:16:56
===================================================
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さん
08/10/13 22:17:35
PHP側はこれでも処理が全然足りない。
インクルードファイルの管理や、ローカルスコープ化処理、エラー処理、etc。
結局細かい処理を考えるとSmartyと同程度までの実装は欲しくなってくる。(文法はおいておいて)
そこをライブラリや関数で補うって事なんだろうけど、
実際にそうした場合のテンプレートコードを上げてみてくれ。
268:nobodyさん
08/10/14 01:17:27
>>262
>君の出してるエラーは「Smartyエラー」じゃなくて「PHPのエラー」だねw
>Smarty自体の処理ははあっておりコンパイルも通っている。
あほかお前、なんでSmartyのエラーかPHPのエラーかをここで区別する必要があるんだ?
エラーといわれた場所の行番号が違っていることが問題なんだろうが。
Smartyのエラーなんて、ただの構文解析でのエラーしかでねーじゃんか。
実行時のエラーには無力なうえ、変な行番号ででるんじゃ、使い勝手悪すぎだろ。
PHPなら実行時のエラーも行番号がずれることはない。こんなのあたりまえ。
実行時エラーを変な行番号でしか報告できないSmartyを必死に擁護するほうがどうかしてる。
「Smartyエラー」ってなんだよ、構文解析でのエラーじゃないからSmartyのせいじゃありませんって、アホか。
エラーの種類に関係なく、行番号がずれるのが問題なのに、
構文レベルエラーと実行時エラーを区別する必要がどこにある。
269:nobodyさん
08/10/14 01:52:38
>>268
デザイナとプログラマの分業がなされているとき
構文エラーはデザイナ責任、実行時エラーはプログラマ責任。
PHPエラーがでたらプログラマが対処すりゃいい。
そもそも、>246のエラーは文字列に変換できないクラスをassignしないもしくは、
assignしたものが直接扱えない変数であることをデザイナに伝えていれば起きない。
270:nobodyさん
08/10/14 02:36:44
>>268
アホはお前だろw
実行時エラー制御したいなら、Smartyに限らずassign時点で型判別しろよ無能w
それこそSmartyとかPHP以前の話だよ。
>エラーの種類に関係なく、行番号がずれるのが問題なのに、
ずれてねーよw コンパイル後のソースでの行数で、ご丁寧にファイル名まで出てるじゃん。
スクリプト言語しか触った事無い素人には、実行時エラーのデバッグは難しいのかもしれんが、
普通のPGなら上のエラーコード読むだけで、エラー内容もエラー位置も特定出来るわ…
むしろ構文エラーじゃなくて、実行時エラーだって理解出来て問題識別しやすいわw
無能を晒してないで、
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
はやく>>265-266を君の考えた素敵で使い勝手の良いテンプレートに書き換えてくれよ。
271:nobodyさん
08/10/14 02:40:48
こういう無能がdisplay_errorsをonにしたまま本番公開しちゃって恥ずかし思いするんだろうねぇ('_`
272:nobodyさん
08/10/14 03:44:58
>>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さん
08/10/14 03:46:43
<? // こんとろーら
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さん
08/10/14 04:01:40
>>268
>エラーといわれた場所の行番号が違っていることが問題なんだろうが。
言いたいことはわかる。
でも、関数なんだから当然だろ。
引数が不適切なせいで、呼び出し先でエラーが出た場合を考えればわかりやすい。
275:196
08/10/14 09:31:04
いや、行番号の話はSmartyとsymfonyを混同した人の指摘?みたいだし、
エラーを追いかけたかったら良いデバッグツールを使えばいいと思うぞ。
PHP標準でスタックトレースも変数の中身も出せるわけだし。
>>263
SimplateいいぞSimplate。暢気な人には魅力がかわらんかも知れんが。
俺が考える「Smartyをわざわざ導入する際のデメリット」が結構解消されてる。
まあ、「SmartyはPHPで書かれている」という大きいメリットは殺ぐのだけど。
>>265-266はMVCを理解してない人の例という意味では良いサンプルだな。
>>271-273ありがとう。俺もせっかくなので一つ案を出す。
276:nobodyさん
08/10/14 10:01:19
おはよう。
>>275
Simplateいいよね。 客先都合で使えない事が多くて泣けるけど。
>>265-266はMVC的にはどう書くのが正解?
277:196
08/10/14 10:20:12
レス番間違えた。272-273、素晴らしいコードをありがとう。
議論としては蛇足になってしまうかも知れないんだけど、
俺が個人的に>>212より>>196が良いと思うと言った部分を紹介します。
特徴(一長一短?)は、テンプレートファイルの可読性が高く、隠蔽されていること。
利点はHTMLからの移植性と習得の容易さ。
欠点は配列操作のコストを二重にかけていること。
改行が多いと叱られたので再挑戦。
>>276
>>272-273のように書くのが正解だと思う。
少なくとも、MとVとCがそれぞれどのファイルかわかるでしょ。
278:196
08/10/14 10:21:06
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
08/10/14 10:30:20
>>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さん
08/10/14 11:24:56
>>196
君、MVCを全く理解出来てないよ。
データの表示フォーマット等に関するビューロジックは、ビュー側で処理するべき。
コントローラは必要なデータをモデルからひっぱってデータに渡すだけで表示内容には関与しない。
君の書き方だと、各種表示フォーマットやデフォルト値が変更になった時にビューで処理出来ないでしょう?
281:nobodyさん
08/10/14 11:31:38
>>265-266と>>272-273の違いは何ですか?
MとCはコードに掲載していないだけでVとしては正しいと思います。
何が問題でしょうか?具体的に教えて下さい。
282:nobodyさん
08/10/14 11:37:48
>>280
変更される度にtpl.phpに修正を入れるんだろうな
単純にテンプレートファイルとビュー用のデータ加工のphpを分けてるだけみたいだし
というか、やってる事はオレオレテンプレートエンジンな件について
要は生phpをテンプレートファイルにできればいいのかな?
283:nobodyさん
08/10/14 11:50:37
>>282
ねw 多分中学生か高校生の熱血PG志望者だよきっと。
俺も若い頃は動作の重さに超敏感だったし、Smartyとか使う奴はアホかと思っていたw
284:nobodyさん
08/10/14 12:14:00
>「Smartyをわざわざ導入する際のデメリット」
俺にはこれがわからん。
パッケージインストールもしくはダウンロード→インクルードパス下に解凍したらすぐ使えるよ?
習得の手間は人それぞれだろうけどおそらく196や周辺のPHP知ってるデザイナーは苦労したんだろうな。
285:nobodyさん
08/10/14 12:15:43
>>281
んーと
「V」にだけ着目するならどっちもただしい、
それこそ全部echo文でもただしいのではとおもいます!
>>272-273は「SmartyでできることはPHPでできる」、の一部のサンプルとして
1. 変数・関数のスコープの限定の実現
2. 生PHP?のテンプレートとしての(そこそこの)書きやすさの実現
(というかshort_open_tagの積極的な使用)
を主眼においてつくってみました。 >>266から>>273に代わって
何か問題が解決したとすれば、主にはView用変数・ユーザ定義関数がグローバルでなくなったこと
かなとおもいます(まちがってたらアドバイスください><)。
じぶんはというと今テンプレートに
Smartyを使いつづけるか(といってもまだ使って一ヶ月ですが!)
否かまよっているところなので先人さんのいろいろな意見を参考にしたいところで、
最近このスレをみつけてせっかく興味のある話題にめぐりあえたのに
煽り合いばかりでおもしろくないなーとおもっているところです。
286:nobodyさん
08/10/14 12:23:17
お前が煽ってんだろが
287:nobodyさん
08/10/14 12:28:17
あ、>>277さん、こちらこそありがとうございます><
最初はもっとボコボコに叩かれるかもとおもってたので…
288:nobodyさん
08/10/14 12:31:26
>>286
煽ってないですが煽ってると思われたならあやまります。。
すみません
289:nobodyさん
08/10/14 12:41:55
>>285
>>265-266
「V」に着目するだけというかVのサンプルですが…。
MVC的に見ても、MもCも混在していないので間違いがわかりません。
どこに違和感を感じたのでしょうか?
仕組みを学ぶのは良い事だと思います。
しかし、もう少しSmartyを使い続けてみて下さい。
不満点も沢山見つかると思いますが、メリットも沢山見つかると思います。
「SmartyでできることはPHPでできる」はパッと見出来てるように見えてるだけで、
細かい実装(商業では必須ね)考えると、相当な開発負荷がかかります。
>short_open_tagの積極的な使用
現バージョンのPHPの推奨設定ではshort_open_tag=offなので注意して下さい。
PHP6以降では廃止される可能性もあります。
290:nobodyさん
08/10/14 12:42:58
>>285
Smartyでできる事を手間をかけてPHPだけで書いてもメリットないだろう
処理速度に多少のアドバンテージがあるくらいで、それも汎用的に書いていけば怪しい
個人的にはSmartyを使うメリットで一番大きいのは、使ってる人が多い事だと思ってる
291:nobodyさん
08/10/14 12:46:30
SmartyもどきをPHPで作るくらいなら、俺はSmartyを使う。
292:196
08/10/14 18:57:31
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さん
08/10/14 20:46:31
>short_open_tagは俺の趣味です。
なんだ、ただのひねくれものか
お前、友達いないだろ?
お前、自分の事出来る職人だと思ってるだろ?
周りは確実に引いてるパターンが目に浮かぶ
もはやSmartyの話題でも無いので、MVCスレにでも行けや。
294:nobodyさん
08/10/15 00:24:43
>>292
>>278のコードだけど、tpl.phpとbody.phpを合わせてSmartyで言うところのテンプレートだよね?
tpl.phpでデータを整形をして、body.phpは体裁のみを担当と…。
これは君の主張していた
・Smartyより学習コストが低い
・(デザイナが)Smartyで出来る事は実現出来る
には当てはまらないよね。
tpl.phpで扱える便利な関数群を提供してあげればいいんだろうけど、
それは>>290-291の言うとおり、結局は我流テンプレートエンジンを作る事態になってしまうよね。
であれば既に完成されたSmartyから乗り換える理由にはなり得ないと思うんだ。
もっとも君が我流テンプレートエンジンを完成させて、公開してくれれば別かもしれないが。
295:nobodyさん
08/10/15 00:45:46
>>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さん
08/10/15 01:03:17
>>289
じぶんは>>264-267を見てつくってみたのですが
おっしゃってることがよくわかりませんでした。。
Smartyはまだ触ってみるつもりではいます!
>>290さんのおっしゃっるとおり使う人が多いのはよいとおもいますし
たしかカスタムタグみたいなこともカスタム関数でできるんですよね??
ただSmartyに不満を持つたびに、
PHPをちゃんとテンプレートとしてつかえたら、とおもいます。
PHPを使いはじめてから、short_open_tagとか制御構文の別構文(endif, ...)とか
テンプレートとしてのPHPはすごくいい感じだとおもったので
PHPがちゃんとテンプレートとして進化しなかったのがざんねんです。
テンプレートエンジン上にテンプレートエンジンをのっけるという感覚が
今割り切って理解できなくなっているのです。。
short_open_tagがXML処理命令の規則に合わないのはあきらめるしかないです。。
297:nobodyさん
08/10/15 02:00:05
PHPはすでにテンプレートエンジンとしては不全なんだろ。
それならSmartyを良くするとかもっと良いテンプレートエンジンを作るとかしたほうが生産的だと思うのだが。
まあ、PHPを良くするというのもありか。
しかしテンプレートとプログラムを同居させるというのはどだい無理があると思う。
Smartyのプログラム的文法もかなり無理やりだしな。
298:nobodyさん
08/10/15 02:42:51
>>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
08/10/15 18:33:26
>>294
tpl.phpが難しいから学習コストが高いということかな?
・PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
・Smartyで出来る事は理論上すべてPHPで出来る(し、その手段もそれなりに用意されている)
というのが俺の意見かな。
俺の環境はsymfonyで、sfFormか、helperか、sfSmartyViewPluginかの選択が必要なので、
既にSmartyで完成されたサイトとかを、わざわざリプレースする必要は無いと思う。
「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?
>>295
なるほど、俺にとっては斬新な発想だった。
ファイルの命名規則をしっかり決めれば、関連性はわかりやすいかと思ってたんだが。
tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。
「$nameの表示はescapeしてnl2brしてください」という要件を把握出来るのが、
デザイナーなのかプログラマーなのかによって話が大きく変わるんだろうな。
300:196
08/10/15 19:01:26
せっかくなのでSmartyの質問をさせてくれ。
(是非はおいといて)>>278のような事をSmartyで実現したい。
MVCで言うと、new Smarty();が書かれるファイルは、
モデルでもコントローラでもなく、ビューに属する事になる。
sfSmartyViewとかZend_View_Smartyみたいな位置づけになるわけだな。なので、
コントローラ(ラッパーにテンプレート変数を渡す)
↓
ビュー用のラッパー。内部的に$snarty->assign();が書かれる
↓
★テンプレート変数の整形処理(Smartyの便利な構文で書ければ良い)
$name = {$name|escape|なんたら|かんたら}
↓
テンプレートファイル(.tpl)
{$name}
みたいな風にしたいのだが、それは仕様上無理なんだろうか。
{assign}とか{eval}でいける? コストはこの際考えないことにして・・・。
301:nobodyさん
08/10/15 19:38:33
>>299
>tpl.phpが難しいから学習コストが高いということかな?
少なくともSmartyと比較したら数倍難しいし、
素人のロジックがシステムに混入する恐れがある。
define("DEBUG", 1); とか $_POST["xxx"] = "debug data!"; とか書かれてたら寒気しない?
>Smartyで出来る事は理論上すべてPHPで出来る
これは逆じゃないかな。
「symfonyで出来る事は全てPHPで出来る」と言ってるのと同じで、
Smartyは所詮PHPライブラリに過ぎないんだから。
> PHPが理解出来ないレベルのへぼデザイナーはbody.phpだけ触らせるしかない
>「SmartyはわかるけどPHPは触れません」というデザイナーって、結構多いのかな?
仮にPHPが触れるデザイナがいたとしても、
上に書いたようにセキュリティの観点からは、システムに影響を与える権限を与えないのが普通だと思う。
少なくとも外注のデザイナには絶対に触らせたくないよね。
>tpl.phpは、デザイナーが作るのが理想だが、プログラマーがやっても構わない。
tpl.phpはビューである以上、デザイナが触るべきだと思う。
ロジック的にMVCを分けても、管理体制(担当区分)がわかれていないとエラーが出た時に面倒だから。
そういう意味ではSmartyはその機能性より、
コードの統一性や管理体制に与える恩恵の方が大きいのかもね。
302:nobodyさん
08/10/15 20:31:43
>>300
>(是非はおいといて)>>278のような事をSmartyで実現したい。
{assign}{capture}{eval}あたりで出来るよ。
コンパイル後のソース見ればわかるけど、assignなんかはコストもほとんど変わらない。
// format.tpl
{assign var="name" value=$name|escape|default:"no name"}
{include file="body.tpl"}
// body.tpl
{$name}
>MVCで言うと、new Smarty();が書かれるファイルは、
>モデルでもコントローラでもなく、ビューに属する事になる。
自分はSmarty自体をビューとして考えているかな。
コントローラがビュー(Smarty)を生成し、レスポンスデータを渡す。
ビュー(Smarty)は与えられたレスポンスデータを元に画面を表示する。
↓こんな感じ。
class Controller {
public function action() {
// 実際にはSmarty継承クラスor内包クラスになる
$view = new Smarty();
// 必要な処理をしてビューにレスポンスデータを渡す
$view->setResponse(new Respose(xxxx));
// 整形や表示処理は全てビューにまかせる。
$view->render();
}
}
303:nobodyさん
08/10/15 20:34:36
PHPが書けないデザイナをヘボとか言っちゃう人とは仕事したくないなあ
jspが書けないデザイナもヘボなんだよね?
MovableTypeのテンプレートタグも知らなきゃヘボなのかもしれない
うーん、大変だな
304:nobodyさん
08/10/16 02:49:37
>>298
> PHPは正確にはテンプレートエンジンでは無いんですよ。
そうなんですか??
> Smartyのテンプレートの中にPHPを直接書く事も出来ますよ。(非推奨ですが)
んんーSmarty内でPHPコードを書くのは本末転倒というか本末転倒ですよね。。
あとカスタムタグ?のサンプルありがとうございます!
URLリンク(smarty.incutio.com)というのがおもしろそうでした!
305:nobodyさん
08/10/16 03:51:12
>>304
PHPはプログラミング言語の名称ですよ。
306:nobodyさん
08/10/16 08:06:34
>>303
CSS、HTML、JSあたりを完璧に書けない奴はヘボプログラマなんかねw
個人的にはデザイナはPHPとか勉強するヒマあったら、
システムに組み込みやすいスマートなHTMLコーディング技術を学んで欲しいわ。
307:nobodyさん
08/10/16 17:56:46
>>305
そりゃ、そうでしょうとも…!
308:nobodyさん
08/10/16 19:53:26
PHPという言語は<?php ?>タグの外をそのまま出力するという言語仕様なだけでテンプレートエンジンでは無いよね。
309:196
08/10/19 11:55:40
なるほど、このスレには分業指向の人が多いんだな。
>>301
{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。
>>302
やっぱり、そうなってしまうよなあ。
上で「それはMVCではない」と言われてから、内心悩んでたんだけど。
Smartyの解説ありがとう。その線で学習コストが等価になれるか検討してみる。
>>303
JavaとかMT(使ってる人いるのか?)のプロジェクトなら、そうだろうね。
>>306
HTML書けません、というプログラマーとは間違っても一緒に仕事しないよ。
というより、Smarty文法がわからないデザイナーと一緒に仕事しないでしょ?
同じことでないの?
310:nobodyさん
08/10/19 15:09:25
>>309
>{php}{/php}でも同様の問題は発生すると思うので、その辺は気にしても仕方ないと思っている。
{php}{/php}タグは禁止に出来ます。
>デザイナーにSSHを使わせないとか、PHPが絶対に動かない環境しか与えないとか、
>へぼい人を縛る方向で考えるよりは、へぼくない人と仕事するほうが良いと思ってしまう。
逆になんで必要の無い権限を与えるの?それによるデメリットは考慮しないの?
まっとうなセキュリティの考え方だったら「必要な権限以外は与えない」のが常識だと思うんだけどね。
最低限の権限で不便させない環境を提供出来ないシステム屋こそへぼい人だと思う。
参考までにいくつか質問させておくれ
・プロジェクトの人数とか連携手法やらバージョン管理方法は?
・テンプレートPHPでエラーが出たら誰の責任になるの?
・テンプレートに使ってるPHP系のライブラリとかは?
311:196
08/10/19 15:56:49
>>310
デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
コードレビューとサーバへの設置はプログラマーがやればいいじゃん。
デザイナーにサーバへの書き込み権限を与えた時点で、
(仮にあらゆるコマンドの実行をサーバ上で絶対に行えなくしたとしても)
デザイナーはシステムの正常動作責任を一部負う事になるのは間違いない。
たとえば、必要なパラメタを渡さなかったとか、ファイルを消しちゃったとか。
だから、あらゆる操作をサーバ上で絶対に行えなくすることのメリットは、
デザイナーがサーバを壊さないようにする、という程度に過ぎないので、
それなら優秀で信頼のおけるデザイナーと仕事したほうがいいんじゃないの? と思う。
質問の答えだけど、製品が完成しなかったらチーム全体の責任。
デザイナー主導の案件でもプログラマー主導の案件でも、
インタフェース定義の必要性は発生し、それは両者(主に主導側)の責任になる。
Smarty単体ではシステムの仕様テストは行えないので、
「言われたとおりのSmartyテンプレートだけ書くからあとは知らないよ」というデザイナーは、
HTMLだけしか書かないデザイナーと大して変わらない。
なので俺はそういうデザイナーとは仕事してないし、
もしデザインを外注する事があっても、Smartyの学習を促す事は無いと思う。
あえて擁するなら、へぼプログラマーと連携する時には、Smartyは役に立ったな。
あれを安直に使えば、嫌でもビューとロジックが分離出来るから。
でも今はフレームワークを使うのが普通なので、そのメリットは感じられなくなった。
312:196
08/10/19 16:30:50
超極端な例として、>>310の議論にとって最も良い条件を考える。
・顧客がWebデザインを自分で更新したいと要望している
実力はへぼかも知れないが、お客様なので無碍にも出来ない
・プログラム開発も初期デザインも業者が行い納品する
・サーバは業者が貸与するので、壊されないように配慮しなければいけない
・ssh権限は与えず、ftpsでテンプレートファイルだけ更新できるようになっている
・プログラムの動作責任は業者が負わないといけない
・テンプレート更新内容のチェックに業者の人的コストは割けないので、
更新はノーチェックで行い、システムが正常動作しなくなった責任は顧客に負わせなければいけない
・テンプレートにはプログラムから変数を埋め込まなければいけない
・顧客はSmartyの心得と導入への理解がある
・Smartyのうち危険なタグをすべて洗い出し、設定で使用を禁止している
・テンプレートでエラーが出てもセキュリティ的に不適切な出力は行われないよう設定されている
それでも
・パラメタエラー
・クロスサイトスクリプティング
の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
お客様が |escape を書き忘れただけで。
なので>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。
でも、ここまで極端な事例でもない限り、デキル人を探した方が早いなぁ。
顧客には任意の静的HTMLを特定箇所にinclude出来る仕組みのみを提供するとか。
Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
313:nobodyさん
08/10/19 17:55:19
とにかく難癖つけてSmarty叩きたいのはわかったけど、
結局君がSmarty使いこなせてないだけじゃんww
100%の対策なんて無いんだから、対策しないって言ってるだけって事に気付けww
>デザイナーに権限を与えたくないなら、HTMLだけを納品させて、
>コードレビューとサーバへの設置はプログラマーがやればいいじゃん
デザイン修正の度にやるんすか。
>デザイナーにサーバへの書き込み権限を与えた時点で
当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
消される恐れがあるとわかってて何故権限を与える?w
>Smarty単体ではシステムの仕様テストは行えないので、
わぁ、きっと君のところはMVC分けが出来てないんですね><
フレームワーク使えば大丈夫とか思ってるんですね><
314:nobodyさん
08/10/19 18:12:47
>・パラメタエラー
>・クロスサイトスクリプティング
>の問題は残り、特に後者はインタフェース側で検出する事が出来ない。
>>>302の仕組みがあれば、完全に縛ることが可能だろうか、と思った。
default_modifiersやフィルタって知ってます?
>Smartyを縛るより、俺俺テンプレートエンジンのほうが早いじゃん、とか。
もうSmarty叩きはいいからさ
その安全で扱いやすい俺俺テンプレートエンジンを見せてよ。
君の主張は前提と具体性がないから水掛け論だよ…。
まさか専門学校生じゃないとは思うけど質問に具体的、箇条書きで答えてくれよ。
・プロジェクトの人数は?
・連携手法は?
・バージョン管理方法は?
・デプロイ方法は?
・使用しているPHPライブラリは?
・使用しているフレームワークは?
・使用している俺俺テンプレートエンジンは?
315:nobodyさん
08/10/20 12:22:54
こんなに活発に意見交換があるのに、
どうしてココは『隔離スレ』なの?
316:nobodyさん
08/10/20 12:27:38
名目はともかくスレ独立してるのはありがたいので別にいいや。
317:196
08/10/20 18:54:05
>>313
煽っているように見えて>>311と同じ事を言っているように見える。
なので異論は無い。むしろ、まったくその通りだと思う。
>>314
default_modifiersは初めて知った。
nodefaultsと組み合わせれば、symfonyのescaping strategyに近い所まではいけるな。
escapeはプログラマーの責任でもなくデザイナーの責任でもなく、
フレームワークが基本的に便宜を図る、という解釈をすれば、悪くない思想だと思う。
後半については答えても意味が無いと思うし、
別にSmartyを否定する事が主目的で発言している訳ではないと言っている。
世の中にはSmartyを使うのに明らかに向かない案件もあるし、
そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。
逆に「Smartyを使うならこんな規模や状況やツールに最適だよ」という意見があれば、
それは主張してくれればいいと思う。
318:nobodyさん
08/10/20 19:11:06
>>317
default_modifiersは問題がある(ソースに手を入れれば回避可能だが)から使わないって話なら聞くが
Smartyを3年使ってて知らないってどんだけ・・・
そもそもなんでこのスレにいるん?
319:nobodyさん
08/10/21 01:33:33
>>317
>世の中にはSmartyを使うのに明らかに向かない案件もあるし、
>そんなシチュエーションをわざわざ取り上げてSmartyを否定しても仕方が無いだろ。
本当にそう思ってるなら196から出てくる発言はありえないと思うんだよね。
シチュエーションも取り上げずに、否定だけされても納得は出来ないじゃない?
「俺ならこうする」って意見も無しにダメだしされてもなぁ…default_modifiersすら知らないみたいだし、
単にSmartyの事知らないだけですよね?
議論では無く、相手を論破する事が目的になってませんか?
なんでこのスレにいるん?
320:nobodyさん
08/10/22 10:19:46
>>313と>>311が同じに見えるって、どんだけ読解力無いんだお前は…
相反する事言っているのに、なんで>>313に対しては異論唱えないんだ。
321:196
08/10/22 11:20:52
simplateのメンテに貢献したほうがマシな気がしてきた。
>>318
そうだっけか。じゃあ使い物にならないから忘れたのかな。
いずれにせよSmarty使ってた頃は、そこまでいじる気自体が無かったな。
>>319
俺ならこうする、という意見も、具体的なコードも書いたし、
Smartyを否定する事が主目的でも無いし、Smartyのわからないところは質問した。
発言する前にきちんと流れを読んでくれ。
直近の議論は294,299,301,309,310,311だ。
>>320
> 当然、テンプレートディレクトリとシステムディレクトリで権限分けてるし。
> ファイルに関しても基本的にはSVN経由で、本番には手動デプロイですよ。
> 消される恐れがあるとわかってて何故権限を与える?w
という意向と>>311との違いは状況判断の部分だけ。
俺は手動デプロイなんていちいちしたくないので、
信頼のおける優秀なデザイナーと仕事をする。
だけど、信頼のおけないデザイナーと仕事せざるを得ないなら、
>>313の言うようにするのもわかる。
前提とか本人の置かれている状況が違うだけなので、特に反論は無い。
それとも、
「デザイナーには完全な制限と束縛を課して徹底的に管理しろ」
というのが一番言いたいことなのかな?
Smartyを使ってデザイナーを檻の中に隔離するんだ、みたいな思想なのかな。
322:196
08/10/22 12:12:03
俺が何故このスレに居るのかとよく問われるので、
お言葉に甘えさせて戴き、整理させていただく。
俺が思う結論
・Smarty文法 {$name} のPHP文法 <?=$name?> に対する優位性
→メソッドチェインはSmarty文法が少し短いが、習得コストに大差は無さそう。
→short_open_tagを使いたくない/使えない場合はPHP文法が長くなるが同上。
・Smarty関数 {hoge} のPHP関数 hoge() に対する優位性
→車輪の再発明をする必要が無いのが利点。
→なので別のライブラリやヘルパーなどでも良い。
・Smartyのdefault_modifiersを使いビューのHTMLを安全にすること。
→設計と実装は不完全だが、フレームワークに任せるという考え自体は良いかも。
・ビュー用の変数構築とビューのHTMLファイルを分ける意義
→Smartyで実現するには{assign}{capture}{eval}を使えば可能。
→デザイナーに変数構築をやらせる前提では二度手間に感じる。
→プログラマーが変数構築を担当可能な所には意義があると思うし、
default_modifiersの不具合をフォローすることも出来そう。
・Smartyはデザイナーがシステムを壊さないよう完全に束縛できるか
→100%束縛したり管理するのは不可能そう。
→PHPコード実行の抑止の為にテンプレートエンジンを使うのは一応有効。
何か主張されたのかも知れないと思っていること
・Smartyや他の手段を駆使してデザイナーをシステムから隔離する事自体の意義
権限とリポジトリの管理と手動デプロイを常に徹底すれ
→俺は優秀なデザイナーを使うかHTMLで納品させるというアプローチ。
手動管理はめんどくさいし、たとえ客でも保守費用払わなかったらやりたくない。
323:nobodyさん
08/10/22 13:25:17
だめだこいつ…芯の通った主張が一つもないから、結局何に結論づけてるのかもわからん。
「…で?」としか言えないわ。
324:nobodyさん
08/10/22 13:32:44
default_modifiers忘れてただけとか言い訳が恥ずかしすぎるwww
結局使いこなせてないだけに一票。
「俺の環境ではSmartyが馴染まない」とか、凄くどーでもいい事なんで
こんな所でファビョってないで自作エンジンの制作作業に戻るんだ。
ここは君みたいな優秀なプログラマやデザイナが来ちゃいけない場所なんだ。
な。
325:196
08/10/22 18:45:58
>>324
一体どんな環境なら馴染むの?
326:nobodyさん
08/10/22 20:54:01
>>325
使いこなせればどんな環境でも馴染ませられるよ。
出来ないのはヘボプログラマくらいだろうね。
君は何がしたいんだい?
Smartyを使う気がないなら、こんなスレにいる必要無いんじゃないのかな?
327:質問です
08/11/02 19:17:14
PHPにて
for(i=0;i<6;i++){
echo "$_POST[$i]";
}
みたいなことをsmartyでやる場合、
{section name=i loop=5}
{$smarty.post.i}
{/section}
だと受けとれません。
$_POST[i] としてもだめなようで、
ループしてる回数を、POSTで受けとった配列のキーに割り当てるには
どう書けばいいんでしょうか?
328:nobodyさん
08/11/02 19:19:30 JfJ9McaH
あげます。
329:nobodyさん
08/11/02 20:49:20
書き方くらいちゃんと見なされ
330:nobodyさん
08/11/02 21:45:09
section.{sectionname}.index でループ回数(正確にはstartから増分される値)を取得できる。
その前にpostはassignされてるのか気になるのだが・・・
331:327
08/11/03 23:53:06 CUNAecRE
329さん、330さん、ありがとうございます。
330さんの言うとおり、section.{sectionname}.index で
ループしてる回数を受けとれるのはわかるんですが、
その現在の回数をPOSTで受けとった配列のキーにするにはどのように書けばいいんでしょうか?
単なる配列をまわすときには、
{section name=i loop=$arr}
{$arr[i]}
{/section}
でいけると思うんですが、それがPOSTの配列の場合は一回assignしないといけないんでしょうか?
$smarty.post.キー で受けとれると思い込んでいたんですが。
332:nobodyさん
08/11/03 23:56:08
マニュアル見てる?
333:nobodyさん
08/11/14 17:52:36 nqLSKBoW
すいませんが、教えてください。
php -r 'require "Smarty/Smarty.class.php";'
PHP: Error parsing /etc/php.ini on line 511
PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1
PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/usr/share/pear') in Command line code on line 1
というエラーがでます。
パスは
UNIX: "/path1:/path2"
include_path = ".:/php/includes.:/usr/lib/php/Smarty-2.6.20/libs/"
こうしているのですが、
334:333の続きです。
08/11/14 17:53:36 nqLSKBoW
chown nobody:nobody /var/www/html/smarty/templates_c/
chown 770 /var/www/html/smarty/templates_c/
chown nobody:nobody /var/www/html/smarty/cache/
chown 770 /var/www/html/smarty/cache/
<?php
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/var/www/html/smarty/templates/';
$smarty->compile_dir = '/var/www/html/smarty/templates_c/';
$smarty->config_dir = '/var/www/html/smarty/configs/';
$smarty->cache_dir = '/var/www/html/smarty/cache/';
$smarty->assign('name','Ned');
//$smarty->debugging = true;
$smarty->display('index.tpl');
?>
と持っていったのですが、どうしてエラーがでるのかわかりません。
教えてください
335:333の続きです。
08/11/14 19:12:47 nqLSKBoW
現在のエラーです。
PHP Warning: require(Smarty/Smarty.class.php): failed to open stream: No such file or directory in Command line code on line 1
PHP Fatal error: require(): Failed opening required 'Smarty/Smarty.class.php' (include_path='.:/php/includes:/usr/lib/php/Smarty-2.6.20/libs') in Command line code on line 1
もう一度インストールからはじめたのですが、だめでした。
お願いします。
教えてください
336:nobodyさん
08/11/14 19:56:05
はぁ?お前は何を言ってるんだ?
/usr/lib/php/Smarty-2.6.20/libs/Smarty/Smarty.class.php
の場所にこのファイルはあるのか?
337:333の続きです。
08/11/14 19:56:14 nqLSKBoW
自己解決しました。
疲れました
338:nobodyさん
08/11/15 22:34:31
もしかして、smarty使ってローカルでテストすると、
それが完成したアカツキには、レンタルサーバーにも
smartyをアップロードしないと動かないの??
339:nobodyさん
08/11/15 22:40:28
そりゃあレンタルサーバーにsmartyがインストールされてるかどうかだろ
されてなきゃ自前でアップロードしろ
340:nobodyさん
08/11/16 14:34:54 VgwBTNK+
>>338
一体何をincludeするつもりなのか
341:nobodyさん
08/11/17 21:26:39 WEpi9J1I
smartyってのはカスタム関数が便利なんだよ
そんで、そのカスタムタグつくったから適当に使ってよ、とクライアントに投げるの。
好き嫌いは有るけど、生phpより見やすいわけね。
OK?
342:nobodyさん
08/11/18 01:32:18
>>338
たいがいのフレームワークはそうなんじゃないの
343:nobodyさん
08/11/18 06:18:46
>>341
テンプレートエンジンの理想型だよな。
PGにもデザイナにも優しい。
Smarty3で速度面が大幅改善されるっぽいので期待している。
344:nobodyさん
08/11/19 00:19:12
>>343
テンプレート側で連想配列を簡単に作れる関数ができるとうれしい。
まあプラグインで作れることは作れるんだが
345:nobodyさん
08/11/19 04:25:55
Djangoテンプレートのextendsみたいな機能ってSmartyで実装できるかな?
346:nobodyさん
08/11/20 11:05:10 WBdj1Bs+
Pearでカレンダーやメニューを作成してテンプレートに出力させたいんだが
このような場合、みなさんどうしてます?
テンプレート側でphpファイルを読み込んで出力させることは可能なのでしょうか?
347:nobodyさん
08/11/20 11:18:04
>>346
つ{insert}
348:nobodyさん
08/12/03 23:41:44
これってDjangoみたいなテンプレートの継承ってできないの?
349:nobodyさん
08/12/03 23:58:50
>>348
簡易的なモノなら簡単に作れるから自作すれ。
350:nobodyさん
08/12/05 11:52:26 jMVHCYUr
template_c ディレクトリはtemplate ディレクトリ1つにたいして1つ置く方がいいのでしょうか。
template は複数(サブディレクトリに1つずつ置く)、template_c は 非公開部分に1つ、ってやりたいんですが。
351:nobodyさん
08/12/05 13:30:34
cacheを混乱させそうだな。
352:350
08/12/05 14:12:47 jMVHCYUr
やめときます。
おとなしく対応させて作ります。
ありがとうございました。
353:nobodyさん
08/12/05 20:37:51
>>350
コンパイルID指定すればOK
URLリンク(www.smarty.net)
354:nobodyさん
08/12/06 01:16:24
ほうそんな機能が・・・
メリットがまったく思いつかないけど覚えておきます
355:nobodyさん
08/12/06 01:36:14
いやわかれよw
356:nobodyさん
08/12/07 09:29:45
もー!ヽ(`Д´)ノ
sfCutString:5とかにすると5文字表示とかってあるよね?
これって反対に、後ろからの5文字を削除とかって出来ないの?
教えてくださいな(´・ω・`)
357:nobodyさん
08/12/08 09:59:13
ないものはつくるんだ
358:nobodyさん
08/12/08 16:34:14
ついでに車輪も作っとけ
359:nobodyさん
08/12/08 23:18:30
あってもつくるんだ
360:nobodyさん
08/12/09 12:27:40
車輪の再発明は偉大!
361:nobodyさん
08/12/22 09:45:58
テンプレートエンジンの選択で迷ってるんですが、
smarty使いの方、smartyがなかったら、どのテンプレートエンジンを選択しますか?
人それぞれ状況は違うと思うんで、pureにみなさんそれぞれの場合は?
362:nobodyさん
08/12/22 13:12:51
smarty以外を選択する理由がない
363:nobodyさん
08/12/22 13:56:20 fwOoSy8e
自作する。
多分テンプレート変数を置換する以上のことはできないだろうけど
364:nobodyさん
08/12/31 21:47:49 8KFb7g3b
今作ってるサイトで、smartyが動かないんですが何が原因と考えられるでしょう?
動作させてる環境は2つあり、動かないのはそのうち一つだけです。
Smarty.class.phpへのパスは相対できちんと通していて、同じファイルを
その2つにUploadすると片方でのみ動いてくれません
もちろんそちらでもphpは動いてるんですが、、
原因を探る方法はないでしょうか?
phpが動くサーバなら動くはずなんですよね?
文字コードとかは関係あるでしょうか?
現状では
$smarty->assign('testvar','テスト');
echo "ここまでOK1";
$smarty->display('sample.tpl');
echo "ここまでOK2";
とすると、 「ここまでOK1」だけ出力します「2」はしません
また、せめてassignがちゃんと成立してるかだけでも知りたいですがどうしたら
いいでしょうか? ご意見よろしく御願いします
365:nobodyさん
08/12/31 21:49:40
>>364
error_reporting
display_errors
366:nobodyさん
08/12/31 23:02:30
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
URLリンク(ri)<)■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
URLリンク(jb)<)
367:nobodyさん
08/12/31 23:44:19
>>365
ありがとうございます、解決しました
368:nobodyさん
09/01/02 21:57:29 PIvYRgwW
月(1月~12月)を選ぶプルダウンの出力と、selected=selectedの扱いについて質問です
$monthAry[] = "1月"; から $monthAry[] = "12月"まで配列にして
$smarty->assign('monthAry',$monthAry); としました。
formを出力するテンプレートファイルでは以下のようにして、プルダウンのoptionに出力しています。
{foreach from=$monthAry item=var}
<option value="{$var}">{$var}</option>
{/foreach}
この書式で、確認画面からの戻り値{$month}(assign値です)とoption要素のvalueが等しければselectedと
するために以下のようにしたんですが、あまりきれいなソースじゃないと思います
{foreach from=$monthAry item=var}
<option value="{$var}"
{if $var==$month}
selected="selected"
{/if}
>{$var}</option>
{/foreach}
一応ちゃんと動いてますが、もっときれいで効率的な書き方はないでしょうか?
369:nobodyさん
09/01/02 22:04:07
>>368
URLリンク(www.smarty.net)
370:nobodyさん
09/01/02 23:18:35
>>369
横ですがこれのselectedって現在時刻じゃないですか?
371:nobodyさん
09/01/03 01:08:00
>>369
こんなのがあったんですね、ありがとうございました。
372:nobodyさん
09/01/04 08:20:15 S9BZj0MW
フォームで "><font="#fcc"> と入力したものを確認画面で見たいとき
{$name|escape} とすれば上記のとおり見れますよね。
これを、修正画面に持ち越したいときはどうしたらいいんでしょうか?
<input type="hidden" name="name" value="{$name}" /> だと確認画面で表示がおかしくなるし
<input type="hidden" name="name" value="{$name|escape}" /> だと修正画面の
inputの表示がおかしくなるし、、
ご意見よろしく御願いします
373:nobodyさん
09/01/04 08:53:47
セッション
374:nobodyさん
09/01/04 17:11:37
>>373
ありがとうございます 解決しました
375:モンピー77
09/01/05 09:16:41 mGW0zuF3
Smartyのテンプレート内の変数をサニタイズ化するのに下のようなことを
しているのですが
$o_smarty->default_modifiers = array( 'escape:"html"' );
配列にも適用させること可能なのでしょうか?
みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?
376:nobodyさん
09/01/05 11:59:56
>>375
default_modifires はクセがあるから気をつけたほうがよいよ。
{foreach}とか{assign}で変数弄ると二重にエスケープされちゃったり、配列入れるとエラー吐いたりする。
>Smartyを使った場合のサニタイズはどんな風にされていますか?
基本的には必要な箇所全てにescapeを書いてる。
上記踏まえて、面倒な事にならない場合だけ default_modifires 使ってる。
377:nobodyさん
09/01/07 10:21:31 nbhiW1pd
>>375
そもそもPHP側ですませておく。
なんのために分離してるのかと
378:nobodyさん
09/01/07 11:39:38
サニタイズはビュー側でもOKだと思うが。
379:nobodyさん
09/01/07 12:32:40
サニタイズ(笑)
380:nobodyさん
09/01/08 12:21:51
>>379(笑)
381:nobodyさん
09/01/08 13:16:48
ん?反論できなくて涙目?w
382:nobodyさん
09/01/08 14:37:59 /Ay52XkK
>>381
お前が暇人なだけだろw
383:nobodyさん
09/01/08 16:01:24
>>378
誰も不可とは言ってないと思うが
384:nobodyさん
09/01/08 16:03:12
>>382
必死だな
385:nobodyさん
09/01/09 02:14:26
>>383
>>377ではPHP側でやれと書いてあるようにしか読めないんだがww
必死すぎて恥ずかしいな。
386:nobodyさん
09/01/09 13:26:05 dxaSQaiQ
>>385
必死厨必死だな。
「みなさん、Smartyを使った場合のサニタイズはどんな風にされていますか?」
この意味わかるか?
387:nobodyさん
09/01/09 14:19:53
「サニタイジング」じゃねーの?
388:nobodyさん
09/01/10 01:02:19
>>386
スマン。日本語でお願い出来るか?
どういう意味で解釈したら
「そもそもPHP側ですませておく。なんのために分離してるのかと」
となるんだい?
389:nobodyさん
09/01/15 22:45:35 iReMhog8
smartyを設定したんだけど、ページが表示されません
assignもdisplayも動かないというか、それ以前に
templatesディレクトリの指定とかがうまくいってるのかがわからないです
そういう設定が今どうなっているのか、確認する方法はないでしょうか?
ちなみに今のsmarty.class.phpへの接続は以下のような形です
<?php
//テスト
require_once('Smarty.class.php');//これでSmarty.class.phpに繋がってることは確認済みです
class MySmarty extends Smarty{
function MySmarty(){
$this->Smarty();
$mydir = dirname(__FILE__);
$this->template_dir = $mydir."/templates/";
$this->compile_dir = $mydir."/templates_c/";
$this->config_dir = $mydir."/configs/";
$this->cache_dir = $mydir."/cache/";
$this->caching = 0;
}
}
?>
これを、各phpからrequireさせています
390:389
09/01/15 23:24:27 iReMhog8
>>389に書いたファイルをrequireした.phpで、
require_once('MySmarty.class.php');
//Smartyクラスのインスタンス作成
$smarty = new MySmarty();
echo "テンプレートディレクトリ:".$smarty->template_dir;
としたら、正しいパスを読み込みました
これはSmarty.class.phpも読み込み成功してるってことですよね?
どうしてdisplayしないんだろう。。
どなたかご意見ください
一つのディレクトリに複数の/smartyディレクトリが存在しちゃいけないとかの
理由はないですよね?
391:nobodyさん
09/01/15 23:29:20 iReMhog8
ごめんなさい、書き間違えです
×正しいパスを読み込みました
○正しいパスを出力しました
×一つのディレクトリに複数の…
○一つのサイトに複数の…
また、require_once()してるのが389のプログラムのファイルです(MySmarty.class.php)
392:nobodyさん
09/01/15 23:35:13
compile_dir,cache_dirへの書き込み権限はありますか?
393:nobodyさん
09/01/16 00:01:11 7rtqusgx
>>392
どうもです
パーミッションて奴ですよね? 700とか750で設定して試したんですがダメでした
そのものずばりで、displayに失敗してる、assignに失敗してる とはっきりわかる方法ないかなぁ
394:389
09/01/16 02:58:12
原因がわかりました! .tplに
<style type="text/css">
<![CDATA[
a:link{color:blue;}
a:focus{color:red}
a:visited{color:purple;}
]]>
</style>
という部分があったためでした。これを削除すると正常にdisplayされました。
念のため、この.tplのソースをコピペしてtest.htmlをつくり、それを直接開くと
どのブラウザでも確認できました
どうやら、Smartyと上の記述の組み合わせでのみエラーになるようです(理由はわからない)
このページは携帯用で、
<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "URLリンク(www.w3.org)">
<html xmlns="URLリンク(www.w3.org)" lang="ja" xml:lang="ja">
って感じにXML宣言のあるxhtmlだったんですが、この中では<!-- -->は使えないって言うので
上記の形(<![CDATA[ ]]>)にしたところエラーになりました
1)XML宣言
2)携帯用サイト(外部CSS使えない→1)のせいでコメントは<![CDATA[ ]]>にならざるを得ない)
3)Smarty
という組み合わせは実用不可能というお話でした
395:nobodyさん
09/01/16 06:34:07
>>394
URLリンク(www.phppro.jp)
396:nobodyさん
09/01/16 14:02:35
デリミタの変更はSmarty最初の課題。
397:nobodyさん
09/01/16 23:45:16
CSSは外部でいいやって思ってたけどこういう場合もあるんだな。
Smarty解釈をしないプレーンな{include}があってもいいんじゃないかという気がしてきたがあったっけ。
398:nobodyさん
09/01/19 11:16:42 RBlPIEnm
通常のHP案件でSmartyを常用していたのですが、
みんクエのようなRPGタイプのブラウザゲームを制作予定です。
常に値が変動して最新の情報を表示しないといけないケースで、
Smartyを使用するのはナンセンスでしょうか?
399:nobodyさん
09/01/19 11:19:59
ケースバイケース
400:nobodyさん
09/01/19 15:19:03
cache切っても充分使えるしな。
重要なのはメンテナンス性だな、かえってテンプレ化しづらい場合もあるし・・・
401:nobodyさん
09/01/20 18:40:01
PHP側で連想配列のキーにピリオドを含む使った
$foo['bar.baz']='hoge';
のような変数をSmarty側にassignした場合、
テンプレ側ではどういう表現をすればアクセスできるの?
{$foo[bar.baz]}
はだめだったんだけど、何か他の表現方法あるのかな?
402:nobodyさん
09/01/20 20:16:27
つマニュアル
403:nobodyさん
09/02/03 21:30:12
phpからdisplayしようとすると
Warning: preg_match() [function.preg-match]: Compilation failed: repeated subpattern is too long at offset 18454 in /usr/share/pear/Smarty/libs/Smarty_Compiler.class.php on line 454
Fatal error: Smarty error: [in main.tpl line 1]: syntax error: unrecognized tag: include file="header.tpl" (Smarty_Compiler.class.php, line 455) in /usr/share/pear/Smarty/libs/Smarty.class.php on line 1092
こんなエラーが出てしまうんですけども、原因を教えていただけないでしょうか。
ちなみにmain.tplの中身はこんなのです。
{{include file="header.tpl"}}
{{foreach from=$include_files item=file}}
{{include file="$file"}}
{{/foreach}}
{{include file="footer.tpl"}}
404:nobodyさん
09/02/03 21:32:58
なんで二重括弧なの?
405:nobodyさん
09/02/03 21:41:22
>>404
Smarty.class.phpを継承したクラスも使ってるので、本家との差別化のためです。
継承したほうは
$this->left_delimiter = '{{';
$this->right_delimiter = '}}';
を設定してあるので大丈夫だと思うんですけども。
ちなみに括弧ひとつにしても同じエラー出ます。
406:403
09/02/03 21:51:04
環境書き忘れました
CentOS 5.2 Kernel 2.6x
PHP 5.1.6
preg_matchでSmartyのタグ探して処理させてるから
タグ探しに失敗したSmartyがそんな命令ねーよって怒ってるんですかね。
407:nobodyさん
09/02/03 21:53:11
試してみたいから再現できるコード出してくれ
408:403
09/02/03 22:23:57
<?php
require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください
$a = 'test';
$mysmarty->assign('test', $test);
$mysmarty->display('test.tpl');
?>
-----------------------------------------
{{$test}}
###こんな単純なコードさえエラー出ます###
409:403
09/02/03 22:24:52
間違えました^^;
<?php
require_once('MySmarty.class.php'); //適当に書き換えてください
$mysmarty =& new MySmarty(); //適当に書き換えてください
$a = 'test';
$mysmarty->assign('test', $a);
$mysmarty->display('test.tpl');
?>
410:nobodyさん
09/02/04 01:57:17
当然ながら私の環境では再現しません
411:403
09/02/04 19:44:57
既にSmartyが実働してるサーバからSmarty関連のファイルを引っ張ってきて
インストールしたら正常に動きました。
公式の最新バージョンはバグ有りなんですかね?
何はともあれ、お騒がせしました。
412:nobodyさん
09/02/04 22:30:27
自分の環境で試してくれる回答者放置とか最悪な質問者だな
413:403
09/02/05 07:13:36
大変失礼しました。
わざわざ確認していただき、ありがとうございます。
お礼?になるか分かりませんが、問題のあった方のSmartyをアップしておきます。
libsの中身を入れ替えるだけで多分再現できると思います。
URLリンク(www1.axfc.net)
414:nobodyさん
09/02/05 08:52:10
問題のあったファイルがお礼とかw
415:nobodyさん
09/03/03 15:33:16
値がある場合はstring_formatの%0.1,なかった場合は にしたいんだけど
{var|default:' '|string_format:'%0.1'}
だと値が無い場合には全て0.0になってしまうし、
{var|string_format:'%0.1'|default:' '}
だと値が無い場合にnoticeが出てしまって両立できないんだけど、
どうしたらいいかな?
416:nobodyさん
09/03/03 15:34:02
フォーマットのf抜けてた
417:nobodyさん
09/03/05 19:41:11
CakePHP1.2にSmartyView入れて使い始めてみたんだけど
$form->createに$optionsを引数で渡すと出力されないのは指定の仕方が悪いのかま?
{$form->create('Modelhoge', array('action'=>'Actionhoge'))}
モデルだけ指定すると出力されるんだが、、
418:nobodyさん
09/03/06 03:16:30
>415
register_modifier 使って関数自作すればいいんじゃない?
419:nobodyさん
09/03/12 20:22:12
昨日テンプレートエンジンというものを知って調べたが、こんなもん速度と品質犠牲に使う本気で奴バカすぎ。ヒアドキュメントで十分すぎ。
420:nobodyさん
09/03/13 10:39:43
そうだよ?
421:nobodyさん
09/03/13 10:48:04
PHP自体がテンプレートエンジンであり
速度と品質を犠牲に使うなんて馬鹿すぎと既にCとJavaプログラマに言われていることを
419は知らないのだった
422:nobodyさん
09/03/13 11:05:13
Smartyってめっちゃ便利やな!
PHP案件は全部これ使って開発してるぁるょ!
423:smarty初心者
09/03/16 14:02:13 UpVqDdxv
Fatal error: Call to a member function assign() on a non-object in・・・*.php on line 32
というエラーがでるのですが、どういう意味なのでしょうか?
教えてください。
424:nobodyさん
09/03/16 15:28:49
>>423
ggrks
425:nobodyさん
09/03/16 17:22:30
変数名が違うんだろ
426:nobodyさん
09/03/19 02:15:19
そのレベルだとSmartyどころかphp初心者だろ……
427:nobodyさん
09/04/12 10:19:11 tJ4UxLsE
ヤッターマン公式サイトはSmartyを使っているようだ。
URLリンク(www.ytv.co.jp)
428:nobodyさん
09/04/22 01:10:23 rBHnGmhI
Smartyのファイル名が
「%%45^45E^45E480CD%%index.tpl.php」
と言うふうになりますが、これはどういう規則性でこうなっているのでしょうか?
%%から%%は区切る為にあると思うし、元ファイル名は.phpの前に付いています。
しかし、それ以外の数字と記号の意味がわかりません。
429:nobodyさん
09/04/22 01:44:07
Smarty::_parse_resource_nameに書いてある
430:nobodyさん
09/04/23 02:53:59 ai/dLDOC
あいまい検索みたいな事って出来るのでしょうか?
例えば、test_file.phpというファイル名のファイルがあったとして
testで検索してもそのファイルがヒットするようにしたいのです。
opendirなどで指定ディレクトリを開いてファイルを1つずつ読み込み、
preg_matchなどの正規表現でファイル名を調べる方法もありますが、
もう少し短い手順で、簡単に調べられる方法はないでしょうか?
431:nobodyさん
09/04/23 02:55:05
430です。すみません、誤爆です・・。質問スレに書きます。
432:nobodyさん
09/05/03 08:41:04
template_cの中身を見たら
こんな変なファイルがありました
なんですか?
%%5A^5A2^5A201544%%test.tpl.php
433:nobodyさん
09/05/03 12:28:14
コンパイル後のテンプレートファイル
434:nobodyさん
09/05/03 14:56:11
なるほど
消しても問題なさそうですね?
ありがとうございます
435:nobodyさん
09/05/03 17:01:11
( ゚д゚)ポカーン
436:nobodyさん
09/05/04 18:34:03 bGJWbWfu
MTでPHPを使う部分にSmartyを使っているみたいなのですが、
MTのテンプレートを見ると <mt: >な独自タグを使っています。
Smartyで独自タグって定義できるのでしょうか?
437:nobodyさん
09/05/05 03:15:12
>>436
できる(`・ω・´)
438:nobodyさん
09/05/05 21:30:24
HTMLファイルだって定義するぐらいはできるんだぜ
439:nobodyさん
09/05/06 01:41:19 T5mYjMeP
>>437-438
どこの設定を変更したら出来るのですか?
440:nobodyさん
09/05/06 07:14:42
>>439
断る(`・ω・´)
441:nobodyさん
09/05/09 23:09:48
www.smarty.netにつながらないんだけど俺だけ?
442:nobodyさん
09/05/10 20:05:32
>>441
落ちてるね。こういうサイトはミラーが必要だとおもいまする。
443:nobodyさん
09/05/12 01:20:58
一生落ちてればいいと思う。
444:nobodyさん
09/05/13 11:19:30 Q3CLDrVp
{insert}
で指定する関数名に
クラスのメソッドを指定する方法はありませんか?
445:nobodyさん
09/05/13 13:46:20
クラスのメソッドを指定できる関数をつくればいいんじゃあ
446:nobodyさん
09/05/13 21:18:42
初心者で悪いんだが
--Hoge.php--------
class Hoge {
var piyo;
function Hoge() {
$this->piyo = $_POST['some'];
require_once 'view.tpl';
}
}
--view.tpl---------
<p><?php echo $this->piyo; ?></p>
テンプレートとしての機能ってこれじゃ駄目なの?
447:nobodyさん
09/05/13 21:46:03
>>446
こういうセキュリティホールを量産する奴がいるから
テンプレートエンジンは必要
448:nobodyさん
09/05/14 00:07:02
>>447
イミフ
449:nobodyさん
09/05/14 02:00:08
POSTで送られたデータを無加工で出力するなって事だ
そりゃそうと、普通にメソッドコール出来たと思ったけど
450:nobodyさん
09/05/14 03:34:09
>>446
それでも問題無い場合もあるよ。
ケースバイケース。
複数人(特に外注)を使う場合は、記述方法の統一されたテンプレートエンジンをオススメだけどね・・・
PHPをテンプレートエンジンとして使う=テンプレートを扱う人にシステム全権限を与える。
善悪にかかわらず、不正なコードでシステムがクラッシュする可能性が増えるってこった。
451:nobodyさん
09/05/14 03:40:17
>>450
>>447
452:446
09/05/14 14:32:58
>>447
ああすまない、ロジックとビューを分ける際にって所を聞きたかったので
その他の所は適当に書いてしまった。
テンプレートエンジンってのはそういう所も自動でやってくれるの?
>>450
とても納得できたよありがとう。
これもケースバイケースだろうけど、PHPerって実務に携わる場合って
Smarty必須だったり「おっ、いいね!」的なアドバンテージになったりするのだろうか。。
個人的な見解で良いので、聞かせてくれると有り難い。
453:nobodyさん
09/05/14 14:45:29
Smartyならデフォルトで適用するフィルターを設置出来る
escapeを入れたら今回記述されたテンプレートでもちょっと安心
とりあえず、OpenPNEはやってた
興味があればソース眺めると良いかと
454:nobodyさん
09/05/14 17:49:28 A4v4Hdy/
>>453
質問なんですけど、ソース見て、それがsmarty経由でつくられてるものだって、
どこでわかるんですか?
見れるんなら見たいんですけど。
455:nobodyさん
09/05/14 18:51:12
HTMLソースじゃないぞ
456:nobodyさん
09/05/14 20:10:22
>455
smartyでいうところのコンパイルされていないファイルって、見れるんですか?
だとしたら他人事ではないんですけど。
457:nobodyさん
09/05/14 21:02:38
> それがsmarty経由でつくられてるもの
の
> それ
ってOpenPNEをさしてるの?OpenPNEはソースが配布されているけど
458:nobodyさん
09/05/14 21:26:13
>457
あ、そういうことでしたか。
そして、ダウンロードもしてみました。
他の人がつくったsmartyのテンプレートファイル初めてみた。
勉強になるな~
459:nobodyさん
09/05/14 21:49:19
どんな風に勉強になった?
460:nobodyさん
09/05/14 23:02:27
({ をデリミタタグとして使っているところとかです。
461:nobodyさん
09/05/16 17:50:14
MTもSmarty使っているから、参考になると思うよ。
ただ、OpenPNEの方がわかりやすいね。
なんか日本人的な書き方のような気がする
462:nobodyさん
09/05/22 09:35:19
Smartyの順序って
「PHPが苦手だからSmartyを使おう」
それとも
「PHPができるからSmartyでさらに上を目指そう」
のどっちなんですか?
わかる人からするとアホな質問かもしれませんが、
PHP初心者の自分には、どうしてもSmartyの役割がはっきりしなくて。
463:nobodyさん
09/05/22 10:07:23
SmartyはPHPの単なるライブラリだよ・・・?
464:nobodyさん
09/05/22 10:22:59
Smartyの用途はスレの上のほうで話題になってるじゃん
苦手だからとか上を目指そうとかそういう観点ではなく
465:462
09/05/22 11:11:41
>463,464
ご返答ありがとうございます。
スレも1から全部読みました。
そして、ここ数日ネットで調べまくったんですが、
どこも書いてあることは「デザインとプログラムを分離できるもの」ということで、
頭が悪すぎるのか、結局「smartyが何をしている」というのがわからずじまいでした。
そこで、書き込んでみたのです。
要は「工具セット」ってことですかね。
上の方で延々と行われた議論は
「使う工具(smartyの機能)なんか自分で作ればいい」派と
「始めからセット(smarty)であるんだから簡単で便利」派の言い争いって感じですか。
466:nobodyさん
09/05/22 11:43:37
smarty使ってMVCのviewを強化したい派(利便性高・コスト高)と
php自体にview的な要素が入ってるんだから重複は無駄だよ派(利便性中・コスト中)って感じでないかな
467:462
09/05/22 17:49:33
>>466
!('A')あ~
なんか少々モヤモヤが晴れてきました。
引き続き勉強します。
468:nobodyさん
09/05/23 20:37:34
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
09/05/23 20:42:52
phpファイルだけがSJISになってました!
ほんとサーセンでした!!!
470:nobodyさん
09/05/23 21:22:40
「こんにちは、文字化け!」
はワラタ
471:nobodyさん
09/05/23 21:30:08
smartyのテンプレートに$hogeという配列が空じゃない場合の条件分岐処理を書きたいんですけど、
この書き方はおかしいのでしょうか
{if $hoge!==""}text{/if}
たまにif文が動かないのでおかしいと思うのですが
472:nobodyさん
09/05/23 22:28:46
smarty文法のばあい
===はあるけど!==はないんじゃないか?
マニュアルに記載されてないし
!($hoge==="")
に差し替えてみよう
473:nobodyさん
09/05/23 23:15:34
is_array() とかつかえなかったっけ?
474:nobodyさん
09/05/25 00:05:06
>>472
>>473
どちらも動作しました
ありがとうございます
475:nobodyさん
09/06/30 18:33:31 Cv5BCTzF
既存のソースをフレームワークを使って書き直したいんだけど、smartyは他のフレームワークと比べて
何か利点はありますか?それとも他のフレームワークを使った方がよいですか?
フレームワークを使い比べたことがある方、教えてください。
476:nobodyさん
09/06/30 21:29:17
フレームワークはMVC+αを担当するものとした場合、
SmartyはVのみを担当するテンプレートエンジンでしかない。
・既存のソース+Smarty
・他のフレームワーク+Smarty
という使い方が一般的です。
477:475
09/07/01 02:15:48 FWyhhBD1
>>476
簡単ながら簡潔な意見だと思います。ありがとうございます。
478:nobodyさん
09/07/01 18:56:06
どういたまして。
479:nobodyさん
09/07/06 17:48:50
Smartyも大きく言えば、関数ライブラリだからな。
HTML内にPHPコードを書いているのと変わらない。
(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる
でも、プログラマー以外がテンプレートを操作する環境なら凄い便利
480:nobodyさん
09/07/06 17:53:06
小さく言うと何?
481:nobodyさん
09/07/07 00:33:01
smarty乙php乙時代はC++俺はHTMLホームページビルダー
482:nobodyさん
09/07/07 03:43:16
<small>関数ライブラリ</small>
大事なことなので小さく言いました。
483:nobodyさん
09/07/07 04:18:14
>HTML内にPHPコードを書いているのと変わらない。
PHPコードを書かせない(制限する)為に、Smartyがあるわけだが。
>(しかも、それを実現する為に複雑な処理をしているのでパフォが落ちる
内部的にPHPに変換及びキャッシュを行うから、きっちり設定をすればパフォ的には気にとめる程じゃ無くね?
システム規模によるだろうけど、大抵は処理全体の1割未満のリソースしか食わんよ。
上手に導入出来れば開発が相当楽になるので、結果的にコストパフォーマンスは上がるしさ。
一度Smartyの設計思想を読む事をおすすめ。
484:nobodyさん
09/07/07 16:14:30
>>483
いやいや。そう言うことを言いたいんじゃないよ。
Smartyを覚えるならPHPも覚えなければいけないわけで、
フレームワークに使用するにはかなりの知識が必要だよ。
ってこと。475に対する意見として書いた。
あんたの言う「きっちり設定」する為には、それなりの知識や経験が必要だろ?
だから、経験がないと難しいって言いたかった。
485:nobodyさん
09/07/08 01:44:36
MVCでの開発経験があれば、Smartyが難しいと感じる事は無いと思う。
最適化に関しては経験が必要だが、導入までは相当楽な部類かと思うぞ。
486:nobodyさん
09/07/08 02:16:30
どの程度までCとVを分離すればいいの?
487:nobodyさん
09/07/08 05:06:10
ご自由に
488:nobodyさん
09/07/08 09:25:14
(1)
if ($nantoka) {
$str="yes";
} else {
$str="no";
}
↓
result:{$str}
(2)
result:{if $nantoka}yes{else}no{/if}
489:196
09/07/08 09:25:17
Smarty信者はMVCフレームワークとテンプレートエンジンの区別もつかんのか
490:nobodyさん
09/07/08 09:30:04
>>476で回答済の話をなぜ蒸し返す
491:nobodyさん
09/07/08 10:06:46
>>487
もっと詳しく
492:nobodyさん
09/07/08 12:47:51
ココでMVCの話はお門違いだけど、一寸だけ口挟む。
> どの程度までCとVを分離すればいいの?
普通、MとCを何処まで分離すればイイの?という質問が多いと思う。
" CとV "と言ってしまう時点で、MVCがまるで判っていない印象。
MVCの中心にあるのは、C(コントローラ)
何故 C かと言えば、Webアプリのエントリーポイント(プログラムの着火点)は、アドレスであると考えたから。
どんな処理でも、まずそのスクリプトにブラウザでアクセスしないと何も起こらないという事実から、エントリーポイントをアドレスと考えた。
次に、このアドレスの扱いを拡張しようと考えた。
スクリプト名 / メソッド名 / 引数 ... って感じで、アドレスから処理を操ろうとした訳だ。
この時、上記の記述を実際の処理に落とし込むのが、C(コントローラ)の役割。
C は、受け取ったアドレスから、処理の出力先を M(モデル)にするか、V(ビュー)にするか判断するだけ...
ここから、Cは只単に処理を振り分けるだけと考えれば、おのずとMVCそれぞれの割り振りも判ってくるハズ
493:nobodyさん
09/07/08 12:53:19
>>492
じゃMとVはどう仕事を割り振ればいいの?
494:nobodyさん
09/07/08 12:59:50
M(モデル):サーバ処理専用。主にDBがらみの処理
V(ビュー):クライアント(ブラウザ)への画面表示処理専用。ブラウザに出力するものは全てココで処理。スマーティーはこの部類に入る
495:nobodyさん
09/07/08 13:11:42
でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
496:nobodyさん
09/07/08 13:53:41
MVCにとらわれすぎると、逆に可読性下げるからなぁ…
目的では無く、あくまで手法なんだからケースバイケースに実装すればいいんじゃね?
使い回し不要のビジネスロジックなんかは、Cに実装しても良いかと。
497:nobodyさん
09/07/09 12:40:59
>>495
> でもMVCモデル自体がモデルなんだから要するにMVC全体でサーバ処理するってことなの?
MVCモデルのモデルは事例を示すモデル。Mのモデルとは意味が違う。
同音表記だから同じ意味とか思うなよ...大人だろ!
498:nobodyさん
09/07/09 12:46:29
>>496
確かに可読性は下がる。また、RoRが過ぎるとフレームワークのブラックボックス化が著しくなり、
背後でどんな処理がなされているのか、まるで判らなくなる。
当然、カスタマイズしにくい...
499:nobodyさん
09/07/10 17:05:35
MVCを意識する・理解するというのは大事だと思うんだが、
どうやってその理解を深める勉強をするの?
結局、自分でソースを書いて、良いか悪いか判断するしかないよね?
俺が書いているソースなんて、まるっきり駄目な部類かも知れないけど、
それでも目的通り動いているし、俺にとっては可読性はあってわかりやすい。
なら、それで良いのではないか?と思うんだけど、後で困るのだろうか
500:nobodyさん
09/07/10 17:06:18
お前は何を言ってるんだ
501:nobodyさん
09/07/10 17:19:26
「そこまでこだわるべきなのか」 ←言いたいこと
「でも、そこまで言うぐらいだから、こだわらないと困るのか」 ←疑問
502:nobodyさん
09/07/10 17:21:09
>>499
>>496に「とらわれすぎると」って書いてあるだろ、
場合によってはMVCの枠組みに落とし込む事がデメリットになるって話。
例えば、数行で済む使い回し不要のコードの為にモデルを量産すると
管理が面倒だし、他との依存関係が不透明になるからロジック変更の時に面倒だよね。
そういう場合はCなりに埋め込んでしまう方がいいんじゃね?
って話。
503:nobodyさん
09/07/10 18:13:16 aQw5S2vU
そんなのコメントしとけば依存関係は不透明にならんだろ。ただの怠慢でMVCのせいにすんな。
504:nobodyさん
09/07/10 18:17:06
コメントで他のコードのどこから参照されてるか、全て把握かつ保証出来るんだ?
503さん、まじパねぇっす!
505:nobodyさん
09/07/10 19:29:24
503さんはエスパーなんです!
506:nobodyさん
09/07/17 01:42:54
>>494
サーバ専用処理って。。。
逆にクライアント処理をPHPで書いてもらいたいな
507:nobodyさん
09/07/17 12:08:33
>>506
入力も出力もなく
サーバ内で完結する処理という意味だろうけどね。
508:nobodyさん
09/07/17 12:24:47
>>506
大丈夫か?
頭打ったろ!
ザックリした説明に一々噛み付く馬鹿!
夏はイロイロ湧いてくるなぁ
509:nobodyさん
09/07/17 19:58:03
自分の頭に無い解釈=不正解
だというプログラマーが多すぎです
510:nobodyさん
09/07/20 22:58:34 KgRJffi+
勘違いしていたかも知れないんだけど、Smarty自体がMVCフレームワークだよね?
Modelは関数の処理で
Viewの部分がdisplayやfetchでテンプレ表示で
Controllerが最初のクラス実行で
自作フレームワーク+Smartyを作ってるんだが、
考えたらMVCすべてSmartyだけでもいい気がしてきた
511:nobodyさん
09/07/20 23:16:35
それSmatyじゃなくて
PHP+Smartyじゃん
512:nobodyさん
09/07/20 23:28:34
まあ、あながち間違ってはいないがな。
513:nobodyさん
09/07/21 10:38:01
いや、間違ってるだろw
その理論だと世の中全てのPHPコードがMVC実装されてる事になる。
514:nobodyさん
09/07/21 10:47:00
いや、それは「PHPでMVCを書いた」って事で
Smartyみたいに元から実装されている分けじゃないんでは?
515:nobodyさん
09/07/22 00:47:18
Smartyhajimemasita
516:nobodyさん
09/07/22 08:22:08
Hello! Smarty
517:nobodyさん
09/07/24 20:52:45 kF0trrBu
で、お前らキャッシュ機能って使ってる?
518:nobodyさん
09/07/24 22:28:00
キャッシュって使うもんなの?
Smartyだと使わされるもんだと思ってたよ。
519:nobodyさん
09/07/24 22:42:57
>>518
コンパイル済みテンプレートとキャッシュを混同してるだろw
俺は使ってない。
本当にキャッシュが必要なページはrenderしたものを自前で静的htmlファイル生成化してるわ。
1時間に一回再生成するようなページで使えば楽んだろうけど、レアケースだよね。
520:nobodyさん
09/07/25 00:10:16
>>519
批判じゃなくて興味本位だが、
なぜSmartyのキャッシュじゃなくて、自前なの?
Smartyで同じ事出来るよね?
521:nobodyさん
09/07/25 01:34:19
キャッシュ使うとテンプレートの更新が反映されないんだが
更新したらキャッシュ切らないとだめなの?
522:519
09/07/25 05:09:32
>>520
Smartyのキャッシュって、
PHP呼び出し → Smartyインスタンス生成 → キャッシュ確認 → 出力
という処理が入るから、生成されたHTMLファイルに直接アクセスする場合と比べると負荷はかかるんだよね。
519にも書いたように定期的に自動で再生成するような場合は楽だけどさ。
自分のやってるシステムでは、管理者が任意のタイミングで再生成するのがほとんどだから、自前で実装している。
DBからのデータを差し込みつつ、出力をキャッシュするってページはあまり無いからなぁ…。
523:nobodyさん
09/07/25 11:35:37
>>521
テンプレートを更新したらキャッシュを削除するのが、
一番手っ取り早いし、確実だと思うよ。
>>522
なるほど。俺は、テンプレート(ヘッダーフッターなど)を
DBで管理しているんだが、
テンプレート内にもSmartyタグを使ってるから、
自前のキャッシュファイル生成だとそれらが反映されずに困るんだよな
524:nobodyさん
09/07/26 02:40:29
>>523
ん?DBから動的に書き出す(+Smartyタグを処理する)場合ってキャッシュは使えないよね?
コンパイル済みテンプレートの事?
俺の中では
キャッシュ … DBデータ等の差し込み済み出力結果を静的に保存する。
コンパイル済 … SmartyテンプレートをPHPコードとしてキャッシュする。
って定義なんだ。
これが正しいかはわからない。誰が偉い人まとめて!
525:nobodyさん
09/07/26 03:26:35
じゃDBデータがあるサイトの場合は
その都度キャッシュのon/offを切り替えて使えということ?
あるいはインスタンスを分けるとか?
526:nobodyさん
09/07/26 04:04:17
キャッシュするなキャッシュ自体に期限を設けるのが一般的かな、
毎回DBからデータを持ってくるのであれば、
それは事実上キャッシュは不可能。
コンパイル済テンプレートのキャッシュは常に有効にしておいて良いと思うよ。
527:nobodyさん
09/07/27 11:12:36
テンプレート自体をDBに格納してるって話じゃないの?
528:nobodyさん
09/07/27 11:30:56
え?
529:nobodyさん
09/07/27 12:48:51
へ?
530:nobodyさん
09/07/27 17:40:06
>>525 の意味がいまいちわからんのだが…
キャッシュの有効期限とかどうしてるの?
設定してあれば on / offしなくても自動でキャッシュ更新されるし、
設定していないのであれば、キャッシュは生成されないだろうし。
上にもある通り、キャッシュとコンパイル済テンプレートの認識が混ざってないかい?
531:nobodyさん
09/07/27 22:41:03
え?
532:nobodyさん
09/07/28 10:37:13
テンプレートってDBとかに格納しておけるの?
できるならすごい便利なんだが
533:nobodyさん
09/07/28 14:22:43
>>532
できなくはないでしょ
534:nobodyさん
09/07/28 15:09:38
>>532
Smartyヘルプのリソースプラグイン読んでごらん。
まんまDBからテンプレート取得するコード書いてあるから。
535:nobodyさん
09/07/28 16:09:45
できなくないのは分かるけど
いまいちどういう時に使いたいのかわからん。
ファイル名でマッピングしておくのと何が違うんだろ?
536:nobodyさん
09/07/28 17:56:09
>>535
updateコマンドで一括変更したり、日にちでサイトをガラッと変えたりするんじゃね
537:nobodyさん
09/07/28 20:41:09
>>535
CMSとか作る場合には良いんじゃないかね。
管理画面からの検索や更新、バックアップが取りやすい。
あとはWEBサーバが冗長化されていて、リソースを一箇所に纏めたい場合とかかね。
制作の手間暇考えたら、メリットは薄いと思うけど。
538:nobodyさん
09/07/29 22:00:38
>>535
ファイルをDBで管理すると、WEB上から更新できるならな。
しかし、複数アカウントを発行して利用するシステム(MTなど
の場合は、システム毎にテンプレートを編集できるので
ファイルで管理するより便利。メリットは絶大だと思う。
539:nobodyさん
09/07/30 00:20:18
いや、その用途なら普通にファイル編集orアップローダのが楽だろ…
540:nobodyさん
09/07/30 12:07:42
>>539
DB分かってる人ならDB使うのがラクだと思えるよ。
ファイルはすぐ腐る。
541:nobodyさん
09/07/30 12:13:33
少し腐ったぐらいが美味しい...
542:nobodyさん
09/07/30 12:16:56
ファイルは数が増えるとどんどん大変になるんだよな
543:nobodyさん
09/07/30 16:35:27
システム作る側は楽かもね。
デザイナの大半はローカル環境でコーディング、一括でアップロードを望んでいる。
またテンプレート自体がバージョン管理下に置かれている事も多々ある。
運営する上でDBに流し込み作業が発生するのは楽ではない。
544:nobodyさん
09/07/30 16:40:57
ディレクトリ分けもせずに700個のHTMLと格闘してる奴を見てるとホント馬鹿だと思えてくる
545:nobodyさん
09/07/30 17:12:18
そんな奴いねーよw
546:nobodyさん
09/07/30 18:40:48
700個のHTMLって時点でテンプレートを活かしてない感じが…
547:nobodyさん
09/07/30 18:50:56
テンプレどころかCSSすら使ってないんですわ、マジで。
548:nobodyさん
09/07/30 18:58:17
でも場末のウェブ制作屋ってほんとひどいからね。
ちょっとかじった中学生か、ってレベルのおっさんが
見てて頭痛くなってくるような非効率的な作業環境で、
素人騙して金貰ってるようなとこいっぱいあるぞ。
549:nobodyさん
09/07/30 21:03:15
>>543
流し込み作業をプログラムですれば良いだけだろ
一括アップロードと変わらん
550:nobodyさん
09/07/30 22:46:24
>>549
それやってしまうとファイル管理のメリットも、DB使うメリットも薄れてしまう気がするんだが。
551:nobodyさん
09/07/30 23:54:04
というかDBなんてある意味ファイル管理をラップしたようなもんだから
DBでできてファイル直弄りでできんことはないだろ。
せっかくキャッシュとか使ってるのに
変なとこでDB使うとパフォーマンスのボトルネックにもなりかねんし
DBじゃなきゃ開発コストパフォーマンスの点でよっぽど差がでる
って場合じゃなきゃ下手にDB化なんかせんよ。
そういう奴は画像ファイルとかもカラムに突っこんでるタイプだろ。
552:nobodyさん
09/07/31 00:03:20
どちらにしろデータとして記録するんだからファイルで置こうがDBに突っ込もうが大して変わらんだろ
553:nobodyさん
09/07/31 01:55:56
Smarty使って、DBではなくファイルで管理しているWEBアプリってあるか?
って思ったけど、OpenPNEがそうだな。追加で編集する場合はDB使うけど
554:nobodyさん
09/07/31 02:04:43
>>552
制作、運用、実行コスト、全てが大きく変わるわw
検索するとか、システム一括で何かしたいとか、特別な理由が無い限りDBにテンプレートつっこむのはナンセンス。
555:nobodyさん
09/07/31 02:43:31
ナンセンスってほどでも無いっしょ
ファイルシステムだって名称を唯一のキーとしたDBみたいな物だし
556:nobodyさん
09/07/31 03:11:10
PCのスペックが上がりまくったせいで、恐ろしいほどのヘマをしない限りは
DBで記録しようがファイルで置こうがボトルネックと呼べるレベルのものは出ない
むしろ、恐ろしいほどに数が増えて人的に整理が大変になったほうがボトルネック
557:nobodyさん
09/07/31 03:49:06
>>555
だからこそナンセンスなんだよw
ファイルシステムの実装はDBそのものなんだから、DBにつっこむ必要が無いものをつっこむ必要は無い。
>>556
にわかSEにありがちな発想ですね(^^
人的整理はDBやSmarty以前のバージョン管理、運用の問題。
558:nobodyさん
09/07/31 04:25:59
>>557
ほう、ではDBとFSで実装した場合の違いを定量的に示してくれ
559:nobodyさん
09/07/31 04:42:31
>>558
FSじゃなきゃ出来ない事、FSなら標準で出来る事は多々あるだろう。
・DBコネクション等の負荷が無い
・当然PHP側のコードもシンプル
・SVN等のバージョン管理システムが使える
・使い慣れたエディタで直接編集が可能
・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
・当然複雑な管理画面も不要になる為実装コストは激減
これらはFSなら特別な実装は不要。
君はDBで実装出来るか?
検索したいとか、DBサーバで集中管理したいとか、特別な要件が無い限りテンプレートのDB化はしない。
逆にDBを疑似ファイルシステムとして使うメリットとその実装コストを教えて欲しい。
オープン系CMSを引き合いに出すのであれば、同等の管理画面等を作るコストも入れてくれよな。
560:nobodyさん
09/07/31 05:22:21
定量的の意味知ってるか?
561:nobodyさん
09/07/31 05:56:21
定量的って言葉使いたいだけですか?w
>>559 に答えられたら答えてやんよ。
562:nobodyさん
09/07/31 10:54:30
まぁ、喧嘩するなや。
第三者からみたら、有益な討論してるように感じるんだから。
563:nobodyさん
09/07/31 11:13:51
>>561
低学歴乙
564:nobodyさん
09/07/31 11:35:24
>>562
有益かはともかくSmartyの議論ではなさそうだな。
565:nobodyさん
09/07/31 12:20:19
>>564
Smartyの使い方に関する議論だろ
566:nobodyさん
09/07/31 15:05:22
smartyってHTMLだけしか知らないデザイナーに読みやすくするためだけの技術だろ
567:nobodyさん
09/07/31 16:10:10
逆だと思うが。PHPを使えるプログラマー用の技術だろ。
568:nobodyさん
09/07/31 18:56:10
>>563
答えられない質問には煽る…典型的な厨ですね。
定量的も何も、FSの場合は >>559の 実装コストはほぼゼロ。
DBで作った場合のコストは?低学歴な僕には検討もつきません><おしえてください。
569:nobodyさん
09/07/31 19:46:53
>>568
俺も低学歴だけど頑張ってみる
XOOPSみたく、ベースはファイルで、そっからDB突っ込む奴で考えてみた
> ・DBコネクション等の負荷が無い
キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
> ・当然PHP側のコードもシンプル
プラグインで済むから同じ
> ・SVN等のバージョン管理システムが使える
ベースのテンプレートをファイルにすれば同じ
> ・使い慣れたエディタで直接編集が可能
コピペすれば一緒かと
> ・使い慣れたソフトでアップロード/ダウンロード/バックアックも自由自在
phpMyAdminは使い慣れたソフトってことで
> ・当然複雑な管理画面も不要になる為実装コストは激減
テキストボックスで十分じゃん
> 同等の管理画面等を作るコストも入れてくれよな。
phpMyAdminで十分
テンプレートがDBに入ってて便利なのは、
出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
頑張れば携帯でも更新出来るし。。。
570:nobodyさん
09/07/31 19:49:07
ファイル操作用のPHPコードと
DB操作用のSQLでは、後者の方が自由度高いと思うけどな
571:nobodyさん
09/07/31 20:49:32
>>568
煽ったのはお前だろカスが
最初に質問したのは俺だが何故答えないの?
572:nobodyさん
09/07/31 20:58:48
また「全部自分でやるから実行速度は早い」とかえらそうにしてる馬鹿が騒いでるのか
573:nobodyさん
09/07/31 21:21:59
>>571
「俺だが」ってIDも出していない奴をどうやって判断する?
俺たちはエスパーじゃないぞ?
574:nobodyさん
09/07/31 23:21:12
>>569
> キャッシュファイル使えばテンプレ本体がDBにあっても関係ない
テンプレート更新確認の為に、DB接続されるよ。
> プラグインで済むから同じ
プラグイン作成、テストの工数がかかるよ。
> ベースのテンプレートをファイルにすれば同じ
一括でコミットしたり、指定リビジョンにロールバックしたい場合とか困るよね。
> コピペすれば一緒かと
エディタで編集→管理画面を開く→コピペ→DBにコミット→確認が、直接編集と同じ手間と?
> phpMyAdminは使い慣れたソフトってことで
ファイルやディレクトリ単位での権限管理はどうするの?
例えば一時的にディレクトリ名を変えてバックアップ取りたい場合とか、運営者にSQLを書かせるの?
> テキストボックスで十分じゃん
見た目上はそうかもしれないが、内部実装は相応のコストがかかると思うよ。
複数ファイル同時に更新しなきゃいけない場合とかもあるしさ。
> phpMyAdminで十分
上に同じ。
> テンプレートがDBに入ってて便利なのは、
> 出先とかでftp,シェルが使えない環境でもブラウザで更新出来るに尽きるんじゃないかと
> 頑張れば携帯でも更新出来るし。。。
これはDBかFSかは関係無くね?制作者的にはSQL回す方が楽ではあるだろうけど。
>>571
>>568 で答えてるよ。FSならコストゼロ、DB実装なら相応。要件次第。
高学歴の君に、DBで同等の実装をした場合のコストを教えて欲しいな。
575:nobodyさん
09/08/01 01:20:41
だから、いちいち煽り入れるなって
お前がせっかく書いたレスも陳腐な物になるぞ
576:nobodyさん
09/08/01 23:36:43
>>571はどこいっちゃったの?
577:nobodyさん
09/08/02 01:41:46
お前がいい加減にしろ
578:nobodyさん
09/08/02 01:48:38
>>571はどこいっちゃったの?
579:nobodyさん
09/08/02 03:05:41
まぁ普通はDBを使うメリットなんて無いって事さ
DB憶えたての頃は俺も無闇にDB化したがったものだ
580:nobodyさん
09/08/03 01:13:56
じゃ、大手ポータルサイト(ブログとか)って
テンプレートをDBに入れずにファイルで読み書きしてるのかな?
581:nobodyさん
09/08/03 03:29:39
そんな極少数の大規模案件を例えに出されてもなぁ・・・
使ってるところは使ってるだろう(ハテナとか、スケーラビリティか何かを考慮してDBをファイル置き場に使ってるとか)
要件次第なんじゃない?
それなりの資金と開発期間があり、WEBベースで不特定多数が編集するシステム開発
とかだったらDB化した方が遙かに楽だろう。