TOOL更新_viewをsmartyで。の続き。smarty_modifierに配列を渡すと。・・・思ったのと動きがちがう。
TOOL更新_viewをsmartyで。の続き。smarty_modifierに配列を渡すと。・・・思ったのと動きがちがう。
1.logininfoListView.htmlで使った{{if $err|smarty:nodefaults|kaz_chk_error == false }}が、実行時エラーになる。・・・調べた結果。smarty_modifierに配列を渡すとその配列のvalueにsmarty_modifierした結果を戻すということがわかった。・・・・ということで、この($err|smarty:nodefaults|kaz_chk_error)というやり方は、的外れだった。
正解はまたあした。・・・考えることにする。<=5/25 『smarty_modifier_kaz_chk_error』をボツにして『smarty_function_kaz_chk_error_assign』を作った。
2.これは、以下のsmartyコンパイル結果を見るとわかる。 「 $this->_run_mod_handler」を使っている。これにより「Smarty modifier plugin」に与えらパラメータがarrayのときは、arrayの中身一つ一つを「function smarty_modifier_kaz_chk_error()」で処理してarrayを戻している。
■smartyコンパイル結果。%%42^420^42085E26%%logininfoListView.html.php抜粋 配列と配列以外で処理を分けていて、パラメータがarrayのとき_run_mod_handlerしている。 ↓ <?php if (((is_array($_tmp=$this->_tpl_vars['err'])) ? $this->_run_mod_handler('kaz_chk_error', true, $_tmp) : smarty_modifier_kaz_chk_error($_tmp)) == false): ?>
3.今回作成した以下の「function smarty_modifier_kaz_chk_error($err)」
は$errがarrayであることを前提にしている。のでエラーになる。
■AppSmartyPlugin.php <=自作smartyプラグインから抜粋 この関数は、使い物にはなりません。(今日の文章を読んでくれればわかります。)<=5/25 これはボツにした。 /** * ------------------------------------------------------------- * Smarty {kaz_chk_error} modifier plugin * * Type: modifier<br> * Name: kaz_chk_error<br> * Purpose: AppCheckUtil::chkErrorでチェックした結果を戻します。 * @param array * @return boolean * ------------------------------------------------------------- **/ function smarty_modifier_kaz_chk_error($err) { require_once('AppCheckUtil.php'); return AppCheckUtil::chkError($err); }
4._run_mod_handlerを抜粋。arrayの中身が一つ一つを「smarty_modifier」で処理してarrayを戻してくる。
■Smarty.class.php抜粋 /** * Handle modifiers * * @param string|null $modifier_name * @param array|null $map_array * @return string result of modifiers */ function _run_mod_handler() { $_args = func_get_args(); list($_modifier_name, $_map_array) = array_splice($_args, 0, 2); list($_func_name, $_tpl_file, $_tpl_line) = $this->_plugins['modifier'][$_modifier_name]; $_var = $_args[0]; foreach ($_var as $_key => $_val) { $_args[0] = $_val; $_var[$_key] = call_user_func_array($_func_name, $_args); <= ここでarrayの中身が一つ一つを「smarty_modifier」で処理している。!! } return $_var; }
5/24 22:00-3:00
5/25 23:10-23:20 <=5/25 『smarty_modifier_kaz_chk_error』をボツにして『smarty_function_kaz_chk_error_assign』を作った。