HTML_Template_IT中子块的顺序 - 这有关系吗?

时间:2012-02-24 12:02:05

标签: php html templates block pear

我正在研究简单的基于php的调查生成器。它只是从数据库中获取问卷,并在页面上创建适当的表单。对于模板我正在使用PEAR HTML_Template_IT(1.3),我偶然发现了一个有趣的'功能'。

假设我们的模板具有嵌套结构,如下所示:

<!-- BEGIN questionnaire -->

  <!-- BEGIN question.T -->
  {question} <input type="text" .... />
  <!-- END question.T -->

  <!-- BEGIN question.R -->
  {question}

    <!-- BEGIN question.R.answer -->
    <input type="radio" .... /> {option}
    <!-- END question.R.answer -->

  <!-- END question.R -->

<!-- END questionnaire -->

你可以想象我对不同类型的输入字段有类似的块。

现在这里有趣的事情。当我尝试显示字段时,我注意到它们以奇怪的方式显示。首先,我将有文本块,最后是无线电组的所有问题。当我强制我的代码只使用question.T(例如)来显示问题然后订单就好了,但当我到达Radio,Select,Checkbox块(它们都有内部'回答'块)排序似乎是不再存在所以我的假设是它与模板结构有关。有趣的是,当我在模板中交换块顺序(“question.R”是第一个)时,结果是所有“Radio”问题首先显示在文本字段中。所以看起来模板子块中的顺序在某种程度上很重要,但不知道为什么。

有没有人偶然发现这种行为?

1 个答案:

答案 0 :(得分:1)

您需要parse()内部区块,例如question.Tquestion.R,然后解析外部questionnaire区块。

如果您将此模板重写为PHP而不是IT语法,它将如下所示

foreach ($questionnaire as $q) {
    if ('text' == $q['type']) {
        // output text field
    } elseif ('radio' == $q['type'] {
        // output radio buttons
    }
}

所以基本上你必须驱动foreach循环。看看如何输出表单时,HTML_QuickForm package中的ITDynamic渲染器可以正常工作。