トップページ⇒php
984コメント324KB

【PHP】Smarty【Template】

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001nobodyさん03/03/10 00:57ID:NhgrjNBT
このスレ、あってもいいんじゃないかと。

本家(英語)
http://smarty.php.net/

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0896nobodyさん2005/06/02(木) 16:41:46ID:???
うん、切り分けをハッキリ出来るってことだろ
とはいえプレゼンテーションロジックも入って来るし
phpも書くことは出来る…
メリット薄っ
0897nobodyさん2005/06/02(木) 16:46:49ID:???
{php}タグは禁止できます。
Smartyの知識はないようですね。キャッシュとコンパイルの
区別も付いていない人も居るみたいですし。
0898nobodyさん2005/06/02(木) 16:55:48ID:???
ハイハイ。
0899nobodyさん2005/06/02(木) 17:03:48ID:???
それなら切り分け、取り回しの良さがメリットになるかな
あとサニタイズもやりやすい気はするなぁ
ただメリット群がモッサリした遅さと
トレードオフするかというと疑問符…やはり遅さがネックだな
0900nobodyさん2005/06/02(木) 17:10:19ID:???
急にSmarty使いの分が悪くなってきたので無理やり加勢するぞ。
Smartyにメリットが無いなんていってるやつは営業の事を全く考えていない。
何の特色も無いプログラムをアピールするのは至難だと言うことに気づけ!
「世界的に普及していて実績もあるMVCフレームワークのひとつであるSmartyは
LAMPとの相性も最高で、かつて無い抜群のパフォーマンスを発揮します」
てな調子で煽っておけばバカな客はよくわかんねーけどすごそうだと思い込むし
少しバカな客は書店などで冒頭の謳い文句だけ読んで最新技術なのか〜
なんて思い込むものさ。その結果ボったくっても文句言われにくくなるので
仕事も安定するし、収益も上がる。
ほんのわずかな実行速度や手間をケチったおかげで仕事が減っては本末転倒。
どうだ?使いたくなってきただろw
0901nobodyさん2005/06/02(木) 17:14:35ID:???
>>900
お前はデメリットを強調しにきたのか
0902nobodyさん2005/06/02(木) 17:16:49ID:???
ワラタ
0903nobodyさん2005/06/02(木) 17:31:57ID:???
営業の必要ないプロジェクトでも使ってますが。
0904nobodyさん2005/06/02(木) 17:37:35ID:???
アンチの結論はincludeを使えなのか?
0905nobodyさん2005/06/02(木) 17:40:11ID:???
まあPHPがHTMLに埋め込む形のプログラムだから、
Perlとかと比べるとメリット薄いといえば薄いが
必要ないって事も無いと思うけどな。
0906nobodyさん2005/06/02(木) 18:08:29ID:???
印象としては
「若干過大評価されている」気はするな、世間的に。スマーチィ。
0907nobodyさん2005/06/02(木) 19:31:36ID:???
なんとなくFlexy使ってるんだけど、Smartyと比べるとどうなんでしょ?
まだ、本格的に使ってるわけじゃないんで、アドヴァンテージがSmartyにあるなら、
乗り換えてみようかなぁ、とか思うんで。
0908nobodyさん2005/06/02(木) 19:38:15ID:???
素直にHTML_Template使えばいいのにね。
0909nobodyさん2005/06/02(木) 21:23:12ID:???
最大のメリットのキャッシュがイマイチだからなぁ…
mojaviデフォルトのテンプレートシステムにちょっと機能加えるくらいの方がいい
0910nobodyさん2005/06/02(木) 21:47:27ID:???
やっぱSmarty2だよな
0911nobodyさん2005/06/03(金) 00:57:34ID:???
やっぱ自作の連携方法で、、、
0912nobodyさん2005/06/03(金) 01:13:13ID:???
>>911
車輪の再発明には気をつけてね。
0913nobodyさん2005/06/03(金) 01:30:10ID:???
単純な構成だから多分大丈夫かと思われ
0914nobodyさん2005/06/03(金) 03:25:09ID:???
けんかはやめて
0915nobodyさん2005/06/03(金) 15:41:14ID:???
なんで車輪の再(ryがダメ?
0916nobodyさん2005/06/03(金) 20:29:17ID:???
>>915
作るなら勝手に作ればって感じだけど
お前が考え付くようなウンコな仕様はすでに誰かが作ってるよ。
無駄ってこと。
0917nobodyさん2005/06/03(金) 21:07:54ID:???
んなこと言ってたら永遠に進歩が無いけどな
0918nobodyさん2005/06/03(金) 22:13:55ID:???
>>917
逆じゃないか?
0919nobodyさん2005/06/03(金) 23:45:39ID:???
別にうんこでもいいんだよ
必要最小限の機能があって速ければね
viewなんてそんなに機能いらないだろ
0920nobodyさん2005/06/04(土) 01:23:57ID:???
>>918
全然逆じゃない。

>お前が考え付くようなウンコな仕様はすでに誰かが作ってるよ

なんて言ってるようじゃ進歩はしないね。
0921nobodyさん2005/06/04(土) 01:27:25ID:???
>920
なんで駄目なんだとか聞くうんこなら、ってことじゃねーの?
0922nobodyさん2005/06/04(土) 01:29:33ID:???
>>921
車輪の再開発が一概に駄目とは言えないのに
駄目と言い切ってる馬鹿がいるから聞いただけだろ
0923nobodyさん2005/06/04(土) 01:53:02ID:???
ほんとお前らうんこが好きなんだな
0924nobodyさん2005/06/04(土) 02:01:06ID:???
この会話自体が車輪の再発明な件について。
0925nobodyさん2005/06/04(土) 02:07:05ID:???
ウンコアンデナマットー
0926nobodyさん2005/06/04(土) 03:08:21ID:???
「どうしても車輪を再発明したいなら、少なくともマシな車輪を発明すべきである」
とかいう有難いお言葉をラクダ本で読んだ記憶がある

>>924
会話もフレームワーク化すると再利用しやすくなってウマー
0927nobodyさん2005/06/04(土) 05:13:25ID:???
Apacheの代替や新しいプログラム言語を作るってわけじゃないんだから、
ラジコンのタイヤ程度のものどんどん再発明すればいいじゃん
0928nobodyさん2005/06/04(土) 12:26:05ID:???
JavaのStringクラスを自作して遊んでいました。これは車輪眼ですか?
0929nobodyさん2005/06/04(土) 12:50:47ID:???
>>928
車輪眼じゃなくて写輪眼ね。
0930nobodyさん2005/06/04(土) 13:30:42ID:???
>>928
車輪だけど、車輪は作ることによって得ることも大きい。
使う方にとっちゃ、ちゃんとした車輪を選択するけどな。
0931nobodyさん2005/06/04(土) 15:31:37ID:???
いい加減スレ違い
0932nobodyさん2005/06/04(土) 17:54:24ID:???
Smartyのsectionって使い勝手悪くね?
ループはforeachがあるし、条件分岐はifがあるし
存在意義がよく分からん。
0933nobodyさん2005/06/04(土) 21:03:07ID:???
PHPAcceleratorとか使うともっさり感消えたりする?
0934nobodyさん2005/06/04(土) 21:37:08ID:???
>>932
おまいがsmarty使ってる理由がわからん
0935nobodyさん2005/06/04(土) 22:50:50ID:???
>>934
能書きたれる前にsectionの存在意義を教えろ。
0936nobodyさん2005/06/04(土) 23:17:10ID:???
>935
forの替わり
0937nobodyさん2005/06/04(土) 23:51:52ID:???
ぶっちゃけ私もsectionあんまり使ってない。
一通りマニュアル読んだけど、今のとこいまいち使いどころがない。
そのうち出てくるかも。
0938nobodyさん2005/06/05(日) 03:50:52ID:???
自分はsectionよく使うけど、
foreachの前にsectionを知ったからそのまま使ってるだけだしなぁ。
まぁ別にあって困るもんじゃないし、sectionでもforeachでも
好きなほうを使えばいいんじゃない?
0939nobodyさん2005/06/05(日) 13:00:58ID:???
こうゆう単純な構文が良いんだが。

[テンプレ側]
{loop name=hoge}
$name
$title
$comment
{/loop}

[PHP側]
foreach ($foo) {
$smarty->append("name" => "aaa", "title" => "bbb", "comment" => "ccc");
}
0940nobodyさん2005/06/05(日) 13:03:09ID:???
PHP部分間違えた。
こんな感じ。

[PHP側]
foreach ($foo) {
  $smarty->append(
    "hoge" => array(
      "name" => "aaa",
      "title" => "bbb",
      "comment" => "ccc"
    )
  );
}
0941nobodyさん2005/06/05(日) 13:06:31ID:???
テンプレ側も間違えた。
こんな感じ。

[テンプレ側]
{loop name=hoge}
名前:{$name}
タイトル:{$title}
コメント:{$comment}
{/loop}
0942nobodyさん2005/06/05(日) 17:03:58ID:???
>>939-941
Smarty以前の問題だよ、おめーわ
0943nobodyさん2005/06/05(日) 18:35:52ID:???
>>942
何が言いたい?
大好きなSmartyを貶されて切れたかガキ?
0944nobodyさん2005/06/05(日) 19:01:29ID:???
>>939
そういうテンプレートエンジンなら、他にたくさんありそうだからそれ使えばいいじゃない。
0945nobodyさん2005/06/05(日) 23:18:21ID:???
>>941
案外、それって使いにくいんだよな
PerlのHTML_TEMPLATEってそんな感じだった
0946nobodyさん2005/06/05(日) 23:53:09ID:???
>>943
おいおい、しっかりしろよ・・・
人のことをガキ呼ばわりする前にもう少し頭使おうぜ

> foreach ($foo) {
>   $smarty->append(
>     "hoge" => array(
>     "name" => "aaa",
>     "title" => "bbb",
>     "comment" => "ccc"
>     )
>   );
> }
0947nobodyさん2005/06/06(月) 22:42:10ID:???
>>946
いちいち細かい奴だな。
別に動くプログラムを組んでるわけじゃないんだから
雰囲気だけ分かりゃいいだろうが。
雑魚はこれだから。
0948nobodyさん2005/06/06(月) 23:00:55ID:???
プw 雑魚はこれだから。
0949nobodyさん2005/06/06(月) 23:54:30ID:???
おっと、>>939 逆切れか。

むちゃくちゃな構文で質問して、
まともな答えもらおうっていう方が甘ったれてんだよ。
百年ほど人生やり直してこい。
0950nobodyさん2005/06/07(火) 01:28:14ID:???
>>949
おいおい。勘違いしてもらっちゃ困るんだが。
お前らみたいなアホに質問なんかしねーってw
日本語すら理解できないような池沼からまともな答えなんて
期待してねーっつの。ちゃんとスレ読み直してみろよ。
日本語も分からないでプログラム言語か?
順序が違うんじゃねーのwww
0951nobodyさん2005/06/07(火) 01:58:41ID:???
なんでいきなり日本語の問題になってるわけ?
脳味噌まで自己中とは恐れ入ったな(プ
0952nobodyさん2005/06/07(火) 10:09:04ID:???
明らかにプログラミング言語なんかより日本語のほうが難しいだろ
0953nobodyさん2005/06/07(火) 10:14:08ID:???
ということは>939は絶望的ということですね
0954nobodyさん2005/06/07(火) 12:08:14ID:KvahcTPl
上にも書いてあったけど、デザイナにSmartyの構文覚えてもらうくらいなら、cssキッチリ理解してもらって
外部cssいじらせた方が良いと思うがなぁ。もちろんデザイン的に外部cssのみではどうにもならん場合も
あるだろうが、どうにかなる場合の方が多いだろうし。

論理構造を始めに決めときゃ、デザインもらってロジック埋め込むなんてせんでも同時に製作始められるし、
loopやifがもっとスッキリ書けてオーサリングツールと完全に連携できるテンプレートエンジンがありゃいいけど
テーブルの行の色やら列数をデザイン側で任意に変更させるのにデザイナに↓こんなんの説明とかしても
あんまり意味あると思えんしなぁ。

<table>
 <!--{section name=row loop=$LIST step=3}-->
 <tr>
  <!--{section name=col start=$smarty.section.row.index loop=$smarty.section.row.index+$smarty.section.row.step}-->
   <!--{if $LIST[col] != null}-->
  <td><!--{$LIST[col]}--></td>
   <!--{else}-->
  <td> </td>
   <!--{/if}-->
  <!--{/section}-->
 </tr>
 <!--{/section}-->
</table>
0955nobodyさん2005/06/07(火) 12:40:16ID:???
Smarty(HTML側)をある程度操作出るようになるなんて1日あれば十分だろ。
0956nobodyさん2005/06/07(火) 18:55:39ID:???
やる気があればな
0957nobodyさん2005/06/07(火) 21:49:38ID:???
外注デザイナに「これ覚えて!」とはなかなかいいにくい
0958nobodyさん2005/06/08(水) 00:40:41ID:???
Smarty使うデザイナの人ってどうやってHTML書いてるんだろう
ブラウザでプレビュー際にコードが表示されて邪魔にならないのかな
0959nobodyさん2005/06/08(水) 00:54:41ID:???
>>958
PHP直接埋め込むよりはマシかと。

<A HREF="<?php echo $aa ?>">aa</a>

みたいのだとぐちゃぐちゃになって目も当てられない。

でもSmartyって、制御構造とか入れると結局テンプレートも煩雑になるし、
コストも高いし、自由度は低いしで、俺は自前で{$form['aa']['bb']}みたいのを埋め込んだ
テンプレートを作ってevalで埋め込みしてるよ。

$output = file('テンプレートファイル名');
array_unshift($output, "print <<<EOTNJGTU\n");
array_push   ($output, "EOTNJGTU;\n");
eval(join("", $output));

こんな感じで。実際にはクラス化して結果をリファレンスでも取れるようにしたり、使いやすくしてる。

テンプレート中での制御構造は潔く諦めて、テーブルなんかはViewクラスで生成して
変数にぶちこんだものを上記の方法でテンプレートに埋め込んでる。
小規模開発ならこれで充分だと思う。
0960nobodyさん2005/06/08(水) 03:06:51ID:???
DWだとSmartyに対応しているもよう
0961nobodyさん2005/06/08(水) 05:13:08ID:???
そりゃ初耳
0962nobodyさん2005/06/08(水) 09:25:23ID:???
確かに、対応してるね。でもincludeが最強だぞ?
つhttp://www.contactlensesprice.com/smarty/
0963nobodyさん2005/06/08(水) 22:34:16ID:???
デザイナもSmartyなんて滅多に役に立たない構文覚えたくもないだろうしな。
逆にCSSなんかは今やYahooですら使ってる必須技術。
開発側もCSS自由自在にデザインできるテンプレートを作ってやれる程度には
ならんとな。
0964nobodyさん2005/06/08(水) 22:44:00ID:???
>>963
おまえプログラマか?
プログラマにとってはHTMLなんて簡単な言語だと思うが。
0965nobodyさん2005/06/09(木) 00:09:22ID:???
>>964
963じゃないけど、CSS != HTML
CSSは結構奥深いよ
DOMと組み合わせたりして、面白いことが色々出来る
ブラウザの対応がバラバラなのが痛いがなー
0966nobodyさん2005/06/09(木) 00:42:58ID:???
>>965
いや、俺はW3C信者だから。仕様書読むのが楽しい人だから・・・・・
0967nobodyさん2005/06/09(木) 01:33:29ID:???
Smartyの構文程度で覚えるの嫌ーなんてへこたれるデザイナーはチェンジ。
0968nobodyさん2005/06/09(木) 01:49:17ID:???
>>967
同意。
デザイナが覚えるべき構文なんてそれほど多くない。
それでだめならクビ。
0969nobodyさん2005/06/10(金) 21:13:44ID:???
>>968
あんたみたいな奴の下で働く奴はかわいそうだな。
0970nobodyさん2005/06/10(金) 21:16:50ID:???
会社はそんなに甘くないのよ
0971nobodyさん2005/06/10(金) 21:42:17ID:???
今時HTMLでデザインしてるデザイナーやプログラマこそチェンジだろw
0972nobodyさん2005/06/10(金) 21:59:54ID:???
まぁ仕事できない奴がクビになるのは当たり前だよな
0973nobodyさん2005/06/10(金) 22:02:05ID:???
探すのにもコストかかるんだよバカヤロー
そんなどうでもいいことで簡単に切れるか
0974nobodyさん2005/06/10(金) 22:17:14ID:???
>>964がなんであんな見当違いなレスをしたのかわからん
0975nobodyさん2005/06/10(金) 22:28:44ID:???
>>971
チェンジされた人
0976nobodyさん2005/06/10(金) 23:27:32ID:???
>>975
HTMLでデザインしてる人
0977nobodyさん2005/06/10(金) 23:44:10ID:???
>>976
Smartyの独自タグ覚えて優越感に浸ってる人
0978nobodyさん2005/06/11(土) 00:30:57ID:???
      ∧__∧ ll
     |(・)。(・)| ( )< バッドノウハウなんだね!
      |ヾ三ヲ└'ノ
    .|    l´
     つ ま り
0979nobodyさん2005/06/11(土) 00:36:32ID:???
まぁphpメインの中小webアプリ開発なんて、デザイナにsmartyバリバリ使いこなされたら
プログラマはSQL書いて結果を配列で渡すだけみてーな仕事増えそうだけどなー。
0980nobodyさん2005/06/11(土) 01:00:29ID:???
>>977
なんかもう言ってることがグダグダになってる人
0981nobodyさん2005/06/11(土) 01:03:19ID:???
>>980
反論のネタがなくなった人
0982nobodyさん2005/06/11(土) 05:26:53ID:???
>>982
とにかくセクースしたい人
0983nobodyさん2005/06/11(土) 11:24:44ID:???
>>981
>>977で話しがかみ合ってないことに気付いてない人
0984$default_modifiers、$debuggingの設定でparse error2005/06/11(土) 11:33:33ID:uAXJbuvY
$default_modifiers、$debuggingを設定して、テンプレートで{if empty($hoge)}を使うと
debug.tpl.phpがParse errorになるのですが、
最後に述べる解決方法でより良いものを知っている人が教えてください。
問題の発端は{$hoge}でParse errorになったのですが、そちらは解決できました。
(PHP 4.3.9とSmarty 2.6.9を使用
・hello.php
<?php
require_once("libs/Smarty.class.php");
$o_smarty=new Smarty();
$o_smarty->default_modifiers=array("upper");
$o_smarty->assign("hoge","abc");
$o_smarty->debugging=true;
$o_smarty->display("hello.tpl");
?>
・hello.tpl
<html><head><title></title></head><body>
{$hoge}</body></html>
・出力
ABC
Parse error: parse error, expecting `T_VARIABLE' or `'$'' in
(中略)templates_c(中略)debug.tpl.php on line 10
・debug.tpl.php 10行目
<?php if (isset ( ((is_array($_tmp=$this->_tpl_vars['_smarty_debug_output'])) ?
$this->_run_mod_handler('upper', true, $_tmp) : smarty_modifier_upper($_tmp)) ) && ((is_array($_tmp=$this->_tpl_vars['_smarty_debug_output'])) ? $this->_run_mod_handler('upper', true, $_tmp) : smarty_modifier_upper($_tmp)) == 'html'): ?>
・解決方法
core.display_debug_console.phpを修正
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=5179&highlight=expecting+tvariable
件の解決策は以下を考えました。
・if empty($hoge|smarty:nodefaults)と書いてParse errorを避ける。
・またはデバッグの時は、default_modifiersをコメントにする。
根本的な解決策はSmarty側のどこかのソースを修正しなければならないのでしょうか?
(できればhello.tpl、phpは修正したくないです。)
レス数が950を超えています。1000を超えると書き込みができなくなります。