【问题标题】:Order of child blocks in HTML_Template_IT - does it matter?HTML_Template_IT 中子块的顺序 - 重要吗?
【发布时间】:2012-03-14 21:11:54
【问题描述】:

我正在开发基于 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”是第一个)时,结果是首先显示所有“无线电”问题,然后是文本字段。所以看起来模板子块中的顺序在某种程度上很重要,但不知道为什么。

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

【问题讨论】:

    标签: php html templates block pear


    【解决方案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 渲染器在输出表单时工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-06
      • 2018-01-09
      • 2017-11-19
      • 1970-01-01
      • 2017-11-18
      • 2012-06-27
      相关资源
      最近更新 更多