kazpgmの日記

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

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

TOOL更新_viewをsmartyで。の続き。smarty_modifierに配列を渡すと。・・・思ったのと動きがちがう。の続き。
1.昨日の続き。このようにした。
■logininfoListView.html 抜粋
 ★エラーがないとき「管理者用csv出力」を出して検索結果を表示する。エラーのときは両方とも出さない。ということをやるための判定文。

{{kaz_chk_error_assign var='err_flg' err=$err|smarty:nodefaults}}
{{if $err_flg|smarty:nodefaults == false }}{{* // エラーなし *}}
<p class="csv">
<a href="/samples/kaz/admin/logininfo/logininfoA?mode=csv">
{{if $o.c_elements_idx=='0'}}管理者用csv出力{{else}}AdminCsv{{/if}}</a>

 ☆エラーがないときの画面

 ☆エラーのときの画面

smartyコンパイル結果。%%42^420^42085E26%%logininfoListView.html.php

<?php if ($this->_tpl_vars['err_flg'] == false): ?>
<p class="csv">
<a href="/samples/kaz/admin/logininfo/logininfoA?mode=csv">
<?php if (((is_array($_tmp=$this->_tpl_vars['o']['c_elements_idx'])) ? 
$this->_run_mod_handler('escape', true, $_tmp, 'html') : 
smarty_modifier_escape($_tmp, 'html')) == '0'): ?>
管理者用csv出力<?php else: ?>AdminCsv<?php endif; ?></a>

■common.php 抜粋

require_once('AppSmartyPlugin.php');
$smarty->register_function("kaz_chk_error_assign", "smarty_function_kaz_chk_error_assign");
Zend_Registry::set('smarty',$smarty);

■AppSmartyPlugin.php <=自作smartyプラグインから抜粋
 ★テンプート変数にAppCheckUtil::chkError結果を設定している。assignするので「kaz_chk_error_assign」という名前にした。ちょっとながいけど。「・・・ListView.html」ぐらいでしか使わないので、これでも、いいかと思う。このfunctionは値を戻さない。

/**
 * -------------------------------------------------------------
 * Smarty {kaz_chk_error_assign} function plugin
 *
 * Type:     function<br>
 * Name:     kaz_chk_error_assign<br>
 * Input:<br>
 *           - var        テンプート変数
 *           - err        エラー配列
 * Purpose:  AppCheckUtilからchkErrorを取得し、
 *      テンプート変数に値を割り当てる。
 * @param array
 * @param Smarty
 * @return なし
 * -------------------------------------------------------------
 **/
function smarty_function_kaz_chk_error_assign($params, &$smarty)
{
    require_once('AppCheckUtil.php');
    if (empty($params['var'])) {
        $smarty->trigger_error("kaz_chk_error: missing 'var' parameter");
        return;
    }

    if( isset($params['err']) == false){
        $smarty->trigger_error("kaz_chk_error: missing 'err' parameter");
        return;
    }
    $smarty->assign($params['var'], AppCheckUtil::chkError($params['err']));
}

5/25 21:30-23:10 これを書きながらsmartyコンパイル結果を見ていたら、{{if $o.c_elements_idx=='0'}}は{{if $o.c_elements_idx|smarty:nodefaults == '0'}}にしたほうがいいということに気づいた。 <=5/28 この考えはやめよう。サニタイズしても問題がないのならサニタイズしてしまうようにする。サニタイズもれを防ぐため。、、、間違って2重サニタイズしてしまっても。しないよりいいので。