Smartyを使用し画面出力を行おうとしていますが実際に見てみると一切Smartyによってアサインした項目が表示されずテンプレートのみが表示されるといった状態です。


下記のユーザー定義関数内の$fileを別ファイルの$smarty->display($file)により出力しています。もしかしてPHPのバージョンの問題なのかなと思っているのですが、、、ちなみに当方の環境はPHP Version 4.3.10です

~中略~
function login_screen($option){
$form = $option['form'];
$smarty = $option['smarty'];
//$systemflg= $option['systemflg'];

$file = 'login.tpl';
$smarty->assign('title', 'タイトル名');

$form->addElement('text', 'username', 'ユーザー名', array('size' => 15, 'maxlength' => 50));
$form->addElement('password', 'password', 'パスワード', array('size' => 15, 'maxlength' => 50));
$form->addElement('submit','submit','ログイン');

return $file;
}
~中略~

回答の条件
  • 1人5回まで
  • 登録:2007/04/23 15:46:13
  • 終了:2007/04/30 15:50:03

回答(5件)

id:inokuni No.1

いのくに回答回数1343ベストアンサー獲得回数212007/04/23 16:06:46

ポイント20pt

function login_screen() の外 OR 前で

$option['smarty'] = new Smarty;

とでもされているでしょうか?$optionの内容が気になります。


変数のスコープがちぐはぐな感じがしないでもないです。

id:jayz

毎度回答ありがとうございます

$option['smarty']については、このユーザー定義関数を読み込む前の段階でnew Smartyが代入されています(その他の$option内の変数も同じで、例えば$formにはnew HTML_QuickForm()が代入されています)

参考書のソースなのであまり?間違いはないと思うのですが、いかんせんSmaryにセットした値が表示されずに、テンプレートのみ表示されるというのは・・・

2007/04/23 16:19:37
id:vector_xenon No.2

vector回答回数113ベストアンサー獲得回数42007/04/23 16:28:50

ポイント20pt

恐らくスコープの問題でしょう。

引数で$optionを渡しているようですが、参照渡しではないため、

$option['smarty']

は、別のオブジェクトとなります。


テンプレートのみ表示されるのは、 別の関数で(別のSmartyオブジェクト)でdisplay($file)しているので、

function login_screenにてセットされた値はなくなっています。


恐らく

function login_screen(&$option)
{
}

のように引数を参照渡しにするとウマくいくと思われます。

id:jayz

回答ありがとうございます。教えていただいたものを試してみましたがだめなようです。

(文法エラーになってしまいました)

一応ソースが落とせますので余裕のある方はお願いします

http://book.mycom.co.jp/support/bookmook/PHP/

上記URLよりファイルをダウンロードしSection72-81フォルダ内に今回お聞きしているソースがあります。(build_screen.inc.php)

2007/04/23 16:46:12
id:vector_xenon No.3

vector回答回数113ベストアンサー獲得回数42007/04/23 17:50:53

ポイント20pt

&が&になってしまっていましたm_m

正しくは

function login_screen(&$option)

{

}

です。

id:jayz

ありがとうございます。"&"でもだめなようです。

どうやらスコープの問題ではなさそうですね

最初に貼り付けた関数内から$option、$form、$smaryなんかをvar_dumpとかしてみたんですが配列もしくは、オブジェクトが格納されています。

どうやら$smarty->display($file)時に下記の内容がセットされていないようなのですが・・・

$smarty->assign('title', 'タイトル名');

$form->addElement('text', 'username', 'ユーザー名', array('size' => 15, 'maxlength' => 50));

$form->addElement('password', 'password', 'パスワード', array('size' => 15, 'maxlength' => 50));

$form->addElement('submit','submit','ログイン');

どなたかわかりませんか?

2007/04/24 12:30:38
id:vector_xenon No.4

vector回答回数113ベストアンサー獲得回数42007/04/24 13:42:30

ポイント20pt

環境はPHP4でしょうか?

であれば、


function login_screen(&$option){

$form = &$option['form'];

$smarty = &$option['smarty'];

}


PHP4ではクラスのコピーの仕方がPHP5とは違うため、

$form = $option['form'];

としても、ディープコピーになるため、違うオブジェクトになります。


また同様に、引数も参照で渡さないとコピーされたオブジェクトが渡ってしまいます。

id:tobeoscontinue No.5

tobeoscontinue回答回数213ベストアンサー獲得回数532007/04/24 22:14:56

ポイント20pt

smartyはsection72-81/php_libs/config/config.inc.phpの

	define( "_SMARTY_TEMPLATES_DIR", 	_PHP_LIBS_DIR . "smarty/templates/");

	define( "_SMARTY_TEMPLATES_C_DIR", 	_PHP_LIBS_DIR . "smarty/templates_c/");

	define( "_SMARTY_CONFIG_DIR", 		_PHP_LIBS_DIR . "smarty/configs/");

	define( "_SMARTY_CACHE_DIR", 		_PHP_LIBS_DIR . "smarty/cache/");

とあるように4つのディレクトリーが必要です。内_SMARTY_TEMPLATES_C_DIRと_SMARTY_CACHE_DIRは書き込み権限が必要です。(php_sampleにはこれらが無い)

書き込む場所がないためsmartyはlogin.tplを展開することができず、そのまま出力しているのではないでしょうか。

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません