我正在研究简单的基于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”问题首先显示在文本字段中。所以看起来模板子块中的顺序在某种程度上很重要,但不知道为什么。
有没有人偶然发现这种行为?
答案 0 :(得分:1)
您需要parse()
内部区块,例如question.T
或question.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渲染器可以正常工作。