[PHP-users 19058]Smartyのバグ?カスタム関数の呼び出しについて

Takeo Matumoto hac20680 @ rio.odn.ne.jp
2003年 11月 23日 (日) 11:04:38 JST


お世話になります。松本と申します。

php-4.3.1 + smartyなのですが、Smartyのカスタム関数を追加、それを
テンプレートページで呼び出し、というところでつまずいてしまいました。

まず、smartyのpluginフォルダに

function smarty_function_effect_start($params, &$smarty){
	
	session_start();//テンプレートファイル内でセッション開始
}


function smarty_function_effect_form($params, &$smarty){

	$_SESSION["page"] = $params["page"];
	$_SESSION["smarty"] = $smarty;
	$valiables = explode(";", params["valiables"]);//フォームで送信される変数の変数名
	

return "<FORM method=POST  action =" ."\".\Effect_Form.php\"" >; 

}

という二つの関数を実装したfunction.effect_start.php,function.effect_form.phpという二つ
のファイルを作成します。

次に、

Effect_Form.php

<?php
	
	session_start();
	$smarty = _$SESSION["smarty"];
	$page = _$SESSION["page"];
	$valiables = _$SESSION["valiables"];
	
	//テンプレート変数の登録
	for($i=0 ; $i <= count($valiables)-1 ; $i++){
		
		$smarty->assign($valiabes[$i]);
	
	}

	$smarty->display($page);

?>

のようなPHPスクリプトを作成

テンプレート関数を呼び出すと、HTMLのフォーム
で直接テンプレートページを呼び出すかのような動作を実現
させたいわけです。

ところが、このカスタム関数、PHPスクリプトを使って以下のような
テンプレートファイルを呼び出してみたのですがうまくいきません。

template_test1.tpl

<html>
<body>
テストです
{effect_form page="test2.tpl" valiables="DATA1;DATA2;DATA3;" }
DATA1:<INPUT TYPE=text NAME="DATA1"><BR>
DATA2:<INPUT TYPE=text NAME="DATA2"><BR>
DATA3: <INPUT TYPE=text NAME="DATA3"><BR>
<INPUT TYPE=submit VALUE="送信">
<INPUT TYPE=reset VALUE="取消">
</form>
</body>
</html>

test2.tpl

{effect_start}


<html>
<body>

DATA1:{$DATA1}<br>
DATA2:{$DATA2}<br>
DATA3:{$DATA3}<br>

{effect_form page="template_test3.tpl" }
<INPUT TYPE=submit VALUE="登録">
{effect_form_end}

</body>
</html>

template_test.tpl→test2.tplへ、データを転送
(template_test.tpl→Effect_Form.phpへpost
Effect_form.php→test2.tpl テンプレート変数登録)
を意図しているのですが、

test2.tplを表示するとき、

Fatal error: Call to undefined function: smarty_function_effect_start() 
in E:\java\eclipse-SDK-2.1.1-win32\eclipse\workspace\EFFECT-ON-PHP\templates_c\%%103\%%1035012651\test2.tpl.php on line 5

のようなエラーが表示され、Smartyのカスタム関数呼び出しができません。

template_test.tplを実行するときは問題なく動作するのですが、
test2.tplの実行時にエラーが出るのです。

template_cフォルダの中身(テンプレートファイルのコンパイル後ファイル)も覗いてみましたが
原因が特定できません。(↓その中身)

<?php /* Smarty version 2.6.0, created on 2003-11-23 08:51:53
         compiled from test2.tpl */ ?>
<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.load_plugins.php');
smarty_core_load_plugins(array('plugins' => array(array('function', 'effect_start', 'test2.tpl', 1, false),array('function', 'effect_form', 'test2.tpl', 11, false),array('function', 'effect_form_end', 'test2.tpl', 13, false),)), $this); ?>
<?php echo smarty_function_effect_start(array(), $this);?>



<html>
<body>

DATA1:<?php echo $this->_tpl_vars['DATA1']; ?>
<br>
DATA2:<?php echo $this->_tpl_vars['DATA2']; ?>
<br>
DATA3:<?php echo $this->_tpl_vars['DATA3']; ?>
<br>

<?php echo smarty_function_effect_form(array('page' => "template_test3.tpl",'execute' => 'testdataset'), $this);?>

<INPUT TYPE=submit VALUE="登録">
<?php echo smarty_function_effect_form_end(array(), $this);?>


</body>
</html>


自分でもいろいろ試行錯誤してみましたがどうしても解決できませんでした。
どうか皆様ご教授願えませんでしょうか?
長文失礼しました。



PHP-users メーリングリストの案内