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

【PHP】Smarty【Template】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん03/03/10 00:57ID:NhgrjNBT
このスレ、あってもいいんじゃないかと。

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

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0673nobodyさん05/03/13 19:56:38ID:???
山田 祥寛 (著)はJavaのライターでは有名な人だな。
0674nobodyさん05/03/13 20:08:38ID:???
まるごとPHPにも書いてるね。
・・・「かいてる」の変換候補一発目がなぜか「Keitel」でびびった。
0675nobodyさん05/03/13 21:11:31ID:???
>>673
PHP界隈でも結構書いてる。ライター一本でちゃんと食っていくのには
そのぐらい書かないと駄目なんだなと、いつも思い知らされる訳だが。
0676nobodyさん05/03/13 22:03:03ID:???
MVCってのは自前かな?
それともMojaviとか使ってるのかな?
0677nobodyさん05/03/13 22:56:19ID:???
>>676
Mojaviを使っていたら、あの帯に書いてありそうな希ガス。
まぁ、それ以前にMVC=フレームワークじゃないし。
0678nobodyさん05/03/13 23:20:57ID:???
smartyで、
$smarty->display([テンプレートファイル名]);
とやると標準出力(ブラウザ)にHTMLが出力されますが、
これをファイルに出力させることはできるのでしょうか?
0679nobodyさん05/03/13 23:28:24ID:???
山田祥寛さんの書くものは疑ってかからないと駄目。
ttp://d.hatena.ne.jp/nadi/20040215#1076810117
ttp://d.hatena.ne.jp/nadi/20040306#1078484912
0680nobodyさん05/03/13 23:54:01ID:???
>>679
でもこの人が書いた基礎PHPって本はホント良いよ。
初心者には超オススメ。

でもtemplate_cのパーミッションを777にしろって
書いてあったのはポカーンだったけど。
0681nobodyさん05/03/14 00:39:54ID:???
>>670
ゴミ同然。買うな。
だいたいPHP5とか明示しててちゃんとPHP5のスタイルで書いてる書籍なんて
いまのところ一冊もない。Smartyが覚えたかったらマニュアルみれ。
日本語に翻訳されたドキュメントもあるしぐぐれば使い方はたくさんでる。
PHP5関連の内容についてはマンモス本の劣化コピー。

>>674
まるごとPHPが有名なのはPEARパッケージの開発者とかが執筆してるから。
コミュニティに一切貢献してない彼が執筆メンバにいることがかなり不思議。

http://angelicwing.net/diary/index.php?mode=one&parent_id=3801
MVC自体わかってない。わけたらいいってもんじゃない。
valueobjectって、、便利だと思ってるの?
そしてコメント欄に注目。PHPにおけるmysqlのdisconnectについて
まったくわかってない。明示的に指定しないのは常識。

>>680
現場でPHPのコード書いた事ない人間の書籍でよく勉強できるよな。
そうやってマニュアル読んだだけの素人が書いた書籍で勉強した
ダメプログラマがダメコードを作る。
この程度のレベルの人間が書籍を書いていることが問題。

でも(趣味で触るだけの)初心者にはいいかもね。
0682nobodyさん05/03/14 00:44:19ID:???
>>681
>明示的に指定しないのは常識。
そうなの?
でも指定してもいいよね?
0683 ◆AngelH/kMI 05/03/14 01:04:47ID:???
>>682
どっちでもいいよ。

connectする -> プログラム終了とともに切断
pconnectする -> disconnectは無視する
だから、どちらにしろあまり意味ないと思うです。
0684nobodyさん05/03/14 01:10:40ID:0xZUZ/dg
羽根の人キタ━━━━━(゚∀゚)━━━━━!!!!
0685nobodyさん05/03/14 01:29:18ID:???
でも使ったあとは後始末、って癖は悪くはないと思うぞ
PHP以外の言語にも手を出そうというならなおさら(GCが増えてきたにしろ)
致命的な差異が出ないなら、初心者の頃はそういう考えから身につけてもいいんジャマイカ
ちなみに漏れは書くのめんどいので閉じないことが多い
0686nobodyさん05/03/14 02:11:46ID:???
言いたい事は分かるが。
でも非機能要求を絶えず意識する癖なんて持っても PHP/web アプリで量的に重いコードを設計する人になられても困る。
ソレはソレ、コレはコレじゃないか。
原理原則やデータベース個々の基礎知識は弁えて当然というのはまた別のプロセスでしっかり身につける方が。
0687nobodyさん05/03/14 02:56:18ID:???
Smartyと関係ないやん。
068868605/03/14 03:46:48ID:???
それもそうだ。スレ違いスマソ。
0689nobodyさん05/03/14 10:18:44ID:???
>>678
fetchで出力内容拾って、phpのファイル出力で吐き出したら?
069067805/03/14 11:14:44ID:???
>>689
なるほど、検討してみます。ありがとうございます。

