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

このエントリーをはてなブックマークに追加
934nobodyさん:2007/04/13(金) 11:37:03 ID:W3WC3UzW
javascript絡みの話なんですが、

<script>
array[1] = {$infotype2[1]};
</script>

こんな感じにjavascriptのコード内でsmartyから受け取った値を代入したい場合はどうすればいいんでしょうか。
よろしくお願いいたします。
935nobodyさん:2007/04/13(金) 11:38:31 ID:???
>>934
俺ならJavaScript全体を
PHPコード側で変数に格納して、
assignで渡すけどな。
936nobodyさん:2007/04/13(金) 11:59:56 ID:W3WC3UzW
>>935
なるほど。勉強になります。
ありがとうございました。
937nobodyさん:2007/04/13(金) 12:05:45 ID:???
そうテンプレート内に書けばいけるじゃん
938nobodyさん:2007/04/14(土) 00:52:03 ID:???
>>934
サーバサイドスクリプトとクライアントサイドスクリプトの間には何があるのか考えればおのずと答えが出るだろ。
もしかして{がデリミタだから引っかかってるとかじゃないよな?
939nobodyさん:2007/04/17(火) 19:07:41 ID:???
QuickFormで

$tmpArray = array();
foreach ($list as $row) {
$tmpCheckBox =& $form->createElement('checkbox');
$tmpCheckBox->setName($i);
$tmpCheckBox->setText($row['name']);
$tmpCheckBox->updateAttributes(array(
'value' => $row['id'],
'id' => 'check_'.$i
));
$tmpArray[] = $tmpCheckBox;
$i++;
}
$form->addGroup($tmpArray, 'ques_01', '', '');

こんな感じで checkbox の value の値は変えられるようになったのですが
freeze() すると値が1に戻ってしまいます。
何とか freeze() を経由しても、継承する方法はないのでしょうか?
940nobodyさん:2007/04/17(火) 22:45:42 ID:???
なんでsmartyスレで聞いてんの?
941nobodyさん:2007/04/17(火) 23:43:20 ID:???
なんでスレッドのタイトル見てないの?
942nobodyさん:2007/04/18(水) 00:51:02 ID:???
Flexyのこともたまには思い出してあげてください。
943939:2007/04/18(水) 10:23:00 ID:???
あ。ごめんなさい。
レンダリングで Smarty 使ってたもんでつい…。移動します。
944nobodyさん:2007/04/22(日) 18:56:08 ID:b9VJcguV
質問です
テンプレート(.tpl)中の
{foreach name=loop from=$products item=product}
〜〜
{/foreach}
としている部分がまるっきりブラウザに表示されません
なにが問題でしょうか?
ありがちなミスのパターン(解決策)を教えてください。
自分なりに確認したつもりですがわかりません
945nobodyさん:2007/04/22(日) 19:28:50 ID:???
$productsの中身が空
$productsをassignしてない
$productsのスペルが間違ってる

某情報機関の調査によれば上記の凡ミスが全バグ中の85%を占めるそうです。
946nobodyさん:2007/04/24(火) 18:30:43 ID:???
<TABLE width="100%" border="1" cellspacing="0" cellpadding="1">
<TBODY>
<TR><TH>AAA</TH><TH>BBB</TH><TH>CCC</TH><TH>DDD</TH><TH>EEE</TH><TH>FFF</TH></TR>
<?php
while ($rs = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
?>
<TR><TD align="center"><?=$rs['h_AAA']?></TD>
<TD><?=$rs['h_BBB']?></TD>
<TD><?=$rs['h_CCC']?></TD>
<TD><?=$rs['h_DDD']?></TD>
<TD><?=$rs['h_EEE']?></TD>
<TD><?=$rs['h_FFF']?></TD></TR>
<?php
}
?>
</TBODY></TABLE>
<?php
}
$result->free();
$conn->disconnect();
?>

smartyの勉強しています。
上の文をphpとtplに分ける際にどう記述すればいいですか?
よろしくお願いいたします。
947nobodyさん:2007/04/24(火) 20:11:55 ID:???
948nobodyさん:2007/04/25(水) 00:40:47 ID:6uGbCoSG
>>945
サンキュー 解決した!
949nobodyさん:2007/04/25(水) 00:52:35 ID:???
>947
つ【最新版】
http://smarty.m-takagi.org/
翻訳者のみなさんマジGJ!
950nobodyさん:2007/04/25(水) 18:06:36 ID:oViUh0CG
946です。
****php******
<?php
$sql = 'SELECT * FROM table;
$smarty->assign('data', $conn->getAll($sql));
$smarty->display('file:E:/html/list.tpl');
?>

****list.tpl****
<TABLE width="100%" border="1" cellspacing="0" cellpadding="1">
<TBODY>
<TR><TH>AAA</TH><TH>BBB</TH><TH>CCC</TH><TH>DDD</TH><TH>EEE</TH><TH>FFF</TH></TR>
{section name=co loop=$data}
<tr>
<td>{$data[co].AAA}</td>
<td>{$data[co].BBB}</td>
<td>{$data[co].CCC}</td>
<td>{$data[co].DDD}</td>
<td>{$data[co].EEE}</td>
<td>{$data[co].FFF}</td>
<tr>
{sectionelse}
<tr><td colspan="5">No items found</td></tr>
{/section}
</TBODY></TABLE>
参考にして組んでみたのですが
上のソースだと、ブラウザに表示されまん。
データはとんでるぽいのですが。。。
設定まわり???

