メモ:ecshopテンプレートで定数を参照できるようにする
12729 ワード
ecshopのテンプレートクラスは修正したsmartyだそうですが、個人的には修正ではなく完全に書き換えたような気がします.smartyとテンプレートラベルだけで同じ場所にあり、同時に多くの機能を去勢しています.
例えば$const.'定数では、これは使えません.
実はテンプレートエンジンは原理的に複雑ではありません.phpの関数、変数、文法構造にいくつかのテンプレートラベルを置き換えただけです.
今回ecshopテンプレートに定数を参照する機能を追加するには、関数make_var()に2行のコードを入れる
ここで21-23行は新しく追加され、phpで定義された定数をテンプレートファイルで{$smarty.const.定数}で参照できます.
例えば$const.'定数では、これは使えません.
実はテンプレートエンジンは原理的に複雑ではありません.phpの関数、変数、文法構造にいくつかのテンプレートラベルを置き換えただけです.
今回ecshopテンプレートに定数を参照する機能を追加するには、関数make_var()に2行のコードを入れる
1
function
make_var(
$val
)
2
{
3
if
(
strrpos
(
$val
,
'
.
'
)
===
false
)
4
{
5
if
(
isset
(
$this
->
_var[
$val
])
&&
isset
(
$this
->
_patchstack[
$val
]))
6
{
7
$val
=
$this
->
_patchstack[
$val
];
8
}
9
$p
=
'
$this->_var[\'
'
.
$val
.
'
\']
'
;
10
}
11
else
12
{
13
$t
=
explode
(
'
.
'
,
$val
);
14
$_var_name
=
array_shift
(
$t
);
15
if
(
isset
(
$this
->
_var[
$_var_name
])
&&
isset
(
$this
->
_patchstack[
$_var_name
]))
16
{
17
$_var_name
=
$this
->
_patchstack[
$_var_name
];
18
}
19
if
(
$_var_name
==
'
smarty
'
)
20
{
21 if($t[0] == 'const'){
22 return strtoupper($t[1]);
23
}
24
$p
=
$this
->
_compile_smarty_ref(
$t
);
25
}
26
else
27
{
28
$p
=
'
$this->_var[\'
'
.
$_var_name
.
'
\']
'
;
29
}
30
foreach
(
$t
AS
$val
)
31
{
32
$p
.=
'
[\'
'
.
$val
.
'
\']
'
;
33
}
34
}
35
36
return
$p
;
37
}
ここで21-23行は新しく追加され、phpで定義された定数をテンプレートファイルで{$smarty.const.定数}で参照できます.