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

【PHP】Smarty【Template】

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

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

日本語マニュアルとか
http://sunset.freespace.jp/smarty/
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 さんのアドバイスが
良く分かっていません。
ヒントへのポインタでも結構ですのでアドバイスをお願いできますでしょうか??
036736604/03/11 16:11ID:???
言い忘れていました、header の部分も、ページごとに動的に変化します。
今のところ<title>xxxx</title> に表示するデータの一部を入れているだけですが。。。
0368nobodyさん04/03/12 01:00ID:9XQjrMWL
最新のPHP+SmartyでSafe modeをonにすると...
pluginsがエラーになるんですけど...
ちなみにSmartyは/usr/local/lib/php/Smarty/以下にインストール
しています。オーナーはrootです。
アプリのオーナーはroot以外のユーザーです。

プログラムは{html_options}のリファレンスのサンプルです。
エラーメッセージは
Fatal error: Smarty error: [in XXXXXXXX.tmpl line nn]: [plugin] unknown tag - 'html_options' (core.load_plugins.php, line 118) in /usr/local/lib/php/Smarty/Smarty.class.php on line 1102

Safe mode系のエラーの場合は
SAFE MODE何たらかんたらとかuid/gidがなんたらというメッセージが多いと思うんだけど...

アプリのオーナーをrootにしたりSafe modeをOffにすると正しく動くのよね。
php.iniがいけないのかなぁ?
0369nobodyさん04/03/12 13:35ID:???
>>366
自分でテンプレートもPHPのコードも書くならどっちでもいいんじゃないすか?
0370nobodyさん04/03/12 21:47ID:???
>>366
Smartyのサブクラスを作成(例:mySmarty)して、
親クラスのメソッド:display()をサブクラスでオーバーライドしれば?

mySmartyの生成時にヘッダ・フッタのデータを渡して、
$mySmarty->display()したときにmySmarty内部で、
ヘッダ・フッタをassignして、親クラスのdisplay()を呼ぶみたいな。
0371nobodyさん04/03/13 00:31ID:???
>>366
main.php では、
func_assign_header();
func_assign_footer();
$smarty->display('main.tpl');

main.tlp 内で、
{include file="header.tpl"}
{include file="footer.tpl"}

僕ならこうする。
どうするのが良い悪いよりは好みの問題でしょうね
0372nobodyさん04/03/15 13:25ID:???
>>366

先週から使い始めました。

header.tlp
footer.tlp

上記の2ページの内容or作る人のスタイルにもよると思いますが、
ヘッダー・フッターが静的なHTMLなのであれば、テンプレート側で読み込んだ方が、
テンプレートを作る人のことを考えれば理解しやすいんじゃないでしょうか?

テンプレート作る人が、呼び出し元のPHPを読まないと、
ページ構成を理解できないっつうのは、Smartyの利点を1つ殺してる気もするし・・・
0373nobodyさん04/04/20 02:11ID:???
Smarty plugin のpager
http://smarty.incutio.com/?page=pager
これの使い方が今ひとつ分かりません。どなたかヒントいただけないでしょうか?
0374nobodyさん04/04/20 19:31ID:???
PEARのPagerとかDB Pagerを参考にしてみたら
使った事ないからなんともいえないけど
037537304/04/21 14:27ID:???
アドバイスありがとうございます。PEAR の方を見ながらいろいろと試行錯誤してみました。
今のところ次の方法で使えてます。

基本的には
{pager rowcount=レコード総数 limit=ページ内に表示する数 txt_first=""}
で、各ページへのリンクがずらずらと並びます。

細かなパラメータは、
show='page' or 'record'  //表示される数値をページ数とするかレコード数とするか
posvar='now_page'  //現在位置を識別するための変数名
forwardvars=$forwardvars  //$forwardvars=array("hl"=>"ja","lang"=>"lang_ja") など、
ページ間で引き継ぎたい変数と値
txt_prev='<<<' //「前のページ」
txt_next='>>>' //「次のページ」
separator='-' //ページorレコード数の区切り文字
shift='1' //posvar の初期値
・・・等々

なお、こちらで使用しているスクリプトとの兼ね合いから、function.pager.php の142 行目の
!empty($value) をisset($value) に変更する必要がありました。注釈文にあるように、
$_REQUEST で変数を受け取るなら変更は必要ないのかも知れません。

