|
本帖最后由 zhgc 于 2019-9-11 15:08 编辑
函数结构:
function smarty_block_translate($params, $content, &$smarty, &$repeat) //smarty2
function smarty_block_translate($params, $content, Smarty_Internal_Template $template, &$repeat) //smarty3
判断的官方方法:
- // 只在结束标签时输出
- if(!$repeat){
- if (isset($content)) {
- $lang = $params['lang'];
- // 翻译$content的内容
- return $translation;
- }
- }
复制代码
$repeat默认只有第一次为ture, $content默认第一次为null
1. 研究函数体内smarty的数据类型
加入以下代码,得到类名称
- function smarty_block_nagomenu($params, $content, &$smarty, &$repeat) {
- // Smarty_Internal_Template
- trigger_error(get_class($smarty), E_USER_NOTICE);
- // MySmarty
- trigger_error(get_class($smarty->smarty), E_USER_NOTICE);
- }
复制代码
2. 研究_tag_stack对象
加入以下代码
- function smarty_block_syant($params, $content, &$smarty, &$repeat) {
- echo $content;
- var_dump($smarty->smarty->_tag_stack);
- }
复制代码
模板内容:
{syant aa=1 bb=2}
{wj mm=9}{/wj}
{/syant}
得到的结构:
一层:
array(1) {
[0]=> array(2) {
[0]=> string(5) "syant"
[1]=> array(2) { ["aa"]=> int(1) ["bb"]=> int(2) }
}
}
二层:
array(2) {
[0]=> array(2) {
[0]=> string(5) "syant"
[1]=> array(2) { ["aa"]=> int(1) ["bb"]=> int(2) }
}
[1]=> array(2) {
[0]=> string(2) "wj"
[1]=> array(1) { ["mm"]=> int(9) }
}
}
结论:
1. count来判断层级
$l = count($template->smarty->_tag_stack);
2. 0为名称,1为参数数据
|
|