【PHP】Smarty【Template】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/03/10 00:57ID:NhgrjNBT本家(英語)
http://smarty.php.net/
日本語マニュアルとか
http://sunset.freespace.jp/smarty/
引数が複数ある場合は第2引数以降をコロン区切りで。
かなり極端な例だと
{long_multibyte_string|mb_strimwidth:0:40:"..>"}
こんな感じ。
まあでも、ここまでテンプレートに書くのはどうかとも思う・・・。
「見た目の変更」だからテンプレートに書いてもいい気がするけど
{long_multibyte_string[i].titile|escape|mb_strimwidth:0:40:".."|defaust:"データ無し"}
とかどうなのかと(苦笑
0429425=427@ ◆Kiss.FX29M
04/08/09 09:33ID:???いろいろどーもです。
>>425のregister_functionに気づいた時点で書き込みをやめようと思ったんですが、
書き込んでよかった。勉強になりました。
//何気に古い酉を晒してみりゅw
0430nobodyさん
04/08/09 18:15ID:???0431nobodyさん
04/08/13 16:34ID:???0432nobodyさん
04/09/01 16:13ID:DiPaFBrX0433nobodyさん
04/09/02 00:30ID:???0435nobodyさん
04/09/11 11:24:55ID:vqhAT/1H表示を変えて使う場合、smartyのキャッシュ機能が問題起こす可能性はあるでしょうか?
誰かがログインした状態がキャッシュされてしまって
ログインしていない人にそのページが見えちゃうとか。
0436nobodyさん
04/09/11 12:35:32ID:???0437nobodyさん
04/09/11 18:28:06ID:K5FwXM+0キャッシュ、意外と使えなかった・・・。
テンプレートにアサインした結果をキャッシュするから、
テンプレートが同一なら問題起こる可能性あり。
>>436
どんな式?
0438nobodyさん
04/09/12 01:33:02ID:???php使った動的ページで、しかもログインページなんて
ブラウザのキャッシュすら一応Metaタグとかで無効にしといた方が良い気がするが。
テンプレートエンジンのオーバーヘッドが気になるのなら
それこそ、動的な出力とインクルードしたテンプレートから生成された出力結果を
ファイルに書き出して静的htmlファイルを公開フォルダに置いた方が
良いだろうし。
0439nobodyさん
04/09/12 02:45:25ID:JBS0QrEFキャッシュIDをうまく使ってやれば平気。
>>438
テンプレートエンジンより、assignする値をDBなんかから持ってきてるときにオーバーヘッドがでる。
0440nobodyさん
04/09/12 04:22:23ID:???PHP自体で十分デザインとテンプレートの分離はできるし、
キャッシュ機能つくるのも特に大して手間じゃないし…
0443nobodyさん
04/09/12 05:18:14ID:???ワラッタw
0444nobodyさん
04/09/12 06:21:43ID:?????そりゃDBだろうがlogファイルからだろうが、演算結果だろうが
動的に出力する値は全部オーバーヘッドになるだろうさ。
Smartyのキャッシュ機能とはまるで関係ないのでは?
そこが気になるならWebアプリ自体使えないと思うが。
0448nobodyさん
04/09/12 08:27:29ID:7xfelydBエラーを吐くようになったのですが・・・。
これってどうしようもないですか?
ひょっとして、テンプレートファイルのなかで
{php}
ほげほげ
{/php}
を数カ所使ってるのがいけないのでしょうか・・・
0449nobodyさん
04/09/12 13:42:47ID:???いや、デザイナの為ならなおさらSmarty使わないほうがいいだろw
DWとかはPHPタグで囲んだ部分は表示されないようになってるし
0451nobodyさん
04/09/12 15:31:00ID:???すいません、同時にPHPを5.0.1にあげたんですが、4.3.8に戻して、
smartyのキャッシュを有効にしても、全然問題なかったです。
PHP5.0.1のせいだったみたいです。どうもすみません。
//しかしPHP5のSOAP使いたい・・・
0452436
04/09/13 00:26:30ID:???遅レスすまんす。
普通に{$hoge+100}とかです。
本家のフォーラム見たら同じ問題が出ていて、CSV版では問題ないよ。って書いてあった。
めんどいから2.6.3に戻しましたけど。
0453nobodyさん
04/09/13 02:45:25ID:???オーサリングツール使ってhtmlファイルだけ渡して後は知らねぇってデザイナと、
デザイン上の修正の度にプログラマにも修正依頼しなきゃいけない様な
状況でしか仕事したことないなら、その環境は恥じた方がいいよ。
0454nobodyさん
04/09/13 10:46:56ID:???勝手に勘違いして人の仕事環境妄想して、妄想で創った人物像相手に
レスする癖は恥じた方がいいよ?
例えばSmartyのforeach文が修正できてphpのそれが修正できないなんて奴いねぇだろw
対応エディタもマニュアルも多い分Smarty使うよりPHPタグで分けた方がデザイナ的にも
やりやすいってだけの話なんだけど?
0455nobodyさん
04/09/13 11:07:47ID:???0456nobodyさん
04/09/13 11:46:10ID:u+cNXRvaSmarty用のDWプラグインがあるよ。
0458nobodyさん
04/09/13 12:02:37ID:???0459nobodyさん
04/09/13 13:27:37ID:???変なとこでSmartyタグ扱いされちゃう。
0461nobodyさん
04/09/13 17:27:51ID:E8MZljJ1結構困るよな。パーサをマルチバイト対応させる必要があるよな。
あー。まだ見てますかね。
謎エラーはSmartyが原因ではなくてPHP本体が原因。
--enable-zend-multibyteつけてmakeしてませんか?
4.3.8以降/5.0.0β3以降あたりから出る模様です。
0464451
04/09/14 10:32:41ID:???>--enable-zend-multibyteつけてmakeしてませんか?
ビンゴです。
つけないで、5.0.1入れてみます!
ありがとうございます。
0466nobodyさん
04/09/15 16:10:31ID:sZX1kIS00468nobodyさん
04/09/15 18:59:41ID:???0469nobodyさん
04/09/15 19:07:40ID:???大丈夫ですよー。
内部エンコードこそ EUC とかで書きつつ
mbstring.http_output の値を SJIS にしちゃえば OK です (´ω`)
0470nobodyさん
04/09/15 20:41:54ID:dqyUiMN9それやんないと能とか条が化けるんだよな。
0471nobodyさん
04/09/15 22:01:32ID:???普通にSJISで問題ないよ
>469
EUCにしちゃうと絵文字のバイナリでの入力ができなくなるから使いづらい。
>470
どんな使い方してるんだ?
0472nobodyさん
04/09/15 22:21:33ID:C49Dq6Pt>>470ではないけどテンプレート中の文字が化けるっしょ?
--enable-zend-multibyteを付けてビルドして、mbstring.script_encoding=SJISを設定してれば
SJISをちゃんと扱えるようになるけど、パフォーマンスが落ちるし。
絵文字は確かに扱いづらくなりますな。
キャリア間の非互換やPCでの表示もあるから、絵文字はプレースホルダを
端末に応じて置換してテンプレートに渡してるんだろうけど、
assignの段階では置換せずにoubput_handlerに
SJISへの変換と絵文字プレースホルダの置換をする関数を指定すればいいんじゃないかな。
まさかユーザーから入力された絵文字を生のままログに保存してたりしないよね?
0473nobodyさん
04/09/15 22:50:59ID:???どれも入門ばっか・・・
0474nobodyさん
04/09/15 23:02:47ID:???471ですが、鯖の設定は他人任せだからよーわからんです。
夜間だと秒間8〜12アクセスある携帯サイト運営してて
体感的に遅くなったことはないです。
携帯相手だから速度は気にする必要ないのかもしれんが。
絵文字とhdmlはoutputfilterで自動変換させてる。
PCは絵文字画像ね。
ユーザーの絵文字はiモードの絵文字(バイナリ)にしてから
mysqlに入れてるけど何か問題ありますか?
ちょっと前まではbase64_encodeしてから入れてましたが
面倒なのと問題がないのとでそのまま入れてます。
単純にわからないので教えてください。
教えて君でスマン。
0475nobodyさん
04/09/16 03:23:52ID:???なるほど。納得。
iモードのやつに統一してあるならOKっす。
>>472の意図はDoCoMo/au/Vodafoneで別々の絵文字を
そのまま扱ってたらアレだなあと思ったので。
満足なパフォーマンスが出てるなら気にすることもないです。
それ以前にmbstring.scriptl_encodingは未設定で、
たまたまうまく動いている可能性が高いですが。
0476nobodyさん
04/09/16 05:22:54ID:???今のとこ携帯サイトの仕事は無いんだが・・・
0478nobodyさん
04/09/18 17:46:27ID:???なんかセキュリティーホールがあるのかと思ってすごいビビってましたよ。
絵文字は各機種ごとにそのまま保存してても
問題ないと思いますね。ようはユーザーに対しそれをどう扱うかだし。
うちはiモード重視だからi基準にしちゃってますが。
mbstring.script_encodingは未設定ぽかった。
試しにaaacafeとc-sideで試したらOKでした。
>>477
かなり泣けるよね。
特にEZ端末で同じ会社の端末でも挙動が違ったり
locationが使えなかったりとかもろもろと・・・。
0479nobodyさん
04/09/18 18:47:21ID:???泣ける
0481nobodyさん
04/09/19 19:04:37ID:???0482nobodyさん
04/09/19 19:10:05ID:???0483nobodyさん
04/09/19 20:18:01ID:???0484nobodyさん
04/09/19 21:45:49ID:???0485nobodyさん
04/09/22 01:32:35ID:???0486nobodyさん
04/09/22 02:08:38ID:???0487nobodyさん
04/09/22 20:46:22ID:S3VBXifEoutput_buffering = On
output_handler = mb_output_handler
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = SJIS
で
$buffer_euc = $smarty->fetch('index_m.tpl',$smarty_cache_id);
$buffer_sjis = mb_convert_encoding($buffer_euc,"SJIS");
//---------------------------------------------------------------------------
header( 'Content-Type: application/xhtml+xml; charset=Shift_JIS' );
header( 'Content-Length: ' . strlen( $buffer_sjis ) );
//--------------------------------------------------------------------------
$smarty->display('index_m.tpl',$smarty_cache_id);
としてるのに、出力がEUCになってしまいます。
どんな原因が考えられるのでしょうか?
0488nobodyさん
04/09/22 22:03:51ID:???0489nobodyさん
04/09/22 22:05:55ID:???・$buffer_euc, $buffer_sjis等の出力の文字コードをチェックするなりして、問題を絞り込む
・キャッシュが更新されずに古いものが使用されてないか?
0490nobodyさん
04/09/22 23:09:16ID:???>>488が泣いたのはそんな理由じゃないと思うよ。
まずoutput_buffrering不要。
一応mb_convert_encodingの第三引数に"EUC-JP"を入れといた方が無難。
極め付けに痛いのが $smarty->display('index_m.tpl',$smarty_cache_id);
echo $buffer_sjis; でええんちゃうかと。
0491487
04/09/23 11:59:14ID:???すいません、情報不足で。PHP5.0.1です。
キャッシュは、全部けしてもおなじ状況でした。
で、まさかと思って調べてなかったのですが、
$buffer_euc = $smarty->fetch('index_m.tpl',$smarty_cache_id);
のちの$buffer_eucは空でした。
なので文字コードは、$buffer_euc、$buffer_sjisともに空で、
ただし、
$smarty->display('index_m.tpl',$smarty_cache_id);
はなぜか(EUCで)表示できてます・・・。
>>490
echo $buffer_sjis; でええんちゃうかと。
いや、どうしても重くならざるをえないページなので、
キャッシュをつかいたかったもので。
やはりPHP5.0.1というのが相性悪いのでしょうか?
ただ、スクリプトの他の部分では、$smarty->display成功してるんですよね。(ちゃんとSJIS)
変数やファイル名が違うだけで、そこといっしょのことをしてるはずなんですが・・・
0492nobodyさん
04/09/23 12:05:14ID:???意図したコードと違うことが書いてある気がする。もういちどよく見直せ。
適切なタイミングでnew Smarty()してないとかw
んで、>490ではないが、featchの内容とdisplayの内容が同一で、
SJISに変換したものが$buffer_sjisに入ってるなら、それを出力してやったほうが処理は早いぞ。
0494487
04/09/26 01:42:15ID:ORPXRj+Iとりあえず文字化けは「解決」しました。というか、あきらめました。
application/xhtml+xml;をあきらめて、"Content-type: text/html";にしたら、
文字化けしないようになりました・・・
ただ、別の問題が生じてます。
>>487のソースで、
HTTPヘッダが「Content-Length: -」となってしまいます。
どうにかして、smartyを使いつつ、「Content-Length」を正常に表示させる方法とかないでしょうか?
ob_関係の関数使おうかと思ったのですが(ob_get_lengthとか)
「smarty->display」でブラウザに表示されるときはSJISですが、
その直前まではEUCなので、文字数がずれてしまいます・・・
どなたか裏技っぽい方法でもいいので、お助けいただければ幸いです。
0495あぼーん
NGNG$smarty->fetch()で表示内容取得して
文字コード変換かけてstrlenで測るとか?
・・・かなりダメそうな方法だ(苦笑
0498487
04/09/28 11:55:20ID:???いや、それ、>>487でやってます。(content typeは違うけど)
そしたら、「Content-Length: -」となってしまうので。。
0502nobodyさん
04/10/11 16:58:02ID:RLUAfbkL0503nobodyさん
04/10/11 18:13:33ID:???どうせフレームワーク組んじゃうんだろ?
んじゃpattemplateのほうがシンプルで扱いやすいだろ。
smartyはあくまで、いろいろ自分で組めない厨向けのテンプレだぞ。
0505nobodyさん
04/10/12 14:58:47ID:???まず出来上がりの早さを求めるのであって
自分で出来るか出来ないかの問題ではない
そこから、どう不都合になるか考える。
出来てから考える。
誰でも自分で作れるよ。でも1年かかります。そんなの待てるか。
といわれちゃうよ
0506nobodyさん
04/10/12 16:27:47ID:bb34UBPSまあ、それをいうならPHPはあくまで、いろいろ自分で勉強できない厨向けの環境だからな。
0507nobodyさん
04/10/12 16:42:18ID:???0508nobodyさん
04/10/12 17:24:13ID:bb34UBPSあと、なんかCPANみたいなのやるっていう話なかった?
0509nobodyさん
04/10/12 19:39:43ID:???0510nobodyさん
04/10/16 23:33:47ID:OMhy7HMxインストールすら出来ない(´・ω・`)
初めのHello!,Ned1が出ないし
きちんとinclude_pathを設定して...Example 2-9でエラー
unexpected T_STRING in c:\〜 in 20
はて、config_dirのパスが設定出来ないらしい
Windowsの絶対パスはc\:からだよね?
0511nobodyさん
04/10/17 05:34:27ID:???・ 相対パスを使ってみる
0512511
04/10/17 05:35:51ID:???>(´・ω・`)
0513nobodyさん
04/10/17 07:09:37ID:???0514nobodyさん
04/10/17 17:17:49ID:???もしくは某板の糞コテ
0515nobodyさん
04/10/17 18:11:08ID:???0516nobodyさん
04/10/17 18:18:34ID:???0517nobodyさん
04/10/17 21:08:07ID:2DZWHiAEやはりC:/〜でした。
0518nobodyさん
04/10/27 11:44:54ID:5LD6Mw3otemplates_cそのものも削除できない。
なぜかな?
0519nobodyさん
04/10/27 12:38:36ID:???0520nobodyさん
04/11/09 09:28:23ID:RHwN8VlWオープンソースに興味がある人とか参加してみたら?
--------------------------
【2ちゃんブログ】次世代開発中心 Part2@ブログ
http://pc5.2ch.net/test/read.cgi/blog/1092616279/l50
391 名前:忍ロボ ◆O6dempau.2 本日のレス 投稿日:04/11/09 01:48:13 GsdPVZqn
ちゃぶだい
開発に参加してくれる人募集します〜
・開発者さん(PHPで開発できるひと)
・デザイナーさん(デザインテンプレート作成)
こちらのメールフォームから連絡よろしくですー
↓
http://chbox.com/mail/
■ハンドルネーム
■連絡先メールアドレス(フリーメール不可)
■ホームページ/weblog URL
■(開発者? / デザイナー? / その他)
■連絡事項(あれば)
0521matsumoto
04/11/10 22:33:26ID:6T9+fSCpArrayと出力されてしまうけれど、これを 表示しないようにする簡単な方法はないのでしょうか。
0522nobodyさん
04/11/11 00:19:20ID:???それは、
テンプレートで参照してるけど、
assignしていない場合に、Arrayと出力されていて、
その現象を回避したいってこと?
0523nobodyさん
04/11/11 01:14:01ID:???0524matsumoto
04/11/11 02:52:04ID:IGJG68qY{$aaa} -- {$bbb}
■PHPプログラム
$smarty->assign("bbb" , "BBB");
// $aaaについてはassignしない
■出力
Array -- BBB
となってしまいます。わたしだけでしょうか?
他の方はなりませんか?
0525matsumoto
04/11/11 02:55:24ID:IGJG68qY524の場合で、こうなってほしい。
PHPプログラムは同じ。
■テンプレート
{$aaa}--{$bbb}
{if $aaa}{$bbb}{/if}
■出力
--{$bbb}
こうなってほしいのですけれど。
つまり、単独では空文字になって、ifで使用した場合にはFALSEの扱いになるような...
0526matsumoto
04/11/11 02:56:49ID:IGJG68qY■出力
--BBB
です。
0527nobodyさん
04/11/11 11:07:43ID:???にしてみ。
絶対、他の値が入ってる。
■ このスレッドは過去ログ倉庫に格納されています