PHP模板标签解析:{block:category type="child"}
这个是正常的写法。
解析block部分代码片段如下:
//解析设置数组并生成执行函数
$config_arr = array();
preg_match_all('#([a-zA-Z_]\w*)="(.*?)" #', $config.' ', $m);
foreach($m[2] as $k=>$v) {
if(isset($v)) $config_arr[strtolower($m[1][$k])] = addslashes($v);
}
unset($m);
$func_str = 'block_'.$func.'('.var_export($config_arr, 1).');';
希望能支持变量传递:
{php}$type="child";{/php}
{block:category type="$type"}
实际上上述代码被解析成:
<?php $type = "child"; ?>
<?php $data = block_category(array (
'type' => '$type',
)); ?>
应该是要修改 var_export 吧~
关于block_category函数参数:
/**
* 分类展示模块
* @param int cid 分类ID 如果不填:自动识别
* @param string type 显示类型 同级(sibling)、子级(child)、父级(parent)、顶级(top)
* @param int mid 模型ID (默认自动识别)
* @param string nocids 排除的分类cid串 多个用英文逗号隔开
* @param int limit 显示几条
* @param int life 缓存时间
* @return array
*/
function block_category($conf) {
global $run;
// hook block_category_before.php
$cid = isset($conf['cid']) ? intval($conf['cid']) : _int($_GET, 'cid');
$mid = isset($conf['mid']) ? intval($conf['mid']) : (isset($run->_var['mid']) ? $run->_var['mid'] : 2);
$type = isset($conf['type']) && in_array($conf['type'], array('sibling', 'child', 'parent', 'top')) ? $conf['type'] : 'sibling';
$nocids = empty($conf['nocids']) ? '' : $conf['nocids'];
$limit = _int($conf, 'limit', 0);
$life = isset($conf['life']) ? (int)$conf['life'] : (isset($run->_cfg['life']) ? (int)$run->_cfg['life'] : 0);