で、一応使えるようにはなったのですが、参考にしたPEAR/Pager のほうが使いやすそうですね。
Smarty との連携をどうすれば良いのかまだちょっと見えていないのですが・・・。
#PEAR のDB_Pager って今後はDB_common::limitQuery() の方を使うほうが良いのかな??
0376nobodyさん04/04/21 17:55ID:???
>>375
limitQueryでもlimitつけたSQLでも同じなんだけど
SQLの時点でlimitをつけちゃうと実質の総レコード数が取れない
25レコードあったとしてlimit 10, 20のクエリでnumrowsすると10が返って来る
ページャのロジック書こうとすると総件数がいる
DB_Pagerの便利なとこは引数投げるとfrom-limit間のレコードだけを
fetchする状態の結果セットを返してくれる
だから俺はDB_Pager使ってる
0377nobodyさん04/04/23 13:02ID:???
{section} のネストをうまく動作させることが出来ません。

{section name=book loop=$main_dat}
{$main_dat[book].name}
{$main_dat[book].memo}
  {section name=book_sub loop=$sub_dat[book]}
  abc
  {$sub_dat[book][book_sub].job}
  {$sub_dat[book][book_sub].personid}
  {$sub_dat[book][book_sub].name}
  {/section}
<br>
{/section}
section の例を見ながら↑のようにしてみたのですが、内側のループが実行されません。
元になるphp 側では、
while ($i < $num) {
  $main_dat = $result[$i];
  $smarty -> append("main_dat", $main_dat);
  $j = 0;
  while ($j < $sound_sub_num) {
    $sub_dat = $result_sub[$j];
    $smarty -> append("sub_dat[$i]", $sub_dat);
    $j++;
  }
  $i++;
}
こんな感じでassign しています(こまかな処理は省略しています)。
037837704/04/23 13:03ID:???
また、{debug} でみると変数には
{$main_dat}
Array (2)
0 => Array (3)
id => 266
name => fmlバイブル
memo => empty
1 => Array (3)
id => 267
name => PostgreSQL完全攻略ガイド
memo => empty
{$sub_dat[0]}
Array (2)
0 => Array (3)
personid => 2437
name => 深町某
job => 著者
1 => Array (3)
personid => 358
name => 佐々木某
job => 監修
{$sub_dat[1]}
Array (2)
0 => Array (3)
personid => 291
name => 石井某
job => 著者
1 => Array (3)
personid => 648
name => 山本某
job => 出版
こんな感じに表示されます。
037937704/04/23 13:04ID:???
php から渡された変数には値が入っているので、ループ無しで直接{$sub_dat[0][0].job} としても表示されませんでした。
バッククォートあたりだとは思うのですが{`$sub_dat[0][0].job`} とすると
syntax error: unrecognized tag のFatal error が出てしまいます。

アドバイスをお願いできますでしょうか? 長文ごめんなさい。
038037704/04/23 13:42ID:???
あああ。。。
{$sub_dat}
 Array (2)
  0 => Array (2)
   0 => Array (3)
    personid => 2437
    name => 深町某
    job => 著者
   1 => Array (3)
    personid => 358
    name => 佐々木某
    job => 監修
  1 => Array (2)
   0 => Array (3)
    personid => 291
    name => 石井某
    job => 著者
   1 => Array (3)
    personid => 648
    name => 山本某
    job => 出版
こうならないとsection の例文は使えないんですね。すっかり煮詰まってました。
php 側をちょっと直せばできそうです。うう、、、スレ汚し済みませんでした。
0381nobodyさん04/05/14 17:14ID:???
smartyって、
外部ファイルを書き出すことはできますか?
038238104/05/14 19:38ID:???
あるいは、PHP版HTML::Templateで外部ファイルを書き出すことはできなすか?
0383nobodyさん04/05/14 20:12ID:???
>>381
出力せずに一旦変数へ取り込んで、書きだしゃいいだろ。
038438104/05/15 01:31ID:???
いったん変数にとりこむって、どうすればいいのでしょうか?
$smarty->displayだと、出力しちゃいますよね。。。
0385nobodyさん04/05/15 01:50ID:???
いくらなんでもマニュアル読まなさ杉
せっかく日本語であるのに
038638104/05/15 02:01ID:???
をを、みのがしていた、
// 出力を取り込む
$output = $smarty->fetch("index.tpl");
ですね。ありがとうございました。
0387nobodyさん04/06/06 14:52ID:???
smartyは配列の使い方が面倒だなぁ。
連想配列はまだいいんだけど。
0388nobodyさん04/06/10 14:49ID:???
ttp://www.phpinsider.com/php/code/SmartyFormtool/
のformtool_move, formtool_moveallを使いたいんだけど、

The "save_from" and "save_to" parameters are the names of a hidden fields in the form that the new orders are saved into, comma separated.

