トップページphp
983コメント287KB

【Smarty】PHPのテンプレートエンジン【Flexy】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2005/06/15(水) 10:35:52ID:???
---
PHPのテンプレートエンジンを語るスレです。

Smarty:本家(英語)
http://smarty.php.net/
Smarty:日本語マニュアルとか
http://sunset.freespace.jp/smarty/

pear の HTML_Template たち
http://pear.php.net/package/HTML_Template_Flexy
http://pear.php.net/package/HTML_Template_IT
http://pear.php.net/package/HTML_Template_Sigma
http://pear.php.net/package/HTML_Template_Xipe
http://pear.php.net/package/HTML_Template_PHPLIB

patTemplate
http://www.php-tools.de/
http://www.php-j.com/tutorial/php/template.php

前スレ(現在dat落ち)【PHP】Smarty【Template】
http://pc8.2ch.net/test/read.cgi/php/1047225437/
0773nobodyさん2007/01/22(月) 17:41:46ID:???
>>772
すみません。それでも同じエラーが出てしまいます。

dir.base
Warning: Smarty error: unable to read resource: "setting.base/header.tpl" in /xxx/yyy/html/libs/Smarty.class.php on line 1095

$dir.base
Warning: Smarty error: unable to read resource: "Array.base/header.tpl" in /xxx/yyy/html/libs/Smarty.class.php on line 1095
0774nobodyさん2007/01/22(月) 18:16:45ID:Eh2tk1di
>>773
{include file="`$dir.base'/xxxxx.tpl"}

`(バッククォート)で $dir.base をくくらないと、どこまでが変数か
Smarty が解釈できなくなっている
0775nobodyさん2007/01/22(月) 18:17:38ID:???
{include file="`$dir.base`/xxxxx.tpl"}
0776nobodyさん2007/01/22(月) 18:18:43ID:???
おっと、間違えた。
後ろが`になっていなった
>>775
が正解だな
0777nobodyさん2007/01/22(月) 18:19:08ID:???
>>774
ありがとうございます。
無事、実行できました。

いろんなサイトを見て回ったのですが、バッククォートのことは初めて知りました。
本当に勉強になりました。ありがとうございました。
0778nobodyさん2007/01/22(月) 18:20:06ID:???
>>775
>>776
わざわざ、お手間をとらせてしまいすみません。
本当にありがとうございます。
0779nobodyさん2007/01/22(月) 18:21:56ID:???
>>777
http://sky.freespace.jp/smarty/SmartyManual_2-6-7J_html/language.syntax.quotes.html
0780nobodyさん2007/01/22(月) 18:26:12ID:???
>>779
すみません。。。お返しする言葉もございません。
そのマニュアルも一応目を通したつもりでいたんですが、、、

