ecshopテンプレートで定数を参照できる実装方法

1464 ワード

例えば$const.'定数では、これは使えません.
実はテンプレートエンジンは原理的に複雑ではありません.phpの関数、変数、文法構造にいくつかのテンプレートラベルを置き換えただけです.
今回ecshopテンプレートに定数を参照する機能を追加するには、関数make_var()に2行のコードを入れる
 
  
function make_var($val)
{
if (strrpos($val, '.') === false)
{
if (isset($this->_var[$val]) && isset($this->_patchstack[$val]))
{
$val = $this->_patchstack[$val];
}
$p = '$this->_var[\'' . $val . '\']';
}
else
{
$t = explode('.', $val);
$_var_name = array_shift($t);
if (isset($this->_var[$_var_name]) && isset($this->_patchstack[$_var_name]))
{
$_var_name = $this->_patchstack[$_var_name];
}
if ($_var_name == 'smarty')
{
if($t[0] == 'const'){
return strtoupper($t[1]);
}
$p = $this->_compile_smarty_ref($t);
}
else
{
$p = '$this->_var[\'' . $_var_name . '\']';
}
foreach ($t AS $val)
{
$p.= '[\'' . $val . '\']';
}
}
return $p;
}

ここで21-23行は新しく追加され、phpで定義された定数をテンプレートファイルで{$smarty.const.定数}で参照できます.
 
  
21 if($t[0] == 'const'){
22 return strtoupper($t[1]);
23 }