phpbb,源码分析 模板引擎,工具书
<dd><a
href="#f{faq_block.S_ROW_COUNT}r{faq_block.faq_row.S_ROW_COUNT}">{faq_block.faq_row.FAQ_QUESTION}</a></dd>
<!-- END faq_row -->
</dl>
<!-- END faq_block -->
我们再来看php代码中是如何实现赋值到模板的,请看下面的代码
// Pull the array data from the lang pack
$help_blocks = array();
foreach ($user->help as $help_ary)
{
if ($help_ary[0] == '--')
{
$template->assign_block_vars('faq_block',
array(
'BLOCK_TITLE'=>
$help_ary[1])
);
continue;
}
$template->assign_block_vars('faq_block.faq_row', array(
'FAQ_QUESTION'=> $help_ary[0],
'FAQ_ANSWER'=> $help_ary[1])
);
}
可以看到对’faq_block.faq_row’的block赋值和对’faq_block’,前者赋值后的模板代码就会有两层嵌套的循环,而前面只有一层。所以{faq_block.BLOCK_TITLE}是在第一层循环里面,第二层循环里面存取的是’FAQ_QUESTION’和’FAQ_ANSWER’的值。需要用{faq_block.faq_row.FAQ_QUESTION}的形式将其取出。通过以上一个简单的例子的讲解,其实我相信应该已经很明了了讲明了phpbb3模板引擎中一个很重要的功能,就是数组(嵌套数组)的赋值功能。代码中也示例如何使用assign_block_vars赋值的数组值。
再回到destroy_block_vars函数,首先函数先判断传入参数(需要被销毁的block变量名字)是否含有”.”,如果没有”.”那么意味着只要简单的去掉$this->_tpldata[$blockname]就够了。如果找到了”.”,那么需要麻烦一点,需要递归销毁。phpbb3是用下面的代码实现的
// Nested block.
$blocks = explode('.', $blockname);
$blockcount = sizeof($blocks) - 1;