昨晩から試行錯誤を繰り返し、
現在のところoutputfilterで、出力直前の文字列を横取りし、
ファイルに吐き出すという、ややトリッキーな方法を行っています。
0691nobodyさん05/03/14 11:51:06ID:???
ちゃんと管理して明示的に閉じてるならそれはそれでいいと思うよ
0692nobodyさん05/03/14 21:41:11ID:???
明示的にdisconnectすることには機能的な意味の他に、リソースを
参照している範囲が明確になるという点もあるので「クローズ・削除
しない方が性能的に有利かつPHP的な使い方」というのはアホの理論。
0693nobodyさん05/03/15 00:50:43ID:???
もういいって

>>690
ファイルに書き出すのはob_get_contents()使うのが一番楽と思うよ
069467805/03/15 11:52:00ID:???
>>693
ありがとん
0695nobodyさん05/03/15 17:25:00ID:???
スレ違いかもしれないけどhtmltemplateってのはどう?
http://www.lyricfathom.com/htmltemplate/
0696nobodyさん05/03/16 10:24:48ID:???
使ったことある。結構良いんだけど、自由度が足りない。
記述方法なんかは、スマーチーと似た感じ。ドットがスラッシュになった感じだったかな。
ロジックの追加とかも簡単、まあそれでも自由度が低い。elseとかやりたいなら2、3層前とかから書き直さないといけないから、意味ないし。
0697nobodyさん05/03/16 18:40:40ID:???
>>695
HTMLtemplateのくわしい話MLに、最近ひさびさに
メール流れた〜と思ったら。SPAMでした…orz

2年近く放置してる作者も、それに登録したまんまの俺もどうかしてますが。
あ、でも新しい系列になって発展してたんですな。

俺の感想も>>696に似たようなもんだけど、
元々の割り切りからも考えるに、プログラマからすると
どうしても物足りなさはある。かといって発展拡張を考えるなら
高機能な標準的なテンプレートを使っちまう方が良いし というところ。

でも自分用の軽量なテンプレには部分的にはパクらせてもらった。
テンプレートを使うんじゃなくて、テンプレートを作る上で
参考にするのは良いと思うよ。作りが簡単だし。

0698nobodyさん2005/03/26(土) 16:50:17ID:9cvI6Qz8
smartyでtplファイルの方で、文字列操作ってできます?
123456789
というデータをphpからうけとったのを
456
のところだけ切り取って出力するような・・・
0699nobodyさん2005/03/26(土) 16:59:08ID:???
>>698
{PHP}
じゃダメなの?
0700nobodyさん2005/03/26(土) 17:01:27ID:9cvI6Qz8
>>699
なるべくなら使わないでいたいんですけど、
それがいいのかなぁ
0701nobodyさん2005/03/26(土) 17:04:26ID:???
>>698
修正子使えばできる。ないなら作れるし。
0702nobodyさん2005/03/26(土) 17:08:57ID:???
>>698
substr()を修正子として使うのがよさげ
0703nobodyさん2005/03/26(土) 17:13:51ID:9cvI6Qz8
>>701-702
レスありがとうございます。
http://sunset.freespace.jp/smarty/SmartyManual_2-6-3J_html/
にはsubstrは無いみたいですけど、>>699さんの方法か
何かで定義しなくても使えるものなんでしょうか?

教えて君で申し訳ないです。
0704nobodyさん2005/03/26(土) 17:22:08ID:???
>>703
文字列関数はひっそりと修正子として使える。
0705nobodyさん2005/03/26(土) 17:25:59ID:9cvI6Qz8
>>704
まじすか。
ありがとうございます。使ってみます−
0706nobodyさん2005/03/26(土) 17:32:21ID:???
>>705
$securityをtureにしてると$security_settingで指定しないと使えないから気をつけろよ
0707nobodyさん2005/03/26(土) 17:33:45ID:9cvI6Qz8
tpl上に{substr($hoge,4,3)}
と、書いてみたのですがエラーになってしまいます。
{$hoge}だと123456789と表示されます。
使い方間違ってるのでしょうか?
0708nobodyさん2005/03/26(土) 17:34:13ID:9cvI6Qz8
>>706
あ、それかも。みてみますー
0709nobodyさん2005/03/26(土) 17:39:51ID:9cvI6Qz8
>>706
もしかして、その設定はtpl上で変更するのは無理でしょうか?
私がいじれる権限があるのはtplのみなので鯖管理者に
お願いしないとだめでしょうか?
0710nobodyさん2005/03/26(土) 17:53:07ID:???
>>707
マニュアル読んだ?
修正子の使い方、もうちょっとしっかり読めばできると思うよ。
書き方間違ってるから。
0711nobodyさん2005/03/26(土) 17:53:40ID:???
>>707
修正子だっちゅーねん。
0712nobodyさん2005/03/31(木) 01:53:29ID:D4Jqx9KW
こんにちは。

