Порядок дочерних блоков в HTML_Template_IT - имеет ли это значение? - PullRequest
1 голос
/ 24 февраля 2012

Я работаю над простым генератором опросов на основе 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 -->

Как вымогу себе представить, у меня есть похожие блоки для разных типов полей ввода.

Теперь вот интересная вещь.Когда я пытаюсь отобразить поля, я заметил, что они отображаются странным образом.Сначала у меня будут текстовые блоки, а в конце все вопросы с радиогруппой.Когда я вынуждаю свой код использовать только вопрос.Т (например) для отображения вопросов, тогда порядок просто нормальный, но когда я добираюсь до Радио, выбираю, блоки Флажок (у всех есть внутренние блоки 'ответа') порядокбольше нетПоэтому я предполагаю, что это как-то связано со структурой шаблона.Забавно, что когда я меняю порядок блоков в шаблоне (сначала вопрос «R»), в результате сначала отображаются все вопросы «Радио», а затем текстовые поля.Похоже, порядок в дочерних блоках шаблона как-то имеет значение, но не знаю почему.

Кто-нибудь сталкивался с таким поведением?

1 Ответ

1 голос
/ 28 марта 2012

Вам необходимо parse() внутренний блок, такой как question.T или question.R, а затем проанализировать внешний блок questionnaire.

Если переписать этот шаблон как PHP вместо ИТ-синтаксиса, он будет выглядеть следующим образом

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

Таким образом, в основном вы должны управлять циклом foreach. Посмотрите, как, например, ITDynamic рендерер в HTML_QuickForm пакете работает при выводе формы.

...