【PHP】Smarty【Template】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/10 00:57ID:NhgrjNBT本家(英語)
http://smarty.php.net/
日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0696nobodyさん
05/03/16 10:24:48ID:???記述方法なんかは、スマーチーと似た感じ。ドットがスラッシュになった感じだったかな。
ロジックの追加とかも簡単、まあそれでも自由度が低い。elseとかやりたいなら2、3層前とかから書き直さないといけないから、意味ないし。
0697nobodyさん
05/03/16 18:40:40ID:???HTMLtemplateのくわしい話MLに、最近ひさびさに
メール流れた〜と思ったら。SPAMでした…orz
2年近く放置してる作者も、それに登録したまんまの俺もどうかしてますが。
あ、でも新しい系列になって発展してたんですな。
俺の感想も>>696に似たようなもんだけど、
元々の割り切りからも考えるに、プログラマからすると
どうしても物足りなさはある。かといって発展拡張を考えるなら
高機能な標準的なテンプレートを使っちまう方が良いし というところ。
でも自分用の軽量なテンプレには部分的にはパクらせてもらった。
テンプレートを使うんじゃなくて、テンプレートを作る上で
参考にするのは良いと思うよ。作りが簡単だし。
0698nobodyさん
2005/03/26(土) 16:50:17ID:9cvI6Qz8123456789
というデータをphpからうけとったのを
456
のところだけ切り取って出力するような・・・
0700nobodyさん
2005/03/26(土) 17:01:27ID:9cvI6Qz8なるべくなら使わないでいたいんですけど、
それがいいのかなぁ
0703nobodyさん
2005/03/26(土) 17:13:51ID:9cvI6Qz8レスありがとうございます。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-3J_html/
にはsubstrは無いみたいですけど、>>699さんの方法か
何かで定義しなくても使えるものなんでしょうか?
教えて君で申し訳ないです。
0705nobodyさん
2005/03/26(土) 17:25:59ID:9cvI6Qz8まじすか。
ありがとうございます。使ってみます−
0706nobodyさん
2005/03/26(土) 17:32:21ID:???$securityをtureにしてると$security_settingで指定しないと使えないから気をつけろよ
0707nobodyさん
2005/03/26(土) 17:33:45ID:9cvI6Qz8と、書いてみたのですがエラーになってしまいます。
{$hoge}だと123456789と表示されます。
使い方間違ってるのでしょうか?
0708nobodyさん
2005/03/26(土) 17:34:13ID:9cvI6Qz8あ、それかも。みてみますー
0709nobodyさん
2005/03/26(土) 17:39:51ID:9cvI6Qz8もしかして、その設定はtpl上で変更するのは無理でしょうか?
私がいじれる権限があるのはtplのみなので鯖管理者に
お願いしないとだめでしょうか?
0712nobodyさん
2005/03/31(木) 01:53:29ID:D4Jqx9KWsmartyで読み込んだhtmlの<head></head>のなかに覧の文字が
あると、エラーになってしまいます。
\とか\""\などでかこってみたりしたのすが、駄目でした。
どなたか回避方法をご存知ないでしょうか・・・?
よろしくお願いいたします。
0714nobodyさん
2005/03/31(木) 02:34:14ID:D4Jqx9KWううぅ。このスレを通しで読んでみたのですが
わからなかったのです。
mbstring.http_output をSJISに、というのが
ソレかな、と思ったのですが、Smarty.class.php
の中に、mbstring.http_output なんてなかったぅ。
php.iniとhttpd.confはSJISに変えてみたのです。
0716nobodyさん
2005/03/31(木) 11:32:56ID:???みんなどうしてるの?
タグを変えてるとか?
はやくマルチバイトに
完全対応してくれないかな
0717nobodyさん
2005/03/31(木) 11:39:58ID:???0718nobodyさん
2005/03/31(木) 12:33:56ID:???0719nobodyさん
2005/03/31(木) 14:50:48ID:???テンプレートもコードもDBもすべてEUC-JPで統一。
出力の段階でSJISにして吐く、ってのは?
print mb_convert_encoding($smarty->fetch('index.tpl'), 'SJIS', 'EUC-JP');
とか、またはアウトプットフィルタで以下のようにするか。
function convert_to_sjis($output, &$smarty)
{
return mb_convert_encoding($output, 'SJIS', 'EUC-JP');
}
$smarty->register_outputfilter('convert_to_sjis');
$smarty->display('index.tpl');
0720nobodyさん
2005/03/31(木) 17:13:50ID:???同じ問題がでるだろ?
0721nobodyさん
2005/03/31(木) 22:31:52ID:???ttp://ns1.php.gr.jp/pipermail/php-users/2003-February/013592.html
デリミタを他の文字に変えても可。<% %>とか。
0722714
皇紀2665/04/01(金) 05:48:12ID:jghdOqLB出来ました!ありがとうございました。
0723714
皇紀2665/04/01(金) 21:04:31ID:jghdOqLBなんでしょうか。この現象は。びくびく。
0724nobodyさん
皇紀2665/04/01(金) 22:04:34ID:???0725nobodyさん
2005/04/02(土) 19:13:00ID:???0726nobodyさん
2005/04/03(日) 12:34:52ID:5tuC+LFkttp://www.netsecurity.ne.jp/1_2283.html より
▽ Smarty------------------------------------------------------------
Smartyは、regex_replace変換機能が適切なチェックを行っていないことが原因で
セキュリティホールが存在する。この問題が悪用されると、
攻撃者にテンプレートセキュリティコントロールを回避して任意のPHPコードを実行される可能性がある。 [更新]
2005/03/29 登録
危険度:高
影響を受けるバージョン:2.6.8未満
影響を受ける環境:UNIX、Linux、Windows
回避策:2.6.8以降へのバージョンアップ
っていうことは、regex_replaceを使ってないか、
勝手に他人がテンプレートを変更できる環境でなければ大丈夫ってことかな?
現状、平穏無事に動いているものをアップデートするって勇気がいるよね。。。
0727nobodyさん
2005/04/03(日) 14:50:09ID:???当たり前の事だと思うんだが。
0728nobodyさん
2005/04/03(日) 15:07:18ID:???当たり前の事だと思うんだが。
0730nobodyさん
2005/04/03(日) 16:56:18ID:???コンピュータ分野だとまぁその通りなんだけど、セキュリティーホールが見つかって
その穴を埋めないのは保守する上で過失にならないか?
0731nobodyさん
2005/04/03(日) 19:02:00ID:???むやみに変更しないというのは運営者としては正しい判断だろう
頭を使える人はアナウンスをよく見てどちらのリスクが高いか考えるはず、
Apacheにしたってバージョンアップで不具合が起こった事は何度もある
緊急以外の件に関してはしばらく様子をみてやるのが賢い人だと思うね。
0732nobodyさん
2005/04/04(月) 04:24:04ID:???自分側の仕様変更やらで、忘れた頃にあらまあなんて事もあるからね。
さっさとアップデートしておくのが無難だと思うけど。
0733nobodyさん
2005/04/04(月) 05:11:45ID:???それこそ「動いているものを無闇に変えない」を
自分の書いてるプログラムにも適用ですよ。
とはいえ、自分がPHPを使うメインは個人的な便利なツールの作成だから、
PHP環境は実験的実装上等「常に最新」ですけどね。
0734nobodyさん
2005/04/04(月) 11:47:50ID:???現状維持で保守的になっていくわけですね
0735nobodyさん
2005/04/04(月) 13:46:26ID:???Webアプリって個人やSOHOで開発されてるケースが多いけど
数年後に変更しようにも業者が倒産したとか会社はあっても開発者が退職したとか仕様書が無い、といった具合でよくわからなくなってるのが多いよ
たまになんとかなりませんか? って話が来るけど殆どは予算無いっていうから
根本的な解決はせず無理やりつじつま合わせで対処することも多いよ。
話題がかなりそれちゃったな、ごめん。
でもSmartyとはツール使ってれば有る程度は標準的な手法でつくられている事が多いのでまだマシだよね。
0736nobodyさん
2005/04/04(月) 15:53:31ID:???そういうのに限って中見たら
崩れかけのジェンガみたいになってるよな
これでよく動いてるなみたいな
見た目はお城だからクライアントは
すぐ直せるでしょみたいな雰囲気で持ちかけてくるしな
ってこれただの愚痴だな、、、
PEARやSmarty使ってるならまだいいよ。。。
0737nobodyさん
2005/04/04(月) 16:13:20ID:???0738nobodyさん
2005/04/21(木) 21:02:24ID:SxD/0C5USmartyってPHPの標準じゃないんだろ?
普通はPHPの標準ライブラリであるPEARのHTML_Template系を
つかうべきじゃないのか?
0739nobodyさん
2005/04/22(金) 01:38:38ID:???0740nobodyさん
2005/04/22(金) 05:01:10ID:xlQLPR84中規模程度以上のサイトでSmarty使ってる人いる?
将来開発が止まってしまうかもしれない、というリスクはあるから
中核に組み込むのはどうなのかと思ったりするんだけど
0741nobodyさん
2005/04/22(金) 05:02:58ID:???0742nobodyさん
2005/04/22(金) 07:43:32ID:NegODiovどなたか教えて下さい。
Smartyでテーブルを表示させているのですが、
テーブルセルの縦(height="25")の指定はちゃんと反映されて
いるのですが、横幅(width="100")が無視されてしまうのです。
日本語サイトなどをめぐってみたのですが、解決策が
見つからなくて・・・。
どうかご指導よろしくお願いいたします。
0744742
2005/04/22(金) 09:25:44ID:NegODiovいえ、それが、HTMLだと問題なく表示されるのですが、
PHPからSmarty(tplファイル)として読み込むと
とたんに横幅が無効になってしまうのです。
0745nobodyさん
2005/04/22(金) 09:55:43ID:???0747nobodyさん
2005/04/22(金) 12:02:00ID:1X8ubYE4pearに登録されているからって開発中止にならんという訳じゃないよ
メンテナがやる気をなくせば開発は止まるのは一緒。
0748nobodyさん
2005/04/22(金) 13:07:51ID:???複雑なものでもないし、自分で修正できるんじゃない?
つーか、もう安定して枯れてると思うし。
0749742
2005/04/22(金) 13:59:44ID:NegODiovレスありがとうございます。
テストしているのは、下記のコードで、拡張子をhtml から
tplに変えたのみなのです。
phpでは $smarty->display("test.tpl"); で読み込んで
います。
よろしくお願いいたします。
0750742 コードです。
2005/04/22(金) 14:00:16ID:NegODiov<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
<title>新しいページ 1</title>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#C0C0C0" width="300">
<tr>
<td width="200" height="20" bgcolor="#8284CE"> </td>
<td width="50" height="20" bgcolor="#8284CE"> </td>
<td width="50" height="20" bgcolor="#8284CE"> </td>
</tr>
<tr>
<td width="200" height="20"> </td>
<td width="50" height="20"> </td>
<td width="50" height="20"> </td>
</tr>
<tr>
<td width="200" height="20"> </td>
<td width="50" height="20"> </td>
<td width="50" height="20"> </td>
</tr>
</table>
</body>
</html>
0751nobodyさん
2005/04/22(金) 14:11:23ID:???手元の環境ではそういう現象は起きなかった。
試すまでもなく、普通に考えても起きるわけないんだけどなぁ。
>>746が聞いてるけど、テンプレートとsmarty出力結果の差異はどうなのよ?
0752nobodyさん
2005/04/22(金) 14:15:18ID:???ブラウザが見てるHTMLを比較してみな。
具体的には、各々のHTMLをブラウザのソースを表示を使って取得して、それらを比較するって事ね。
0753742
2005/04/22(金) 14:40:09ID:NegODiovレスありがとうございます。
ソースを表示で見る事は思いつきませんでした_| ̄|○
さっそく見てきたのですが、きっちりwidth="50"だけが
消えていました。
なんでなのか、まったく想像がつかないです。
Smartyの嫌がらせとしか思えないです・・・・。
0754nobodyさん
2005/04/22(金) 14:44:53ID:???なんでもそうだけど、プログラミングってのは、鏡だと思うと良いよ。
自分のやった事が、そのまま反映されてるだけだよ。
後、デバックの極意なんだけど、コーヒーでも淹れて、一服しな。
これは、本当に良く効く。いや、マジで。
0755742
2005/04/22(金) 14:49:47ID:???ありがとうございます。 そーいえば2日徹夜でした。
気がつけばすごい眠いかもです。
・・・せっかくの有給なのに!なんてこったいです_| ̄|○
一回、寝てみます。
0756nobodyさん
2005/04/22(金) 15:38:04ID:???0757742
2005/04/23(土) 08:45:37ID:???おきてから、ふと思い立ってセルに折り返し無し指定を
付けてみたら、意図した横幅で表示できました。
ご指導してくださった皆様、ありがとうございました。
0760nobodyさん
2005/04/23(土) 16:06:08ID:???こんなところにたって雑談している女いると
↓
机 机女 机 机
女
机 机 机 机
わざわざここを通って女の尻にちんぽ擦りつけながら通った
↓
机 机女 机 机
女
机 机 机 机
0761nobodyさん
2005/04/23(土) 18:16:06ID:???0762nobodyさん
2005/04/24(日) 16:48:56ID:f26GRMZz{foreach}{/foreach}なんかのループから抜けるにはどうしたら
よいのでしょうか。
php で言う break; がしたいのです。
0763nobodyさん
2005/04/24(日) 18:32:34ID:???0764nobodyさん
2005/04/24(日) 18:43:22ID:f26GRMZzありがとうございます。そういうことではなくて、
{foreach}
{if $hoge == $fuga}
{break}
{/if}
{/foreach}
といったような{break}なんてのがあればいいのですが、無いですよね。
相当するものってありますでしょうか。
0766nobodyさん
2005/04/24(日) 21:22:02ID:???僕もassign or appendする前に処理しとくべきだと思うが、
無理矢理やるならこんなかな
{eval var=0 assign="a_break"}
{foreach from=$a_array item=a_item}
{if $a_item == '以降break'}
{eval var=1 assign="a_break"}
{elseif $a_break==0}
{$a_item}
{/if}
{/foreach}
0767nobodyさん
2005/04/24(日) 22:05:50ID:???0768nobodyさん
2005/05/02(月) 03:39:29ID:zPNJQI1Nないのでしょうか?
0769nobodyさん
2005/05/05(木) 23:04:03ID:HD8kZxJB離れた場所に何度も出てくる要素を、サブルーチン呼び出しみたいに
一元的に記述したいんだけど。
あらかじめmodelで処理しておけばいいのかもしれないけど
視覚的要素だからテンプレートの中に入れておきたい
0770nobodyさん
2005/05/05(木) 23:25:33ID:???0772nobodyさん
2005/05/06(金) 00:15:12ID:???いや、まぁ、デザイナと喧嘩してるんでもなきゃ別に問題ないんだけどね。
0773nobodyさん
2005/05/06(金) 00:49:55ID:???0774nobodyさん
2005/05/06(金) 01:25:35ID:???パラメータも渡せるし。
まあ本人が満足なら良いんだけど。
0776nobodyさん
2005/05/09(月) 10:21:54ID:Ogk2vGAk$bbb['123'] = '222';
と定義しておき
{$aaa.111.$bbb.123.333}
とし「あいう」と表示したいのですが
意図した通りには動作しません。感覚的には
{$aaa.111.($bbb.123).333}
というような事をしたいと思っています。
template tool-kitだと
[% $aaa.111 _ $bbb.123 _ 333 -%]
というような感じで出来たと記憶していますが
smartyの場合はどのようにすればよいでしょうか。
0777nobodyさん
2005/05/10(火) 12:35:26ID:???っていうかテンプレートにこんな変数書かなくてすむように
ロジックを工夫したほうがいいよ。
0778nobodyさん
2005/05/10(火) 15:41:39ID:???>>777
>{$aaa[111][$bbb[123]][333]}ってできない?
これでは上手くいきませんでした。
>っていうかテンプレートにこんな変数書かなくてすむように
>ロジックを工夫したほうがいいよ。
MVCモデルを実現しようとした場合、このようなケースに遭遇する事は
多いと思うのですがいかがでしょうか。
0779nobodyさん
2005/05/10(火) 17:11:51ID:???ではコンパイルエラーになるね。
{$aaa.111[$bbb.123].333} ではどう?
コンパイルファイルのコードを確認してみたらいいかも。
どうしてもテンプレートでやりたきゃ
{assign var="ccc" value=$aaa.111} とかなんとか。
0780nobodyさん
2005/05/10(火) 17:16:42ID:???0781nobodyさん
2005/05/10(火) 17:53:28ID:???これでも駄目でした。
>{assign var="ccc" value=$aaa.111} とかなんとか。
これも考えたのですがassign関数は$aaa.111を$aaa['111']とは見てくれず
「$aaa . ".111"」と解釈されてしまうみたなんです。
出来上がったキャッシュファイル、Smartyのソースを確認して検証してみます。
0782nobodyさん
2005/05/10(火) 18:19:28ID:???こんなこともわからんのか馬鹿どもめ!!!!!!!!
0783nobodyさん
2005/05/10(火) 18:53:40ID:???{$aaa.111[$bbb.123].333}
{assign var="ccc" value=$aaa.111}
{assign var="ddd" value=$bbb.123}
{$ccc[$ddd].333}
{php}
echo $this->_tpl_vars['aaa']['111'][$this->_tpl_vars['bbb']['123']]['333']
{/php}
すべて"あいう"と表示されるけどなぁ。
あと{php}は$security=trueで使えないってことだけ。為念。
0784nobodyさん
2005/05/11(水) 13:47:45ID:???しかし開発中のソースで試したところ、期待通りの動作をしませんでした。
原因を追ってみると数字と文字(配列と連想配列?)の場合で挙動が違うようでした。
・定義
$aaa['kkk']['222']['333'] = 'あいう';
・テンプレート設定
1={$aaa[kkk][222][333]}
2={$aaa.kkk.222.333}
・結果
1=
2=あいう
・キャッシュされたphpの中身
1=<?php echo $this->_tpl_vars['aaa'][$this->_sections['kkk']['index']][222][333]; ?>
2=<?php echo $this->_tpl_vars['aaa']['kkk']['222']['333']; ?>
感覚的には{$aaa['kkk'][222][333]}とかでいけそうですがエラーでした。
初めに提示した前提条件が自分の実環境と異なり、オマエらの労力を無駄に消費させてしまい申し訳ありません。
0785nobodyさん
2005/05/11(水) 17:37:03ID:???[]のなかのインデックスは数字が変数じゃなければsection変数に変換されるね。
この挙動はこれでいいのかな?
確かに知らなきゃはまる。
0786nobodyさん
2005/05/13(金) 12:08:00ID:???テンプレートにロジックは多少なりとも入れてはいけないと
思うのだが、なんでSmartyなんてヘンテコな物が流行るのか?
HTML_Template_Sigma使えよお前ら。
0787nobodyさん
2005/05/13(金) 12:55:02ID:???もとデザイナーで今はプログラマーに転職した俺から言わせれば、
Smartyはデザイナーとの共同作業に向いてると思うぞ?
別にデザイナーにSmartyの形にしてもらう訳じゃない。
デザイナーには本当にデザインだけしてもらう。
レイアウトの関係上、ダミーでいいから勝手ににデータを固定で打ってもらう。
例えば、金額のところには、\999,999,999とか見たいな感じ。
そのデザインが出来上がったら、プログラマ側で、そのデータ固定になってた部分に
ロジックなりを書き込む。
此処で、デザインがちょっと・・・という事になっても、そのロジックが書いたままの
テンプレートをデザイナーに渡して修正してもらえば良い。
というのは、Smartyの記述がされていても、HTMLとして普通に開けて、
データ固定で売ってもらった所が変わってるだけだから、
デザインする上では何の支障も無い。
0788nobodyさん
2005/05/13(金) 16:21:59ID:???じゃあ、ロジックを入れたあとにデザインの修正が出た場合はどうする?
デザイナーが持ってるマスターのテンプレートを修正してもらって
その後ロジック入れなおしだ。Smartyという名前なのにスマートじゃないね。
大体テンプレートにロジックいれたらテンプレートの意味ないんだが。
テンプレートってのは純粋なHTMLであるべきで、テンプレートをブラウザで
見たらどのような物か分かるべきで、オーサリングツールで何の問題もなく
開くことができるべき。
0789nobodyさん
2005/05/13(金) 16:28:18ID:???ロジックって、ループとかその程度じゃないの?
表形式のデータの部分をループさせるとか。
それに、そういったロジック入れたままでもデザイン修正はできるよね。
ロジック入ったままのファイルをデザイナーに渡して、それを修正してもらえばいいんだし。
つうか、Smartyのロジックが掛かれてても、ブラウザで普通に見られるし、
何の問題も無いような・・・
Smarty使ったことないのかな・・・
0790nobodyさん
2005/05/13(金) 16:42:31ID:???0791nobodyさん
2005/05/13(金) 16:45:25ID:???テンプレートにロジックを入れると気持ち悪いという主張は理解出来る。
ただ、php 自体 html にロジックを埋め込むための言語として出来たもんだし、
そういう問題意識は php プログラマには希薄なんだよ。
0792nobodyさん
2005/05/13(金) 18:47:13ID:???PHPがリクエストに対する処理から吐き出しまでを行い、
処理データを取捨選択するのがsmartyという流れだと思えば良いんじゃない?
smartyは基本的に流れてるデータをキャッチするだけなんだしさ。
0793nobodyさん
2005/05/13(金) 19:40:27ID:???PHPコードにデザインが入っているのが「キモい」からだろ?
SmartyによってせっかくPHPコードからHTMLを分離したのに
HTML側にロジックが(多少なりとも)入ってしまったら
元の木阿弥だろっつーのよ。理解できんだろうなあんたらには。
0794nobodyさん
2005/05/13(金) 20:12:17ID:???言わんとしてることは分かるけど、その問題はSmarty独自の問題なのか?
それは使ってる人自体の使い方などが悪いとかそういう問題じゃないの?
0795nobodyさん
2005/05/13(金) 20:12:52ID:???>PHPでテンプレートエンジンが使われるようになったのは
>PHPコードにデザインが入っているのが「キモい」からだろ?
前提が間違っとる。
おれはSmartyってのはMVCのViewをデザイナに(半ばだまして)やらせて
プログラマが楽するものだと理解している。つまり、テンプレートエンジン
のなかで、ロジックが記述可能なものはそういう意図で作られているわけだ。
Viewの機能を受け持つ以上、あの程度のロジックは書けないと俺が困る。
■ このスレッドは過去ログ倉庫に格納されています