kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_viewをsmartyで。の続き。smarty_modifierに配列を渡すと。・・・思ったのと動きがちがう。

TOOL更新_viewをsmartyで。の続き。smarty_modifierに配列を渡すと。・・・思ったのと動きがちがう。
1.logininfoListView.htmlで使った{{if $err|smarty:nodefaults|kaz_chk_error == false }}が、実行時エラーになる。・・・調べた結果。smarty_modifierに配列を渡すとその配列のvaluesmarty_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』を作った。