この文の意味が理解できない。orz
FORMを作るときに"save_from" と "save_to"という名前を持つ hidden フィールドを
作れということ?NAMEはいいとしてVALUEには何を入れるのだろうか?


0389nobodyさん04/06/10 19:33ID:???
試さずにカキコ。

>>388 例題をそのまま入力して{debug}したら何か分かったりしませんか?
0390nobodyさん04/06/10 20:03ID:???
>>389
例題をそのまま試すと、テーブルは表示されるのですが、中のボタンが表示
されるところで、

Warning: Smarty error: formtool_moveup: missing 'save_from' parameter
in C:\Apache\Smarty\Smarty.class.php on line 1102

というWarningがでます。
0391nobodyさん04/06/11 15:12ID:???
ちょっとだけ試してカキコ

{formtool_moveall from="colors5[]" to="colors6[]" save_from="dd" save_to="ff" button_text=">>"}
のように{formtool_moveall ・・・} と{formtool_move ・・・} の中に、
save_from="dd" save_to="ff"
を入れておくと取りあえずmove は出来るようだ。

dd, ff はjavascript で
<input type=button value="<<" onClick="formtool_moveall(this.form.elements['colors6[]'],this.form.elements['colors5[]'],this.form.elements['dd'],this.form.elements['ff'])">
のように展開されるので、適切なものに変更すれば良さそう。

javascript は詳しくないので、あとは調べて還元してくれると嬉しい。
0392388=39004/06/11 16:54ID:???
>>391
お手数おかけしましてすみません。

demo画面のソースをみると、ddやffはcolors5_saveやcolors6_saveなんかに
置き換えると良さそうです。
しかし、実行してみるとページエラーが発生してmoveができませんでした。
JavaScriptコンソールでみるとformtool_moveは定義されてないとエラーが
でています。

私もJavaScriptはよくわからないのですが、この機能は是非使いたいので
調べてみます。
0393nobodyさん04/06/11 17:24ID:???
.tpl ファイルに
{formtool_init src="/hoge/javascripts/formtool.js"}
は入れた? パスは適宜直してね。
0394388=39004/06/11 18:04ID:???
>>393
動きました!

javascriptへのパスが一文字間違ってました。
どうもありがとうございました。
0395nobodyさん04/06/28 15:15ID:???
PHP 質問スレッドの方から誘導されて来ました。
過去ログさらってみましたが見あたらないので質問をば。
--

Smarty を久々にバージョンアップした所、動作が変わって対処に悩んでまつ。

定義されていないテンプレート変数、例えば {$hoge} に assign が無ければ、
以前はスキップしてくれたのですが、バージョンアップ後は
>FATAL .. Undefined index hoge
とエラーを吐いています。
いちいち {if isset($hoge)} と囲うのも鬱陶しく、どう対処すべきかな〜、と。

# Smarty の設定かと思いマニュアル見直しましたが適当な設定は見あたらず。
# $smarty->undefined = NULL とかも試しましたが変化無しでした。
0396nobodyさん04/06/28 15:55ID:???
>395
違うかもしれんが、
{$hoge|default:""}
でいいんでないかい?
039739504/06/28 16:08ID:???
>>396
if で囲むよりそちらの修正子の方が分かりやすいですね。
取り敢えずそちらで逃げる事にします。
謝謝。
039839604/06/28 16:51ID:???
HelpのTips & Tricksにも書いてあるけど、
テンプレートの最初のほうとかに
{assign var="hoge" value=$hoge|default:""}
見たいに書いとくとすっきりするかもね。
単発で使うのなら{$hoge|default:""}でよさげ。
0399nobodyさん04/06/28 23:20ID:???
もうこうなっちゃうと
テンプレートというより新しい言語のようだ。
乗り換えることにする。
0400nobodyさん04/06/29 00:19ID:???
>>399
どんな優れたライブラリでも、使い方次第で単純にも煩雑にも書けるわけで。
smartyにいたってはテンプレートにロジックを書く事を許容しちゃってるので
mvc(もう少し適切な言葉がありそうだな・・・)を意識しないとsmartyを
使用する有り難味が薄れるだろうね。まぁ俺はとっくに乗り換えたんだけれど・・・。

>>395
$smarty->undefined はもう無くなったよ。未定義の場合は基本的にnullで決めうちになった。
ただ、テンプレート変数のtypoがあった場合に何も表示されないだとデバッグに困るから
$smarty->debugging = true; の時だけエラーが出るようになってる。
だからこれをfalseにしたらどう?一応2.6.3で確かめてみたところ大丈夫だったが。
040139504/06/29 02:54ID:???

