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

【PHP】Smarty【Template】

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

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

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
0266nobodyさん03/12/05 20:56ID:n07yC7qy
PHP質問スレッド Part11 から誘導されてきました。
http://pc2.2ch.net/test/read.cgi/php/1067635640/984

<p id="name">ここに名前</p>
  が、
$tpl->assign("name", "太郎");
  で
<p>太郎</p>

となるようにするにはどうすればいいのでしょうか。
今自分ことの環境はデフォルトなので、デリミタは { } となっています。
0267nobodyさん03/12/05 21:48ID:???
>>266
Smartyはセットアップできたの?
あなたの質問の内容よりよっぽど難しいと思うけど。
で、セットアップ出来ているとしたら、セットアップする際に参照した
マニュアル(例えば>>1には日本語マニュアルが紹介されている)の
最初の方にあなたの求める答えが載っているのだが。
026826603/12/05 22:20ID:???
ttp://sunset.freespace.jp/smarty/SmartyManual_2-6-0RC2J_html/
を見てインストールし、
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook;
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
まではうまく動くことを確認しました。

いまマニュアルを読み返しているのですが、それらしき箇所を発見することができません。
デリミタのカスタマイズは$left_delimiterと$right_delimiterの値を変えるんだと
思うのですが、これをどういじっても

<p id="name">ここに名前</p> ⇒ <p>太郎</p>

とはならないような気がします。
0269nobodyさん03/12/05 22:46ID:???
>>268
もう少しマニュアルを読めば分かると思うけど、index.tplに

<p id="name">{$name}</p>

と書けば置き換わるよ。
027026603/12/05 22:57ID:???
すみません、Smartyじゃできないみたいですね。

<element id="varname">ダミーの文字</element>

というテンプレートに対して、 assign('varname', 実際の文字) とすると
varnameというidの振られたエレメントの中のダミーの文字が置き換わって

<element>実際の文字</element>

となるようなライブラリを探しているんです。
これだと、「仕上がり見本」のHTMLをそのままテンプレートに使えるんです。
0271nobodyさん03/12/05 23:05ID:???
>>270
ああ、そういうことね。
では、テンプレートにifとelseを使って、$hogeがあるときは$hogeの内容、
$hogeが無いときはデフォルトの文字列っていう風にしてはいかが?
027226603/12/06 13:28ID:???
<p>{if $name}加藤剛{else}{$name}{/if}</p>

っていうことですか? これ Smartyを通さないと <p>加藤剛</p> を得られませんよね。

デザイナーは普通のHTMLエディタで何の変哲もないHTMLを書けばいい、
というのが狙いなので。
0273nobodyさん03/12/06 13:46ID:???
>>272
ああ、そこまでは無理やね。
というか、そんなの実現不可能だと思うけど。何使っても。

もしそういうライブラリーが見つかったら、報告よろしく。
027426603/12/06 15:07ID:???
RubyだとAmritaがあるんですよ。
ttp://www.brain-tokyo.jp/research/amrita/index_ja.html