951nobodyさん:2007/04/25(水) 18:25:14 ID:???
>>950
DB_FETCHMODE_ASSOCがないからじゃないの
952nobodyさん:2007/04/26(木) 09:07:13 ID:ogJz3FoA
>>951
解決しました。ありがとう
e時ミスでした。
953nobodyさん:2007/05/08(火) 16:15:44 ID:???
Japanese translation available!
[4-May-2007] The Japanese documentation is here! Thanks goes to Masahiro Takagi, Joe Morikawa, Daichi Kamemoto, and Shinsuke Matsuda for their hard work.

954nobodyさん:2007/05/12(土) 22:26:46 ID:6YVR0l4j
tplファイルから

{php}
require_once(hoge.php)
{/php}

↑みたいなことやるとhoge.phpの中でDB(MYSQL)から読み込んだ文字だけ
文字化けするんだけど何で?

ちなみにhoge.phpを直接実行する場合は文字化けを起こさない。
DBもphpもtplも全部UTF-8Nで統一してんだから当たり前だけど。
955nobodyさん:2007/05/13(日) 00:40:29 ID:???
{php}使うぐらいならむしろsmarty使うな。
956nobodyさん:2007/05/13(日) 05:21:57 ID:m+4dQ5o9
smartyって
テンプレートの名前、例えばhoge.tplを
www.hoge.jp/hoge.phpとwww.hoge.jp/foo/hoge.phpと両方で使うと、バグると言うか、同じtplとみなして表示がおかしくなりますよね?
template_cを自前で切り替えないとダメってコト?
不便じゃない?
みんなどうしてます?
957nobodyさん:2007/05/13(日) 07:37:56 ID:???
>>956
マニュアルをよく読んでるから大丈夫。
958956:2007/05/13(日) 14:36:39 ID:???
>>957
$compile_id
こいつか!ヒントサンクス!
959nobodyさん:2007/05/17(木) 01:55:24 ID:???
教えてください。

php部分
$array=array(
"1"=>array("sys"=>"a1"),
"2"=>array("sys"=>"b2"),
"3"=>array("sys"=>"c2"));

$array2=array(
"a1"=>array("ver"=>"z1"),"a2"=>array("ver"=>"z2"),"a3"=>array("ver"=>"z3"),
"b1"=>array("ver"=>"z4"),"b2"=>array("ver"=>"z5"),"b3"=>array("ver"=>"z6"),
"c1"=>array("ver"=>"z7"),"c2"=>array("ver"=>"z8"),"c3"=>array("ver"=>"z9"));

通常表示このように変数値で配列番号を指定し表示される部分を
foreach($array as $value){
print $array2[$value['sys']][ver];
}
//結果 z1z5z8

smartyで同じ処理をするよう
以下コードを書いたのですがパターン1〜3ともに表示できませんでした。
配列番号を変数で指定することは不可能なのでしょうか?

{foreach item=a key=key from=$array}
{$array2[$value['sys']]ver}      パターン1
{$array2.$value['sys'].ver}      パターン2
{$array2.$value.sys.ver}       パターン3
{/foreach}
960nobodyさん:2007/05/17(木) 01:57:57 ID:???
smartyの部分修正
{foreach item=a key=key from=$array}
{$array2[$a['sys']]ver}      パターン1
{$array2.$a['sys'].ver}      パターン2
{$array2.$a.sys.ver}       パターン3
{/foreach}
961nobodyさん:2007/05/17(木) 10:06:42 ID:???
>>959
assign
962nobodyさん:2007/05/27(日) 20:34:44 ID:CBMyXuH3
includeファイルにtableタグを使うと
上に空白が入ってしまいます。
<b>aaa</b>だと大丈夫でした。
どうすれば空白がきえますか?

先ほど別の板で{strip}{/strip}を教えて頂いたのですがダメでした。
宜しくお願い致します。
963nobodyさん:2007/05/27(日) 21:45:06 ID:???
>>962
ソース
964nobodyさん:2007/05/28(月) 00:33:32 ID:Q4t73dbV
>>963
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0013)about:internet -->
<html>
<head>
<title></title>
<body>
<table>
<tr><td>aaaa</td></tr>
</table>
</body>
</html>
965nobodyさん:2007/05/28(月) 01:05:51 ID:Q4t73dbV
>>963
すいません、間違えました。
少し酔ったんでまたソース書き込みます。
ご親切にレス頂いたのに本当にすみません。
966nobodyさん:2007/05/31(木) 17:23:08 ID:AGOFu4XP
Smartyで配列の件数を出力したいのに

{$ar|count}

とすると
Array
と表示されてしまうのですがなんで?

上のように書いたら
count($ar)になると思ってたのですが。
967966:2007/05/31(木) 17:29:46 ID:???
ごめん
書いた後に気づいた
@で解決した
968nobodyさん:2007/05/31(木) 20:33:38 ID:???
教えてください。

