Php HTML_模板_IT中子块的顺序-这有关系吗?

Php HTML_模板_IT中子块的顺序-这有关系吗?,php,html,templates,block,pear,Php,Html,Templates,Block,Pear,我正在开发简单的基于php的调查生成器。它所做的只是从DB获取调查问卷,并在页面上创建适当的表单。对于模板,我正在使用PEAR HTML_Template_IT(1.3),我偶然发现了一个有趣的“特性” 假设我们有一个嵌套结构如下的模板: <!-- BEGIN questionnaire --> <!-- BEGIN question.T --> {question} <input type="text" .... /> <!-- END

我正在开发简单的基于php的调查生成器。它所做的只是从DB获取调查问卷,并在页面上创建适当的表单。对于模板,我正在使用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 -->

{问题}
{问题}
{option}
正如您可以在immagine中看到的,对于不同类型的输入字段,我有类似的块

现在有趣的事情来了。当我试图显示字段时,我注意到它们以一种奇怪的方式显示。首先,我将有文本块,并在最后所有的问题与广播组。当我强制我的代码只使用question.T(例如)来显示问题时,顺序就很好了,但是当我进入收音机时,选择复选框块(都有内部的“答案”块)顺序似乎不再存在。所以我的假设是,这与模板结构有关。有趣的是,当我交换模板中的块顺序(“question.R”排在第一位)时,结果是所有的“Radio”问题都先显示,然后是文本字段。因此,似乎模板子块中的顺序在某种程度上很重要,但不知道为什么

有人偶然发现过这种行为吗?

你需要
解析()
question.T
question.R这样的内部块,然后解析外部
问卷

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

foreach ($questionnaire as $q) {
    if ('text' == $q['type']) {
        // output text field
    } elseif ('radio' == $q['type'] {
        // output radio buttons
    }
}
因此,基本上您必须驱动
foreach
循环。例如,在输出表单时,查看ITDynamic renderer in的工作原理。

您需要
parse()
question.T
question.R
这样的内部块,然后解析外部
问卷

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

foreach ($questionnaire as $q) {
    if ('text' == $q['type']) {
        // output text field
    } elseif ('radio' == $q['type'] {
        // output radio buttons
    }
}
因此,基本上您必须驱动
foreach
循环。查看例如ITDynamic渲染器在输出表单时的工作方式