>>400
情報感謝。
で、勘違い爆裂でしたので経過報告 _| ̄|◯

コンパイル後に生成されるコードはそれぞれ
修正子有り <?php echo $this->_tpl_vars['hoge']; ?>
修正子無し <?php echo ((is_array($_tmp=@$this->_tpl_vars['hoge'])) ? $this->_run_mod_handler('default', true, $_tmp, 'funi') : smarty_modifier_default($_tmp, 'funi')); ?>

で、旧バージョンの Smarty でも確認してみると生成されているコードは同じ、、という事は Smarty の問題ではない。
同じマシン上で PHP も php.ini も同じ物を使用していて両者の違いは、と言えば採用している他のライブラリ。
結局原因は Mojavi のエラー制御にある模様。
お手数かけますた、、

PHP 4.3.4 (Win)
Smarty 2.6.3

>>399,400
よろしければ遷都先のテンプレートなぞを、、
自分は次は Flexy 使ってみようかな、とか考えとります。
040240004/06/29 03:57ID:???
>>401
生成されるコードに違いはなくても、debugging = false した時に
fetchメソッドの内で error_reporting() & ~E_NOTICE されるようになってるんだけど。
mojaviはE_ALL前提で作られてるし、(ていうかコードの初っ端がerror_reporing(E_ALL);)
途中でエラーレベルも変更したりしないから、やっぱsmartyか原因かと思うんだけど・・・違う??
040339504/06/29 05:20ID:???
>>402
勉強になります。

Mojavi を使っていない方のアプリケーションの Smarty を 2.6.3 に入れ替えてみた所、問題は発生しませんでした。
って事でやはり Mojavi かな、と。。

> fetchメソッドの内で error_reporting() & ~E_NOTICE されるようになってるんだけど。

Mojavi によりエラーハンドラに errorLogger::standard() が設定されており、
件の <?php echo $this->_tpl_vars['hoge']; ?> で E_NOTICE レベルのエラーが発生し上記エラーハンドラが呼ばれています。
で、E_USER_* 以外の振り分けが考慮されておらず、errorLogger::fatal に回されて FATAL として解釈され、
FATAL ..(snip).. undefined index
のようなエラーメッセージが出力されている模様。

errorLogger::standard() の中で error_reporting の値をとってみると 2039 になっており E_ALL ^ E_NOTICE と等価でした。
php.ini と mojavi では error_reporting に E_ALL を指定しています。

眠くてまとまらないのですがこんな所で、、

# 問題が Smarty にあると思い込んで突っ走ってしまったのが敗因、、orz
# でも色々と助言をいただき良い勉強の機会になりました。多謝です&お手数かけました。
0404nobodyさん04/07/06 17:04ID:???
PHP二年やってきて今更PEARとSmarty使ってコーディングしてみたんだけど、これはすごいね。
俺のアドレナリンが吹き出る。

あとはPHP エディタで対応してくれれば文句なしー。
0405nobodyさん04/07/14 10:40ID:???
>>388のSmartyFormtoolですが、Javascriptがおかしいですね。

何かをセレクトして右から左へ移動…1
何もセレクトせず左から右へ移動…2

1のときと1+2のときでフォームから送られてくる値が違う
(2の操作で値全体が入れ替わってしまう)。
Javascriptがわかれば直すんだけど…

0406nobodyさん04/07/17 11:11ID:ckMFe6vn
Smartyのwordwrapは日本語にかけても大丈夫でしょうか?
エンコードはUTF-8を使ってます。
0407nobodyさん04/07/17 11:38ID:???
>>406
かけてみた?
040840604/07/17 12:16ID:???
>>407
いくつかの文章で試してみました。
EUC-JPの時は文字化けしてたけど、UTF-8なら一見すると大丈夫かと思ったら
よく見ると文字が一部消えたりしてました。やっぱダメそうですね。
0409nobodyさん04/07/22 17:59ID:gMMxLyKo
たまにはageてもいいじゃない
やまない雨はないじゃない
0410nobodyさん04/08/01 00:39ID:QU2e9+ue
一つ聞いてやるSmartyなんか使わなくてもMVCはできるだろぉう?
なんで、みんなSmaryマンセーなの?
0411nobodyさん04/08/01 04:46ID:???
態度が気に喰わない
0412nobodyさん04/08/01 08:44ID:QU2e9+ue
>411
えー、そんな事言わずに教えてよぉー。
■ このスレッドは過去ログ倉庫に格納されています