foreach内でcaptureしたものを配列にして、
html_tableで表示させたいのですが、どうしても
captureで読み込んだものを配列できません。
どうすればテンプレート内で配列にすることができますか?

{foreach from=$item key='key' item='val' name='Loop'}
{capture name='val' assign='row'}
{$val.id}<br>
{$val.word}
{/capture}
{/foreach}

↑$rowに$itemで表示する内容を入れて
↓こんな感じで表示させたい

{html_table loop=$row cols='4'}
969nobodyさん:2007/06/01(金) 12:22:12 ID:???
どうしてもできないって,どんな方法を試したん?
970968:2007/06/01(金) 15:34:39 ID:???
こんな風にしたり。
{capture name='val' assign=row[$key]}

foreach内にこんな感じで入れてみたり。
{assign var="row" value=$smarty.capture.row}
971nobodyさん:2007/06/13(水) 13:16:13 ID:CAn4D9tB
$fuga['hoge'][$foo['bar]] をテンプレートで表現するにはどうすればいいですか?

$fuga.hoge.$foo.bar では通らないらしい
972nobodyさん:2007/06/13(水) 16:26:42 ID:CAn4D9tB
>>971 自己レスですが
$fuga.hoge[$foo.bar] で通りますた

$fooは連想配列だけどいいのかなあ・・・
973nobodyさん:2007/06/14(木) 13:10:19 ID:41cbMn19
最近ページが出るのが重くて
レンタル先に問い合わせたら、Smarty使ってるせいっていわれたらしんですけど
そんなことってありますか?
Smartyってキャッシュするから他のテンプレートエンジンより高速っていいますよね?

なんかApacheのキャッシュがSmartyと相性が悪いって、いわれたらしいんですけど・・・

もちろん専用サーバーなので、他のサイトのせいで重いってこともないし、
最初立ち上げたときはそれほどでもなくて
明らかに重くなってるので、プログラムのせいってこともないと思うし。
問い合わせた本人じゃないので詳しくわからなかったんですけど、ApacheとSmartyって相性悪いんですか?

もしかしたらapacheのログのせい?

Apacheの設定でどうにかならないのでしょうか?

どうも、こっちが知らないと思って適当にあしらってる感じがしないでもないOTZ
ヴァキュームとかしてるのかな・・・
974nobodyさん:2007/06/14(木) 13:12:47 ID:???
>>973
初耳
975nobodyさん:2007/06/14(木) 15:34:54 ID:???
>>973
Smartyは確かに軽いライブラリじゃないけど
(xdebugで解析するとメインの業務処理より時間がかかってる場合多し)
体感で重いという程なら他の要因を調べるべき。

秒間何十アクセスとかじゃないんだよね?
Pentium3 500MHzとかのヘボマシンだと、
(Webアプリに大いに依存するけど)
秒間十アクセス程度でキツイ。
976nobodyさん:2007/06/14(木) 23:13:08 ID:???
>>975
ApacheとPHPモジュールならそのマシンでももっともーっと行けるだろ。
普通にGUIログインでクライアントマシンとして利用しながら
サーバー立ち上げてるとか??
977975:2007/06/15(金) 09:10:33 ID:???
>>976
チューニングしないとそんなもんだと思うけど…
OOPしてるからちょっとはオーバーヘッドあるだろうけど、
特に重い処理していないし。

軽いところで、秒間10〜20ぐらい。
APCとか入れると秒間30〜40ぐらいは行ける。
978nobodyさん:2007/06/27(水) 14:31:02 ID:qqHE9rvp
tam(20070624-061801)のアルバム
979nobodyさん:2007/07/02(月) 12:04:34 ID:XrjaoeQ2
ほす
980nobodyさん:2007/07/04(水) 17:25:01 ID:DXXJfQ6l
Smartyにて、テンプレートを使い回す場合はincludeを使用しますよね。
同様に、PHPとテンプレートが対になったパーツの使い回し(例えばblogの最新コメント一覧など)
したい場合は、一般的にはinsertプラグインとして開発するのがベターなのでしょうか?

このあたりの情報ってなかなかありませんね…。
981nobodyさん:2007/07/04(水) 19:40:20 ID:???
>>980
JavaScriptでパーツ部分(例えばblogの最新コメント一覧など)だけ読み込むのが普通かも。
Smarty関係ないけど。
982nobodyさん:2007/07/04(水) 23:37:26 ID:???
>>980
外側にフレームワークを使ってるから、その機能でやっちゃう。
983nobodyさん
>>980
ちゃんとしたフレームワーク使ってなくても、データ取ってきてテンプレートに展開した結果を部品として、HTMLを組み立てるって方法はよくやりますね。
それをまたテンプレート変数にアサインして、外側(レイアウト)のテンプレートに展開するのもありかと。
Smartyオブジェクトを複数生成することになるけど、部品ごとにキャッシュ使ったりテンプレートの格納先を変えたり、応用が効く利点も。
レイアウトはSmartyで、フォーム部分はFlexyってパターンもやったことあります。