PHPでというのが要件なので、探しているのです。
0275nobodyさん03/12/06 15:23ID:???
>>274
へー。勉強になりました。
そのうち誰かPHP版を作ってくれるかもね。
0276nobodyさん03/12/08 19:04ID:???
>>272
defaultを使った方が読みやすいよ。
<p>{$name|default:"加藤剛"}</p>
0277nobodyさん03/12/10 17:44ID:d5KtgpUB
「Chapter 4. 変数/phpから割り当てられた変数」というのは、assign などを
使って割り当てたもの、という意味なんでしょうか?
出力したい変数が多数あるのですが、テンプレート内で{$hoge} とする
だけでは出力しないものなんでしょうか?
0278nobodyさん03/12/10 17:48ID:???
<?=$vari?>
でいいじゃん
027927703/12/10 17:51ID:???
あああ・・ バカな質問をしてすみません。
ちゃんとマニュアルを読めば分かることでした(汗
assign などを使わないと、どこからも割り当てられていない変数を
表示しようとしちゃうんですね。あうー  はずかちー
0280nobodyさん03/12/12 00:15ID:BBYj3pBU
PHPは使えるけどSmartyを知らない人に、
「デザインとプログラムの分離」ができるという点で、
良さを伝えたいのですけど、PHPそのものでいいじゃんと言われてしまいます。

社内にSmarty広めたいのだけど、どうすればいいのだろう?

(キャッシュとかできて高機能だよ、とは言えるんだけど、
「デザインとプログラムの分離」の点で、説得できない・・・)
0281nobodyさん03/12/12 00:18ID:???
なんか、
{$vari}も
<?=$vari?>
も
標記的にはほとんどかわんないし、
べつに<?=$vari?>でイイじゃん
って思うんだけど、
なんでわざわざ
smartyなの?
0282nobodyさん03/12/12 01:04ID:C20HZJQr
処理用のPHPを作ってしまえば、処理と表示わかれるのは簡単だぞ。
おれはそうやって作ってる
かなり見やすいしさ。Smartyはちょっと見たけど、あまり魅力を感じない。
現時点ではね。
0283nobodyさん03/12/12 01:53ID:???
>>281
今時ショートタグ有効にしてあるのは嫌な感じ。
0284nobodyさん03/12/12 10:18ID:???
プログラマとデザイナが同じ人物なら
PHPだけでやればよい。
そうでないなら分けたほうが絶対便利。
あとはテンプレートエンジンの比較のはなし。

PHPで独自のテンプレートエンジンつくればいいっていう
頑固おやじはデザイナにそれの使用を強要して
使いにくいは、マニュアルもないはで、
「これだからプログラマは・・・」って言われるのがオチ
0285nobodyさん03/12/12 11:49ID:???
PHPで独自のテンプレートエンジン = smarty
0286nobodyさん03/12/12 11:51ID:???
俺はSmartyをメインに使ってるんだが、逆にSmartyを使わない
人たちは、

1.入力フォーム表示
2.内容確認ページ表示
 入力エラーがあった場合は1に戻ってエラーメッセージを表示
 「再入力」ボタンが押された場合は、入力内容を保持して1を表示
 入力エラーが無ければそのまま確認ページを表示
3.処理結果表示
 処理中に問題があった場合は2に戻ってエラーメッセージを表示

というフローを実現する時にどうしてるの?
0287nobodyさん03/12/12 12:01ID:???
1 2 3
でページを分けて
セッションを使いつつ
リダイレクトさせればOKじゃないの?
028828603/12/12 12:12ID:???
>>287
ファイルを分けた場合、2で生成したエラーメッセージは
どうやって1のフォームに表示しますか?
セッションに持つんじゃダサすぎるよね。
0289nobodyさん03/12/12 12:15ID:???
ヘーヘーヘー

セッションじゃだめなの?
別にPOSTでもいいけど

セッションがいやならPOSTにすればいいんじゃないの?
029028603/12/12 12:39ID:???
>>289
セッションが使えない場合にエラーメッセージが表示されなくなるのは
アプリケーションとして問題ありじゃないですか?
常にセッション前提の開発が出来るんなら別ですけど。

あと、2でPOSTにエラーメッセージを詰め込んでから
1にリダイレクトしても意味ないような気がしますが…。
0291nobodyさん03/12/12 12:43ID:???
セッションが使えない場合ってあるのか?
それならポストが使えない場合、GETが使えない場合とか
考えるとキリがないと思うんだが。

あと、何で意味無いのかわからない。
じゃあ、どうするの?

というか、これ全然smartyに関係ないと思うんだが。
029228603/12/12 12:53ID:???
まあ、ショボいロードバランサーを使ってるケースでもない限り
今時セッションが使えない場合ってのはないかもね。
でも、POST/GETメソッドが使えない場合なんてある?

リダイレクトってLocationヘッダを使うってことだよね?
そうすると$_POSTの内容ってまっさらになってしまう気がするんだけど。

俺の場合、>>286で書いたフローを実現するのに単一のファイルに
input()、confirm()、commit()みたいな関数を作って処理してる
のだけど、こういう構造にするとHTMLとコードを混在させるのはまず
不可能なのでHTML部分はSmartyで別ファイルにしています。

で、「Smartyイラネ」とか言ってる人はこの辺どうやってるのか不思議だったんですが。
0293nobodyさん03/12/12 13:27ID:???
一般的なphpの使い方

<?php
〜〜〜〜〜
〜〜〜
処理、このなかで出力するテキストなどを
変数にセット
〜〜〜
?>

<HTML>
<BODY>
<? echo "$phpでセットした変数"?>
<?=$phpでセットした変数?>
0294nobodyさん03/12/12 14:02ID:???
私の場合は、
main.php:
<?php
if (!is_numeric($hoge)) {
$status = "ng";
$message = "数字を入力して下さい";
}
if ($status == "ok") {
include ('complete.html');
exit;
}
include (question.html);
exit;
?>

question.html:
<?php print $message; ?>
<form action='main.php'>
<input type='text' value='<?php print $hoge; ?>'>
</form>

みたいにして、question.html をドリームウェーバーor 手書きで編集してました。
なので、あまりSmarty は必要ないかな、と思っていましたが、入力エラーのときに
option やcheckbox のvalue 値を引き継ぐのはSmarty の方が便利でした。
0295nobodyさん03/12/12 15:12ID:???
入力エラーってどういうケースを想定してるのかしらんがjavascriptで処理しちゃいかんの?
わざわざ鯖に仕事させなきゃ駄目?
0296nobodyさん03/12/12 15:14ID:???
>>295
クライアントがJavascriptを切っていたらどうする?
0297nobodyさん03/12/12 15:48ID:???
なんだかアホなはなしやめようよ

javascriptとかリダイレクトとか。
そんなの言ってるの趣味でやってる学生とかだろ?
そんなのスルーでお願いしますよ
029828603/12/12 16:07ID:???
>>295
商品情報編集ページを作るとして、入力してもらった商品IDをもとにデータベースを
見に行ったが該当する商品が無かった場合に「入力されたIDは存在しません」みたいな
表示をする場合はどうしますか?

そもそも、クライアントサイドでの書式チェックとサーバサイドでの内容チェックは別物ですよ。。
0299nobodyさん03/12/12 19:57ID:???
{html_options}を使うと<option>にlabel属性がついちゃいますけど、
みなさんは無視してます? ソースに手を付ける? 
それとも付いてると何かいいことがあるのかしらん??
030028603/12/12 20:15ID:???
>>299
<label>要素が付くと、チェックボックス部分だけでなく文字列を
クリックしてもトグルできるようになるよ。

[x] この文字列をクリックでもOK

IEはどうか知らんけど、Firebirdではちゃんと動くから俺は
気にせず使ってる。
0301nobodyさん03/12/12 21:55ID:???
javascriptをバンバン使ってる企業サイトもあるわけだが。
030228603/12/12 22:37ID:???
>>301
JavaScriptをオフにするとまともに閲覧できない企業サイトもあるわけだが。

と言うか別にJavaScriptを使うのは構わないんだけど、エラー処理を
JavaScriptだけで行おうとするWebプログラマはアホということ。
0303nobodyさん03/12/13 00:34ID:lh7ZJy1b
smartyもこれを使う人もsmartじゃないんですね。w
0304nobodyさん03/12/13 00:44ID:???
>>303
wを使う人
0305nobodyさん03/12/13 14:25ID:???
デザインとコンテンツの分離とか言ってる奴に限ってコンテンツは糞。
0306nobodyさん03/12/13 15:55ID:???
それはディレクターの責任ですから
0307nobodyさん03/12/13 18:03ID:???
もう少し正しく言うなら"デザインとロジックの分離"なワケで
あのスレは途中でタイトルが間違ってる事を指摘されてたワケだが。
実際に仕事とかで「デザインとコンテンツの分離が・・・」とか言い出したヤツがいたら
あぁコイツは分かって言ってねーんだなぁと9割方思っていい。
0308nobodyさん03/12/13 19:59ID:???
>>292
んんと、Smarty使ってるような感じで
そのまま別のPHPファイルをincludeしてる
SmartyはSmartyで便利と思うんだけど
Smartyのコードだと外部ファイル側で小回りが利かなくなるというか・・・
0309nobodyさん03/12/13 22:37ID:ittzKU4p
SmartyをWindows上で利用しているのですが、以下のエラーが出て動いてくれません。

Warning: Smarty error: problem writing temporary file '/home/sites/site40/templates_c/\%%117\%%1172603085\3fdb11ae15d5f' in d:\home\sites\site40\smarty\Smarty.class.php on line 1144
Warning: touch(): Unable to create file /home/sites/site40/templates_c/\%%117\%%1172603085\index.tpl.php because No such file or directory in d:\home\sites\site40\smarty\core\core.write_compiled_resource.php on line 31
Warning: fetch(/home/sites/site40/templates_c/\%%117\%%1172603085\index.tpl.php): failed to open stream: No such file or directory in d:\home\sites\site40\smarty\Smarty.class.php on line 1291
Warning: fetch(): Failed opening '/home/sites/site40/templates_c/\%%117\%%1172603085\index.tpl.php' for inclusion (include_path='.;c:\php4\pear') in d:\home\sites\site40\smarty\Smarty.class.php on line 1291

チェックすべき点や参考になるサイトなどがあったら教えていただけないでしょうか?

環境
Windows2000 professional
php4.3.4
031030903/12/13 22:44ID:???
>>309
$smarty->template_dir = '/home/sites/site40/templates/';
という風にしていたのを
$smarty->template_dir = 'd:/home/sites/site40/templates/';
としたら動きました。

スレ汚し申し訳ないです。

今からしっかりと勉強してSmartyの世界につかろうと思います。
031128603/12/14 01:13ID:???
>>308
んー、なるほどね。
俺は逆にincludeするファイルがPHPで書かれていると、<?php ?>タグが
デザイン(HTMLタグ)とごっちゃになっちゃう気がするのでSmartyにしてます。

いざとなればSmartyのテンプレートファイル中に
{php}
// PHPのコード
{/php}
とすることもできちゃうし。
まあ、実際にはPHPのコードを書かなければいけない状況になったことは無いですけど。
031230803/12/14 04:19ID:???
>>311
俺もSmarty化しようと思って
実際使ってみてやっぱり辞めた派なので
HTMLタグとの区別がスッキリするというのはよくわかります

辞めた理由としては
やっぱりインラインでデザイン側にいくつか変数欲しくなった時でも
いちいち呼び出し側でassignしなきゃいけないのが面倒でした

今は事実上Smartyみたいな構成にして
PHPコードで書かれたデザイン用ファイルを用意して普通にincludeしてます
HTMLタグとの混合はショートタグでだいぶましにはなります
それでもやっぱりスマートじゃないよう気がしますが・・・
やっぱりPHPネイティブのテンプレート機構が
あるのが一番いいなと思います
031328603/12/14 13:22ID:???
>>312
「いちいち呼び出し側でassignしなきゃいけない」ということは、
デザインとロジックの分離が強制されるということなので気にしないようにしてます。

あと、ショートタグを有効にしているとXHTML(XML)を記述する時にハマるのも
気をつけたいところ。
0314nobodyさん03/12/14 13:33ID:???
>>312
$aaa->c1 = "111";
$aaa->c2 = "222";
$tpl->assign("aaa", $aaa);
$tpl->display("xxxx.tpl");
-------------------------
{$aaa->c1} {$aaa->c2}

変数増えても平気だ
0315nobodyさん03/12/19 10:20ID:hqiHAaNv
Smartyを便利に使用していますが,foreachやsectionなど配列をループさせる
関数はありますが単純に数値でループさせるにはどうすればいいのでしょう。
例えば10という数値をアサインして,テンプレートで10回処理を繰り返す
(例えば改行を10回入れるなど)といった処理です。
forは無いようですし,doやwhileもありませんよね?
0316nobodyさん03/12/19 11:22ID:???
>>315
Smartyの良いトコの一つとしてプラグインによる拡張があるワケで、
こういうタグが無いぞ!と思ったら
http://smarty.incutio.com/?page=SmartyPlugins
から探すか、もしくは自分で作る。
ちなみに回数を指定して繰り返したいなら、BlockRepeatPluginで
そのものズバリの事が出来る。
0317nobodyさん03/12/19 11:27ID:???
>>316
なるほど。
forのような基本的な関数が無いはずが無いとマニュアルを何度も探していたのですが,
プラグインを使うのですか・・・

紹介していただいたサイトとプラグインをよく読みます。
ありがとうございました。
0318nobodyさん03/12/19 13:00ID:???
>>317
forやdoやwhileは、その条件や回数がテンプレート(View)とは無関係なものだから
テンプレート内では使えないようになってるんでしょう。

改行を10回入れたい場合はコードのほうで、
$smarty->assign('loop', 10);
とやっておいて、テンプレートでは

{section name=foo loop=$loop}
<br>
{/section}

でOK。
0319nobodyさん03/12/19 13:06ID:???
>>318
そ、そうなのか?
0320nobodyさん03/12/19 13:15ID:???
>>319
そうなのか?ってどっちのこと?
forやwhileが無い理由はそういうことだと思うけど。

動的にページの要素を増減させたいケースっていうのはつまり、
「商品の数が増減するからテーブルの行も増減する」とか
「User-Agentによって一部分を表示させたくない」とか
ロジックによる処理ばっかりでしょ。
032131703/12/19 13:36ID:???
>>318
> {section name=foo loop=$loop}
> <br>
> {/section}

確認しました。こんなことが出来るんですね。
何で今まで試さなかったんだろう・・・orz

いままで,array_padでダミーの配列を作ってループしていたので,
メモリも節約できて助かります。
$smarty.section.hoge.indexも使えるのでsectionが使えれば万々歳です。

ありがとうございました。
0322nobodyさん03/12/19 15:42ID:???
ソース見てみたら
$output .= "{$section_props}['loop'] = is_array($attr_value) ? count($attr_value) : max(0, (int)$attr_value);\n";

ってことだった。
loopには配列しか指定できないもんだと思ってたよ。
0323nobodyさん03/12/20 21:52ID:???
だれかDreamweaverとかでSmarty使ってる人いません?
やっぱりみんな手で組んでるの?
これじゃ、せっかくデザインを分離できてもなーー
0324nobodyさん03/12/21 05:53ID:???
>>323
使ってますよー
0325nobodyさん03/12/21 10:01ID:???
>>324
ど、どうやって?
ヒントでも教えて〜
Smarty&PHP側に細工?
ドリ側で細工?
0326nobodyさん03/12/22 21:59ID:???
>>323
Dreamweaver使ってないんだけど、どういう問題?
SmartyタグのせいでHTMLが正しく解釈されず、デザインビューがメチャクチャになるって事?
多少の対策として、デリミタを{ } から <{ }>みたいにしてるね。xoopsとかは。
0327nobodyさん03/12/23 00:10ID:???
>>326
デザイナが編集するときにきれいに表示されないってことです。
{section xxxx.....}
とかはそのまま表示されてしまいますし
もちろん
{if xxx}
xxx
{else}
xxx
{/if}
とかも表示が崩れます。
if文の中でタグの開始とか終了とかやってると顕著です。

xoopsかー
ちょっと見てみようかな
0328nobodyさん03/12/23 00:41ID:???
>>323
そういうときに >>266-275 のAmritaが良いわけですよ。Rubyだけど。

032932303/12/23 23:30ID:???
>>325

自分は、趣味で作ってるサイトでやってるだけなので、
ドリにタグが出ても、問題ないです。

職場でもphpとかで開発してるけど、
Smarty?何それ?と言われた(泣く
0330nobodyさん03/12/24 01:11ID:???
DreamweaverのSmarty Extension・・・いつになったら・・・ウウゥ・・・
0331nobodyさん03/12/24 01:24ID:???
この手の奴いくつかあるけど
どいつもこいつも独自仕様なんだよな。
大差ねえ野に。
0332nobodyさん03/12/27 20:35ID:???
smartyって別に個人が1人でレイアウトからプログラムまで全部やる場合は
特にメリット無いよね?
オーバーヘッドが無いとか色々書いてあったけど、
別にこれを使う事で開発が楽になったりプログラムの実行速度が速くなったりはしない?
0333nobodyさん03/12/27 22:12ID:???
>>332
その色々がもたらすメリットが理解できないなら使っても一緒かな〜と。
オーバーヘッドの意味、分かってる?
0334nobodyさん03/12/28 09:49ID:???
>>333
クラスとか関数の定義を読み込んだりする
最初にかかる時間の事だと思ってますが
ちゃんとした本とかで勉強した事が無いので合ってるかどうかは分かりません。
0335nobodyさん03/12/30 11:17ID:???
現在333はオーバーヘッドの意味を勉強中です。
しばらくお待ちください。
0336nobodyさん04/01/02 22:22ID:???
あけましておめでとうございます。
今年もSmartyを使っていろいろ開発していきましょう!

という自分は、現在自分のサイト(趣味で作っているヘボサイト)を
勉強をかねてSmartyを利用して再構築しています。

正月休みは、マニュアルを読みながらひとつひとつの動きに
感激しっぱなしでした。

仕事でJavaServletやJSPを利用したWebシステムの開発をしているので、
Smartyは非常にとっつきやすいです。
0337nobodyさん04/01/04 01:15ID:LkXOe+SC
英語圏の人向けにXHTMLでページをつくってるんですが、
tplファイルに<?xml version="1.0" encoding="utf-8"?>
としても特に問題起こらないですか?
(もちろんtplファイルの文字コードはutf-8。ただし、phpスクリプトはEUC)


0338nobodyさん04/01/04 09:10ID:???
>>337
やってみたの?
033933704/01/05 22:52ID:SHqc05oc
>>338
いちお、いまんとこ問題なさげなんだけど・・・
0340nobodyさん04/01/05 23:33ID:???
>>337を含め、最近のphp界隈は問題ありすぎ
0341nobodyさん04/01/06 16:18ID:???
>>340
PHPどうのこうのっていう以前の問題が多すぎだね。
建築しらない人が、日曜大工でビル建てようとしてるような人が多すぎる。
0342nobodyさん04/01/11 21:34ID:ESnicSkb
     ______
    /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、Smartyはスマートだ。
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
0343nobodyさん04/01/12 02:03ID:???
どこがスマートだよ。
全然デザインとロジックの分離ができてねーじゃん。
糞杉。
0344nobodyさん04/01/12 03:28ID:???
いくらスマートなモノでも使い方がスマートでないとスマートにはなりませんよ。
0345nobodyさん04/01/12 12:58ID:???
スマートなら自前で実装するよ
0346nobodyさん04/01/12 14:36ID:XY33XXMX
     ______
=@   /_      |
    /. \ ̄ ̄ ̄ ̄|
  /  /  ― ― |
  |  /    -  - |
  ||| (6      > |
 | | |     ┏━┓|   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| | | |     ┃─┃|  < 正直、Smartyは名前の通りスマートだ。
|| | | |  \ ┃  ┃/    \________
| || | |    ̄  ̄|
0347nobodyさん04/01/12 19:22ID:???
古いAAだな。久々に見たぞ
0348nobodyさん04/01/12 23:29ID:???
いまやハワイのチャンピオンだからな
0349nobodyさん04/01/18 13:31ID:stryZ884
盛り上がっていこうゼ
0350nobodyさん04/01/19 08:48ID:vtz23jMl
2.6.1
0351nobodyさん04/01/28 19:47ID:???
QuickFormとSmartyの連携
0352nobodyさん04/02/12 11:33ID:KTntpHdL
smartyと相性のいいホームページ作成ソフトって何ですか?

私はホームページビルダー7を使ってますが、画面をデザインした
あとに、必ずHTMLを見て修正する必要があるんです。

例えば、適当にHPビルダーでフォームとか配置して部品を付けると、
それぞれの部品が<form>でくくられてしまったり・・・

なのでデザイナさんに画面を作ってもらっても、結局それをデザイ
ンを壊さないようにエディタで修正するハメになるのです。

ホームページ作成ソフトで作ったら、そのHTMLは見なくていい。
そんなホームページ作成ソフトはないでしょうか?
0353nobodyさん04/02/16 06:31ID:fxjTO9Xi
>255
同感です。
私も、いいホームページソフトを教えてほしいです。
0354nobodyさん04/02/18 05:55ID:Rpd68eXE
>255
Dreamweaverなどは?
いちおうPHPなどにも良さそうなことがメーカのHPに書いてありますが・・・
0355nobodyさん04/02/18 08:05ID:bgploQOu
すいません、Smrtyの入れ子ってどうやるのでしょうか?
もともと、
------------------------------------------------------------
<html>
(略)
{php}
include("./category/" . getParam( 'cat' ) . ".inc");
{/php}
(略)
</html>
------------------------------------------------------------
というtmpl(テンプレートファイル)があるのですが・・・

(ちなみに、getParam関数は↓こんなかんじ)
function getParam( $name )
{
$val = $_GET[$name];
if( $val == "" ){
$val = $_POST[$name];
}
return( $val );
}

で、catの値によっては、
includeしたファイルの中で、さらにsmartyを使いと思ってます。
マニュアル見たり試行錯誤してもわらなかったので、
どなたかご存じの方、いらっしゃったら、教えていただければ幸いです。
035635504/02/18 09:04ID:???
自己レス
incファイルの中で、

global $smarty;

$smarty->assign("foo", $line[1]);

$smarty->assign("bar", $line[2]);

とやったらできてしまいました。
(するとこれは、「入れ子」とはいわないのかな。まぁいいや)
035735504/02/18 09:07ID:???
前言(>>356)撤回。何も表示されてませんでした。んー、どうすればいいのだろう。
0358nobodyさん04/02/18 09:44ID:???
>>355
そもそもその incファイルでは $lineは定義されているのか?
俺ならテンプレートリソースにするのが簡単かつ安全だと思うけど。

あと、脱字大杉
035935504/02/18 10:55ID:???
>>358さんありがとうございます。
>$lineは定義されているのか?
はい。

「テンプレートリソース」というものを知らないので、勉強してそっちでやってみるかもしれません。
ありがとうございます。

>あと、脱字大杉
どうもすみませんでした。
0360 ◆AngelH/kMI 04/02/28 23:27ID:???
久々に書き込み。
引っ越しして超ナローバンドなためきつい・・・。
後2週間はこのままかと思うと気が重いっス。

http://sourceforge.jp/projects/phpoot/
ネタ投入。
見る限りではなかなかよさそうなんだけど、
誰か使ってみた人いますか。
自分所では動作しなく・・・。

>>352-354
自分はDreamweaver使ってますよ。
設定すれば勝手に書き換えたりしなくなるし。
(比較的)まともなHTMLはき出してくれるので、ver1.2の頃から愛用しています。
0361nobodyさん04/02/29 08:02ID:???
>>360
俺も翻訳者のwebみて知ってこれ良さそうと思ったけど
何ひとつサンプルが動かないのは如何なものか(´д`;)
ぜったい テストされてねぇ〜・・・・・

とりあえずソース何ヵ所かいじったら動いたけど<img><br>タグ閉じてないよっておこられまくって
ふて寝しますたorz
0362 ◆AngelH/kMI 04/02/29 14:47ID:???
>>361
む、動きましたか?
触った箇所教えてくれると助かりまつ。

<img><br>が動かないのは、XHTML準拠、とのことでエラーになってるのかと。
それぞれ
<img src="hogehoge" />
<br />
にして試してみてー。
0363nobodyさん04/02/29 16:53ID:???
>> 360-362
phpoot::_compileに渡す compiled_fileの作成の仕方が間違ってるね。
存在しない pathに対して realpath()を使っていらっしゃる。

× $compiled_file = realpath($this->_compiled_dir . '/' . basename($this->_template_file) . PHPOOT_EXT);
○ $compiled_file = realpath($this->_compiled_dir . '/' . basename($this->_template_file)) . PHPOOT_EXT;

<img><br>ってのはサンプルにはないよね?
試しに書いてみたけど、<img> -> <img />に補正されるし、<img><br>は削除されるし、
こいつは XML_HTMLSaxのせいか? PEAR使ってるなら、命名規則も従ってくれると良いね。

Amrita意識してるようだけど、この品質なら、今から使うメリットはなさそうだと思った。
Smartyは枯れてきてるし、PEARなら HTML_Template_Flexyのほうが`まだ`出来が良い。
0364 ◆AngelH/kMI 04/02/29 21:46ID:???
>>363
サンクス。
こっちでも一応動作確認出来ました。
まあ、今後に期待ってことでSmartyに戻ります(笑

うちの環境だと、一回目のアクセス時(つまりcompileするときに)
phpoot.parser.phpがundefined index出しまくりで気になる・・・。
0365nobodyさん04/03/08 07:32ID:???
{$hoshu}
0366nobodyさん04/03/11 16:02ID:???
書籍のデータベースを検索して表示するページを作っています。
現在すべてのページで
<?php
include 'header.php';
//メイン処理
include 'footer.php';
?>
としていますが、これをSmarty で記述する場合、
main.tpl の中でindlude or include_php するのが良いのか、
main.php の中で、
func_assign_header();//ヘッダー用の表示をアサインする関数
func_assign_footer();
$smarty->display('header.tlp');
$smarty->display('main.tlp');
$smarty->display('footer.tlp');
みたいにすれば良いのか、或いはもっとべつの良い方法があるのか・・・というより、
ありそうだなあ、と悩んでいます。。。
>>96 さんとほぼ同じケースだと思うのですが、アホなので>>97 さんのアドバイスが
良く分かっていません。
ヒントへのポインタでも結構ですのでアドバイスをお願いできますでしょうか??
■ このスレッドは過去ログ倉庫に格納されています