smartyで読み込んだhtmlの<head></head>のなかに覧の文字が
あると、エラーになってしまいます。
\とか\""\などでかこってみたりしたのすが、駄目でした。
どなたか回避方法をご存知ないでしょうか・・・?

よろしくお願いいたします。
0713nobodyさん2005/03/31(木) 02:02:54ID:???
>>712
ガイシュツ。スレ嫁。

ヒント:SJISの覧には { がかくされている。
0714nobodyさん2005/03/31(木) 02:34:14ID:D4Jqx9KW
>>713
ううぅ。このスレを通しで読んでみたのですが
わからなかったのです。
mbstring.http_output をSJISに、というのが
ソレかな、と思ったのですが、Smarty.class.php
の中に、mbstring.http_output なんてなかったぅ。
php.iniとhttpd.confはSJISに変えてみたのです。
0715nobodyさん2005/03/31(木) 10:54:23ID:???
>>714
{literal}
覧
{/literal}
でどうよ。
0716nobodyさん2005/03/31(木) 11:32:56ID:???
これってめんどくさいよね
みんなどうしてるの?
タグを変えてるとか?

はやくマルチバイトに
完全対応してくれないかな
0717nobodyさん2005/03/31(木) 11:39:58ID:???
そもそもPHPをSJISで書くのが間違ってる。
0718nobodyさん2005/03/31(木) 12:33:56ID:???
Smarty側のタグ{}を別の表記に変えればよい
0719nobodyさん2005/03/31(木) 14:50:48ID:???
>>716
テンプレートもコードも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:???
EUCでやっても
同じ問題がでるだろ?
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
>>715
出来ました!ありがとうございました。
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+LFk
>>724

ttp://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:???
現状実害が無いのなら、無用なアップデートをしないのが
当たり前の事だと思うんだが。
0729nobodyさん2005/04/03(日) 16:02:02ID:???
>>728
おまえ、死ぬほど迷惑な奴だな。
0730nobodyさん2005/04/03(日) 16:56:18ID:???
今動いているものを、機能が追加されたとかでむやみにアップデートしないというのは
コンピュータ分野だとまぁその通りなんだけど、セキュリティーホールが見つかって
その穴を埋めないのは保守する上で過失にならないか?
0731nobodyさん2005/04/03(日) 19:02:00ID:???
>730
むやみに変更しないというのは運営者としては正しい判断だろう
頭を使える人はアナウンスをよく見てどちらのリスクが高いか考えるはず、
Apacheにしたってバージョンアップで不具合が起こった事は何度もある
緊急以外の件に関してはしばらく様子をみてやるのが賢い人だと思うね。
0732nobodyさん2005/04/04(月) 04:24:04ID:???
穴の開いたままのバージョンを使ってると
自分側の仕様変更やらで、忘れた頃にあらまあなんて事もあるからね。
さっさとアップデートしておくのが無難だと思うけど。
0733nobodyさん2005/04/04(月) 05:11:45ID:???
>>732
それこそ「動いているものを無闇に変えない」を
自分の書いてるプログラムにも適用ですよ。

とはいえ、自分がPHPを使うメインは個人的な便利なツールの作成だから、
PHP環境は実験的実装上等「常に最新」ですけどね。
0734nobodyさん2005/04/04(月) 11:47:50ID:???
こういう流れでWEBアプリケーションは
現状維持で保守的になっていくわけですね
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:???
壊れかけのRADIO
0738nobodyさん2005/04/21(木) 21:02:24ID:SxD/0C5U
なぁ、ちょっと聞いていいか?
Smartyって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")が無視されてしまうのです。
日本語サイトなどをめぐってみたのですが、解決策が
見つからなくて・・・。
どうかご指導よろしくお願いいたします。
0743nobodyさん2005/04/22(金) 09:10:00ID:???
>>742
それSmartyじゃなくてHTMLの問題だろーよ
07447422005/04/22(金) 09:25:44ID:NegODiov
>>743
いえ、それが、HTMLだと問題なく表示されるのですが、
PHPからSmarty(tplファイル)として読み込むと
とたんに横幅が無効になってしまうのです。
0745nobodyさん2005/04/22(金) 09:55:43ID:???
うpして
0746nobodyさん2005/04/22(金) 10:34:08ID:???
>>744
Smartyが生成したHTMLと
問題なく表示されるHTMLと
どこかが違ってるはず。
0747nobodyさん2005/04/22(金) 12:02:00ID:1X8ubYE4
>>740
pearに登録されているからって開発中止にならんという訳じゃないよ
メンテナがやる気をなくせば開発は止まるのは一緒。
0748nobodyさん2005/04/22(金) 13:07:51ID:???
Smarty を PHP4, PHP5 ともに使ってるよ。
複雑なものでもないし、自分で修正できるんじゃない?
つーか、もう安定して枯れてると思うし。
07497422005/04/22(金) 13:59:44ID:NegODiov
>>745 >>746 
レスありがとうございます。
テストしているのは、下記のコードで、拡張子をhtml から
tplに変えたのみなのです。
phpでは $smarty->display("test.tpl"); で読み込んで
います。
よろしくお願いいたします。
0750742 コードです。2005/04/22(金) 14:00:16ID:NegODiov
<html>
<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:???
>>750
手元の環境ではそういう現象は起きなかった。
試すまでもなく、普通に考えても起きるわけないんだけどなぁ。
>>746が聞いてるけど、テンプレートとsmarty出力結果の差異はどうなのよ?
0752nobodyさん2005/04/22(金) 14:15:18ID:???
>>750
ブラウザが見てるHTMLを比較してみな。

具体的には、各々のHTMLをブラウザのソースを表示を使って取得して、それらを比較するって事ね。
07537422005/04/22(金) 14:40:09ID:NegODiov
>>751 >>752
レスありがとうございます。
ソースを表示で見る事は思いつきませんでした_| ̄|○
さっそく見てきたのですが、きっちりwidth="50"だけが
消えていました。
なんでなのか、まったく想像がつかないです。
Smartyの嫌がらせとしか思えないです・・・・。
0754nobodyさん2005/04/22(金) 14:44:53ID:???
>>753
なんでもそうだけど、プログラミングってのは、鏡だと思うと良いよ。
自分のやった事が、そのまま反映されてるだけだよ。

後、デバックの極意なんだけど、コーヒーでも淹れて、一服しな。
これは、本当に良く効く。いや、マジで。
07557422005/04/22(金) 14:49:47ID:???
>>754
ありがとうございます。 そーいえば2日徹夜でした。
気がつけばすごい眠いかもです。
・・・せっかくの有給なのに!なんてこったいです_| ̄|○
一回、寝てみます。
0756nobodyさん2005/04/22(金) 15:38:04ID:???
キャッシュが効いてるだけじゃないの?
07577422005/04/23(土) 08:45:37ID:???
こんにちは。
おきてから、ふと思い立ってセルに折り返し無し指定を
付けてみたら、意図した横幅で表示できました。
ご指導してくださった皆様、ありがとうございました。
0758nobodyさん2005/04/23(土) 11:56:15ID:???
>>756 に一票 おそらくそれでしょ
0759nobodyさん2005/04/23(土) 11:56:52ID:???
>>757 を見ずにカキコしてしまいました。 鬱。
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
>>763
ありがとうございます。そういうことではなくて、
{foreach}
{if $hoge == $fuga}
{break}
{/if}
{/foreach}

といったような{break}なんてのがあればいいのですが、無いですよね。
相当するものってありますでしょうか。
0765nobodyさん2005/04/24(日) 21:16:16ID:???
>>764
そういう処理はSmartyに配列をアサインする前に済ませておくものでは?
0766nobodyさん2005/04/24(日) 21:22:02ID:???
>>764
僕も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:???
showは使えない?
0768nobodyさん2005/05/02(月) 03:39:29ID:zPNJQI1N
修飾子にオブジェクトのメソッドを指定する方法は
ないのでしょうか?
0769nobodyさん2005/05/05(木) 23:04:03ID:HD8kZxJB
テンプレートの中にサブルーチンみたいなものを書くことはできない?
離れた場所に何度も出てくる要素を、サブルーチン呼び出しみたいに
一元的に記述したいんだけど。
あらかじめmodelで処理しておけばいいのかもしれないけど
視覚的要素だからテンプレートの中に入れておきたい
0770nobodyさん2005/05/05(木) 23:25:33ID:???
プラグインとか{php}
0771nobodyさん2005/05/05(木) 23:28:23ID:???
>>770
php直書き出来たんだ
激しくさんくすこ
0772nobodyさん2005/05/06(金) 00:15:12ID:???
そしてそれが意味することの重大さに戦慄を覚えるのであった。。
いや、まぁ、デザイナと喧嘩してるんでもなきゃ別に問題ないんだけどね。
■ このスレッドは過去ログ倉庫に格納されています