日々精進していきます。
0781nobodyさん2007/01/23(火) 13:44:19ID:???
なんかくだらねぇ質問スレでやたらSmartyを押している奴がいるから、
このスレにPHPのイロハも知らないバカが押し寄せてくる悪寒が…
0782nobodyさん2007/01/23(火) 21:29:12ID:???
(略
0783nobodyさん2007/01/25(木) 04:27:39ID:???
デザイナーがSmartyのtplを大量に作り上げてくれたんですが、
こういう場合でフォーム系のタグに変数埋める作業でもやはりシコシコと手作業するしかないんでしょうか。
宜しくお願い致します。
0784nobodyさん2007/01/25(木) 10:19:51ID:???
>>783
スクリプト書いて一括処理。
0785nobodyさん2007/01/25(木) 12:16:15ID:???
>>783
You, Flexy 使っちゃいなよ。
0786nobodyさん2007/01/26(金) 20:07:41ID:???
smartyで
{$hoge[$foo->getId()]}
とやると
syntax error: unrecognized tag:
が出るのですが,このようにやりたい場合はどうすればいいでしょうか?
0787nobodyさん2007/01/26(金) 20:10:51ID:iZlZkVla
お願いします
0788nobodyさん2007/01/27(土) 10:35:51ID:e0oRsoDR
idをassignしちゃえば?
まんどくせえけど
0789nobodyさん2007/02/02(金) 12:06:02ID:???
>>770と全く同じことで悩んでました
バックスラッシュは試したんだけど $`hogehoge`と囲ってたのでエラーでした
まさか`$hogehoge`とするとは… PHPでは${hogehoge}なのに…

>>770とそれに回答していただいた皆さんに感謝です
07907892007/02/02(金) 12:16:25ID:???
×バックスラッシュ
○バッククォート

…なんて勘違いを…アホですいません
0791nobodyさん2007/02/02(金) 15:29:41ID:???
smartyでswitch文って使えないんですか?
0792nobodyさん2007/02/02(金) 22:13:51ID:???
{if}{elseif}でつなげばええんちゃうん。
0793nobodyさん2007/02/02(金) 22:30:25ID:???
プラグイン書けば使える
PHPのコードをベタ書きすれば使える

なるべくロジックをテンプレートに入れないように
処理を変える方がいいと思うけどな
0794nobodyさん2007/02/02(金) 22:38:39ID:???
うむ、テンプレート側でにswitchがどうしてもないと困るような状況なら
それはロジック側や構成を見直した方が良いっていう警告
0795nobodyさん2007/02/02(金) 22:42:07ID:???
じゃあユーザ種別で表示するメニューを変更させる場合は、どこで分岐するのがいいんでしょうか?
0796nobodyさん2007/02/02(金) 23:07:42ID:???
そのユーザ種別であらかじめメニュー部分の
テンプレートパーツ名を決めて、メインのレイアウトテンプレートから
includeするファイルを変えるとか色々方法あるんじゃない?
0797nobodyさん2007/02/03(土) 01:08:18ID:???
ユーザ種別メニューアイテムをコントローラから押し込むか、
モデルから引っ張ってくるかのどちらかじゃね。
ビューで切り替えるもんじゃないような気がするが。
0798nobodyさん2007/02/06(火) 20:28:11ID:adz0uOuq
質問です。phpBB2が使用しているフレームワークってなんていうフレームワークなんでしょうか?
いま、phpBBのソースコードを解読・勉強していて疑問になりました。
0799nobodyさん2007/02/08(木) 13:37:11ID:???
>>798
独自じゃないの

ネタとしてはスレ違いだよ
0800nobodyさん2007/02/15(木) 19:29:02ID:t/XW6gI0
smartyでの演算時に、計算を優先する括弧ってどう書けばいいのかな?

(3 + 2) * 5

みたいな感じなんだけど。
0801nobodyさん2007/02/15(木) 20:54:32ID:???
`(3 + 2) * 5`でできない?
0802nobodyさん2007/02/16(金) 10:58:20ID:qBGQeHi7
>>801

それがうまくいかないんですよね。

{if '($smarty.foreach.loopname.iteration-9)%3'==0}

こんな感じで処理を行いたいんのですが。
0803nobodyさん2007/02/16(金) 11:01:05ID:???
>>802
[ ' ] じゃなくて [ ` ]
08048002007/02/16(金) 11:16:20ID:qBGQeHi7
よくわからないけど、いろいろやって、以下のやり方で出来ました。

{if ($smarty.foreach.hobbyloop.iteration-9)%3==0}

自分の勘違いだったぽい。レスサンクスでしたー。
0805nobodyさん2007/02/22(木) 22:23:52ID:???
煽りじゃなくて、Smarty勉強してて思ったんだけど、
テンプレートファイルに
{if $item <0} 〜HTML〜 {/if}

って書くのと

<?php if($item <0 ){ ?>
〜HTML〜
<?}?>

って書くのと、基本的にテンプレートの中身は変わらない事無いか?
WEBデザが使いやすいだろうと思ってSmartyでデザインとソースを分離
しようと思ってたんだけど、テンプレートにSmartyのソースが入るんだから
やっぱり、PHPの知識がいるわけで、普通にPHPのソース書くのと違わない
気がするんだけどな・・・。他にメリットある?
0806nobodyさん2007/02/22(木) 22:25:33ID:???
>>805
>WEBデザが使いやすいだろうと思ってSmartyでデザインとソースを分離しようと思ってたんだけど

もうわかっただろ?それをやるにはSmartyだけじゃ無理だって事だ。
0807nobodyさん2007/02/22(木) 22:35:26ID:???
俺は表側っつかwebのツラのほうを作る側だから、php系のサイトで
うっかりロジック部分を触って壊したりしないかと常々おびえてて、
そんでsmartyの勉強始めたとこです。

今は1by1の分業体制だけど、これから人増やす可能性も高いので
コード側やってる相方さんも、自分がざっくりphpでプロト書いて
俺にデザインをつけさせる、という路線だとメンテ性とか可読性の面で
もう限界だと思っているみたい。

逆に言えばそういうコラボ体制とかでなければ、php直書きのほうが
効率いいのかもしれないなあ。
08088052007/02/22(木) 22:45:21ID:???
>>807
デザ側の立場として質問なんだが、

>うっかりロジック部分を触って壊したりしないかと常々おびえてて、

って書いてるけど、現在は勉強してある程度PHP使えるようになったの?
それとも、完全にソースの部分は触らないようにしてるの?

だいたい、テンプレートと言ってもヘッダーとフッターを分けてincludeする
ようにしている場合が多いし、そんなんじゃ、Dreamweaverでも編集しづらいし、
デザ側のメリット無いと思うんだよな。

他スレとかでやたらこういう話が出てきたり、オブジェクト指向とか言われるけど、
それが他の人間と共同作業する上で、本当に役立つのか疑問に思えるんだよ。
もちろん、出来て困らないだろうけど、807のように、スキルを学ぶ必要あるしさ。
0809nobodyさん2007/02/22(木) 23:11:43ID:???
>>808
一応変数追っかけてデバッグとか、DB自体のフィールドを増やさないような
簡単な書き足しぐらいはしてます。でも、やっぱりphpのソースのなかに
丸裸でいろんなものが散らばってるのは神経使います。冒頭に分離されてるなら
まだマシだけど、if文で配列をあるだけテーブル化して表示、みたいな奴だと、
html部のど真ん中に来ちゃいますし。

トラブルが起きたときにどっちが悪さしたのかわかりにくいし、片方が
(他人もDWで編集していることを前提にコラボ系機能が作り込まれている)
DWで、もう片方がテキストエディタで「同じファイルを」いじる、というのも、
作業的にはちと筋が悪いと思ってます。

includeは積極的に使っていきたい仕掛けではありますが、確かに
CSSベースでもテーブルベースでもDWでの編集が困難になるのですよね。
「head部はinclude・その他はDWのライブラリ」というスタンスの方が
web系の人員を増員する方針で考えるなら、むしろ好ましいのかな。
0810nobodyさん2007/02/22(木) 23:19:43ID:???
ロジックとデザインの分離は、現実的な問題として *完全には* 無理だと思うな。

でも、テンプレートタグはHTMLデザイナ向けに簡単な設計となっているはずだから
PHPコードをベタ書きするよりはマシかなって。
0811nobodyさん2007/02/22(木) 23:44:06ID:???
>>809
なるほど。ま、やっぱりデザイナー側も勉強する必要はあるって事だな。
>>810
>>805のようなソースの場合、べた書きするのと、{}で囲ってsmarty方式に
するのと、違いがあんまり無いと思うんだよな。
まぁ、forearchとかsmarty方式の方がソースは短くなるけどさ。
0812nobodyさん2007/02/23(金) 01:12:03ID:???
>>805
そうそうあんまり変わらないと思う。むしろ「 { 」入れてエラー出て困ってたデザイナさんも居た。
でもhtmlソースに出ない{* 〜 *}形式のコメントは活用できると思う。
0813nobodyさん2007/02/23(金) 01:15:09ID:CtBpLmme
HTMLをプログラマーの物にすればいいんじゃね?
0814nobodyさん2007/02/23(金) 01:43:49ID:???
>>805
うちの場合ケースバイケースだけど
表示するか否かというフラグを渡しておいて
{if $hasItem}表示内容{/if}
と出来るようにしたり
条件が複雑だったりよく使うような物だったら
ブロック関数作って
{logined}
ログイン時用の表示
{/logined}
みたいに出来るだけ単純に書けるようにしてるよ

オーサリングツールとの連携は難しいね
Flexyとかだとなんとかなるのかなと思うけど
0815nobodyさん2007/02/23(金) 14:43:40ID:???
Smartyは、他のテンプレートエンジンに比べると
何倍も遅いって聞くんだけど、そんなに大きな差があるの?
0816nobodyさん2007/02/23(金) 14:44:56ID:???
>>815
我慢出来ないほどじゃないだろwww
0817nobodyさん2007/02/23(金) 15:03:37ID:CtBpLmme
>>815
我慢できなきゃ、Zend Optimizer入れれば。
0818nobodyさん2007/02/26(月) 01:47:05ID:???
smartyのテンプレートのHTTPヘッダを変えることはできないのでしょうか?
テンプレートでCSVファイルを作り、それをダウンロードさせるようなことがしたいのです。

少し上の方に書いてあったsmarty_headerという関数をテンプレートに埋込んでみたのですが、
エラーが発生(関数が存在しない)し、使うことができませんでした。
0819nobodyさん2007/02/26(月) 11:02:48ID:???
>>818
fetchしてecho
0820nobodyさん2007/02/26(月) 11:17:58ID:???
>>818
>エラーが発生(関数が存在しない)し、使うことができませんでした。
プラグイン関数用ディレクトリのパスが通ってないだけだろ。
0821nobodyさん2007/02/26(月) 11:23:33ID:???
smarty_header なんてなかったと思うぞ
上のやつは自分で作ったプラグイン例としてsmarty_headerって
書いていたと思う
08227562007/02/26(月) 12:08:17ID:???
>>818
とてもシンプルなプラグイン:
{smarty_header http_equiv="Content-Type" content="application/octet-stream"}
{smarty_header http_equiv="Content-Disposition" content="attachment; filename=myfile.csv"}


私が定義した関数です。
plugin/function.smarty_header.php

function smarty_function_smarty_header($params)
{
    header("{$params[http_equiv]}: {$params[content]}");
}
08238182007/02/27(火) 02:39:59ID:???
プラグインのソース、ありがとうございます。
ですが作成されたファイルの内容がブラウザに表示されるだけで、ダウンロードのダイアログは表示されませんでした。
エラー文言ですが、

Warning: Cannot modify header information - headers already sent by 〜

と表示されます。
エラー文言が表示されることで既にHTTPヘッダが出力されてしまったのかもしれないとおもい
php.iniのdisplay_errorsをOffに倒して実行してみましたが、変わりませんでした。

やはり無理なのでしょうか。
0824nobodyさん2007/02/27(火) 03:10:33ID:???
>>823
http://jp2.php.net/manual/ja/function.header.php
08257562007/02/27(火) 07:35:44ID:???
>>823
{smarty_header ...} は文字を出力する前に呼び出さなくちゃだめだよ。

> 覚えておいて頂きたいのは、header() 関数は、 通常の HTML タグまたは
> PHP からの出力にかかわらず、すべての実際の出力の前にコールする必要があることです。
> 頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に
> 空白または空行があり、header() の前に出力が行われてしまうというものがあります。
> 同じ問題は、単一の PHP/HTML ファイルを使用している場合でも存在します。
08268182007/02/27(火) 23:11:30ID:???
>>824
>>825

ありがとうございます。
>頻出するエラーとして、include() または require() 関数、他のファイルをアクセスする関数に
まさにこれでした。
824さんが提示してくださったページは知っていたのですが、理解していませんでした。

あと皆さん、smartyとは関係のない質問をしてしまい済みませんでした。
0827nobodyさん2007/03/01(木) 09:32:48ID:???
>>807
英語が苦手でなければ、こんなのはどう?
ttp://www.kuwata-lab.com/kwartz/
こんな感じでhtmlとphpを分離できる。
ttp://www.kuwata-lab.com/kwartz/img/fig01.png
ttp://www.kuwata-lab.com/kwartz/kwartz3php-users-guide.01.html#example1
0828nobodyさん2007/03/01(木) 12:42:20ID:???
そういえば以前、未踏で完全分離を目指したテンプレートエンジン作ってたよな。
0829nobodyさん2007/03/01(木) 15:37:36ID:???
>>828
JavaServer Templates "Mayaa"
ttp://mayaa.seasar.org/
0830nobodyさん2007/03/02(金) 00:57:05ID:???
デザインの分離を考えるとFlexyはよく出来てると思う。
ただ、痒い所に手が届かないが。
0831nobodyさん2007/03/02(金) 09:43:20ID:???
>>827
そこの人、日本人だから以前は日本語のドキュメントもあったぞ。
今は無いみたいだが。

一年前使ってみた感想は、時期尚早って感じだったかな。
メインはrubyみたいで、phpのサポは片手間って感じ。
ドキュメントに書いてあるのに実装してない構文とかも確かあったし。
(and preg_matchの配列の渡し方を間違えて、毎回初期化してるんで動かなかったりしたのを修正したのを覚えてる。)

>>830
Flexyは結構面白いんだが、「構文解析が出来る」ものだから、かなり無茶な構文を定義しているような感じがする。
以前いじった時は、スタイルシートで{hoge:fuga}のように最後のセミコロンを省略したりした場合、
Flexyのプラグインを見に行ったような・・・
これまた1〜2年前にいじったきりなんだが修正されたのかな?
0832nobodyさん2007/03/06(火) 03:51:50ID:???
よくありがちな、こういう形のページを作るとき
みなさんははどのように作ってますか?
(仮にSmarty使用として)

1. 各コンテンツ.tplから、ヘッダ、フッタ、ナビをconfigから置換。
2. 各コンテンツ.tplから、ヘッダ.tpl、フッタ.tpl、ナビ.tplを読込み。
3. 全体デザイン.tplから、ナビ.tplとコンテンツ.tplを読込み。
4. 全体デザイン.tplから、コンテンツ.tplを読込み、
  コンテンツ.tpl内でさらにナビ.tplを読込み。

┌─────────────┐
│      ヘッダ(静的)     │
│┌─┐┌────────┐│
││ナ││ ページごとの   ││
││ビ││ コンテンツ(動的) ││
││ ││            ││
││静││            ││
││的││            ││
│└─┘└────────┘│
│      フッタ(静的)      │
└─────────────┘

私は全体のデザインを作ってしまって、
中身だけ入れ換える方式(上記3、4)が好きなのですが、
デザイナーにとっては、ファイル構成が直感的で
無くなるような気もします。
みなさんはどうしてるか参考までに聞かせてください。
0833nobodyさん2007/03/06(火) 07:45:19ID:???
>>832
ナビの部分はコンテンツごとに切り替えることがあるので、おれは3で。
0834nobodyさん2007/03/06(火) 08:01:34ID:???
まあ普通3だわな
デザイナーはhtmlベースな状態で管理を行って
デザインに更新があったらその都度プログラマが
変更点を確認して実際のテンプレートファイルに
手を加えるってのが一般的なんじゃないの
直感的なファイル構成にこだわる必要なんて無いと思うぜ
0835nobodyさん2007/03/06(火) 08:53:16ID:???
3,4の中身入れ替えって
全体デザイン.tpl に読み込む中身.tpl を選択する
分岐入れるってこと?

俺は良く2のパターンで作るなぁ。
デザイナさんに各ページをHTMLで作ってもらって
基本的にはそれを.tplに置き換えてから手を加える感じ。
0836GoA ◆J2EE.GplLk 2007/03/06(火) 09:46:08ID:???
>>832
俺はナビ部分が完全静的の場合なら、1をよくやるな。
正確に言えば、全体デザイン.tplからヘッダ・フッタ・ナビを完全固定状態で…って感じだけどな。

でも、ナビも動的にする場合がおおいので、結果として、3みたいな感じになることがおおい。
0837nobodyさん2007/03/06(火) 10:15:32ID:???
3の場合ってつまり
各コンテンツ.php内でコンテンツtpl名を変数に割り当てindex.tplを読み込み
index.tpl内で静的なヘッダ・フッタ+動的なコンテンツtplを読み込み
って感じ?(ナビ略)
0838nobodyさん2007/03/06(火) 12:16:59ID:25mpWck5
括弧の中を先に計算させたくて、以下のようにしたら...:
{section ... start=`($foo.bar-1)*($smarty.const.CONSTANT)` ...}

このようなエラーが出ました:
Fatal error: Smarty error: syntax error: $smarty. is an unknown reference

これはどうしたらよいのでしょうか?
08398382007/03/06(火) 12:36:12ID:25mpWck5
計算を優先させる括弧は、{math}でなら使えるみたいだけど、「効率が
悪いので、スクリプト側で計算させてテンプレートに振り分ける方が良い」という
ことが書いてあったのでそうします。
0840nobodyさん2007/03/06(火) 14:27:54ID:???
>>832
基本3か、場合によっては2かな。
0841nobodyさん2007/03/06(火) 14:33:09ID:???
>>835
私の場合は、各アクションの最後にどのコンテンツtplを使用するか送るようにしてる
メニューの部分は、全アクションに継承されたクラスのコンストラクタか、
アクション終わってからセットかな。もしくはtplから直読み。
0842nobodyさん2007/03/06(火) 14:36:46ID:???
ちなみに、>>837の言っている通り、全体デザインtplに送るのは決定されたテンプレート名だけの変数で
読み込む場合は{include file=$contpl}って感じね。
0843nobodyさん2007/03/06(火) 15:39:31ID:???
>>832です。
>>833-837,840-842
ありがとうございます。

デザイナ側からの視点だとまた違うんでしょうが、
プログラマ側からでは、3が多数という感じですね。
普段こういった事を同業に聞くこともないので
面白かったです。
0844nobodyさん2007/03/09(金) 15:28:36ID:???
3、4の全体ページってもしヘッダでちょろっと変更があったら
ほぼ全部のテンプレートを変更しなきゃいかんよね?
(DWのテンプレ機能とかはおいといて)
文章が分かりづらくてスマソ…。
0845nobodyさん2007/03/09(金) 15:32:27ID:???
なんで?
0846nobodyさん2007/03/09(金) 16:00:37ID:???
>>844
んなわきゃない
ヘッダやフッタに変更があってもレイアウトテンプレートを修正するだけだ
どう勘違いしてるんだ?
0847nobodyさん2007/03/09(金) 16:01:36ID:???
>>844
何が言いたいのかさっぱりわからない
全体ページは共通だろ
08488442007/03/09(金) 16:44:05ID:???
スマンです。頭が悪くて把握できていないんですが、
まず全体ページ(例:all.tpl)を呼んで、その全体ページ(all.tpl)のなかで{include 各コンテンツ}を
呼ぶってことでしょうか?
0849nobodyさん2007/03/09(金) 17:15:08ID:???
そうそう
0850nobodyさん2007/03/09(金) 17:24:54ID:???
そう>>837に書いてあるじゃん
08518442007/03/09(金) 17:32:37ID:???
>>849-850
オオゥ、、ありがとう!837は見逃してた。節穴な俺orz
0852nobodyさん2007/03/10(土) 10:44:25ID:GgSEfqVF
smartyで可変変数って使うことができないのでしょうか?
{${$loop[loop].name}}
{$$loop[loop].name}
という2つはエラーになりました。
0853nobodyさん2007/03/10(土) 11:30:55ID:???
{$loop[`$hoge`].name} で出来なかったっけ

最近Smarty使ってねえから間違ってたらすまんな
08548522007/03/10(土) 11:44:36ID:GgSEfqVF
>>853
ありがとうございます。
しかしちょっとそのやり方がわからないです。

具体的には
$loop[0]['name'] = "a40";
$loop[1]['name'] = "a43";
$loop[2]['name'] = "a58";
のように数字が続いています。

で、sectionの中で
{$a43}や{$a58}などの変数を呼び出したいのですが、どうもうまくいきません。
section が複雑にネストしてるので配列で渡すのはちょっと無理っぽいので、可変変数でなんとかしようと思った次第です。
0855nobodyさん2007/03/10(土) 11:48:12ID:???
テンプレートの if 文中で
{$var}.cde
という文字列を使いたいのですが、どのように記述すればいいでしょうか?

{if $var.cde == .....
では$varの配列とみなされてしまうようです。
08568552007/03/10(土) 11:49:03ID:???
すいません、、、、
smartyです。
0857nobodyさん2007/03/11(日) 14:03:45ID:???
>>854
そういうことか。無理なんじゃないかな。
定数値であれば、$smarty.const.$hoge で取れるんだが、
そんな方法で変数参照出来たら、逆に危なくて仕方ないしな。
設計から見直したまえ。
0858nobodyさん2007/03/11(日) 14:08:45ID:???
>>855
// $smarty->assign('var', 'ab');

{assign var="str" value=$var|cat:"cde"}

{if $str == "abcde"}ok{/if}
0859nobodyさん2007/03/13(火) 22:56:37ID:QJkFtOhT
{$smarty.session.id}でセッションIDが表示されるはずだよな?
なんで、俺だけ出ないのか教えてくれ。
0860nobodyさん2007/03/13(火) 23:31:57ID:???
セッションを開始していない
0861nobodyさん2007/03/16(金) 21:09:00ID:???
ずっと俺のターン
0862nobodyさん2007/03/18(日) 02:13:43ID:???
phpとDBがutf8で、実行の際にoutputハンドラでsjisにして出力してます。

smartyのテンプレ作成をutf8でお願いしますとデザイナに頼んだら、
「DWの設定まんどくさだから、sjisじゃなきゃダメ」と言われたので
smartyのautoload_filtersで、sjisテンプレをコンパイル時にutf8変換してます。

                 php(utf8) ← DB(utf8)
                   ↓
smartyテンプレ(sjis) → smartyコンパイル(utf8) → 画面出力(sjis)

このように、すごーく無駄な文字コード変換が2回も入ってしまいます。
なんか他にいい方法ないでしょうか?
0863nobodyさん2007/03/18(日) 02:43:21ID:CdbythRU
>>862

assign時にShift_JISに変換すればいいと思う。

                 php(utf8) ← DB(utf8)
                   ↓
assign
                   ↓to sjis
smartyテンプレ(sjis) → smartyコンパイル(sjis) → 画面出力(sjis)

Smartyの仕組みは知らないけど、assign時にコールバック処理を入れられるな
らそれを使えばいいし、無ければSmartyのラッパークラスを用意すればいい。
0864nobodyさん2007/03/18(日) 08:01:42ID:???
>>862
デザイナ殴ってでもutf8に変更させる。
0865nobodyさん2007/03/18(日) 08:53:47ID:???
DWの設定ってそんなメンドかったっけ?
頻繁に更新するものじゃなかったら、>>862さんがutf8にコンバートするとか。
0866nobodyさん2007/03/18(日) 09:12:45ID:???
DWの設定でエンコード決められてどうするんだよw
往復ビンタしてから
男から殴れ女なら犯せ
0867nobodyさん2007/03/18(日) 16:01:57ID:???
結局無駄な処理が入る事になるから
>>864の通りデザイナにUTF8で書いてもらうのが一番良い。
デザイナがだめならクライアントかディレクターあたりに「余計なコストがかかる事になりますが…」
とか言ってデザイナがUTF8で書かざる終えないようにがんばれ。
0868nobodyさん2007/03/18(日) 16:02:47ID:???
終えない→おえない
0869nobodyさん2007/03/18(日) 18:11:10ID:???
落ち着け
0870nobodyさん2007/03/18(日) 18:17:59ID:???
文字コードって最大最悪のバッドノウハウやね。
これがある日本はハンデやで。
0871nobodyさん2007/03/18(日) 20:08:33ID:???
Smartyなら
smartyテンプレ(sjis) → smartyコンパイル(utf8)
はテンプレートが更新された後の初回アクセスだけですむから大した負荷にはならないだろ。
0872nobodyさん2007/03/18(日) 22:52:24ID:???
>>865
文字コードの設定なんて数秒で変更できる。
■ このスレッドは過去ログ倉庫に格納されています