Портирование шаблона на Zend Framework

У меня мало вопросов, связанных с тем, чтобы заставить форму, основанную на груше, перейти в форму.

У меня есть несколько элементов, которые мне нужны:

  • Основные элементы
  • группы
  • Элементы группы
  • Разделы
  • Ранее я использовал шаблоны для рендеринга форм на Pear. Очевидно, я не могу использовать уже существующие Zend-декораторы, так как мне нужно указать классы CSS для каждого из компонентов моих базовых элементов. Чтобы увидеть проблему, мне нужно сделать это, это шаблон для базового элемента:

    <li class = "{position_in_the_form} {error}">
      <label class="{label_class}"> {label} 
        [<span class="required_class"> * </span>]
      </label>
      <div> {element_content} </div>
      [<p class = "{error_class}"> {error_message} </p>]
    </li>
    

    Итак, как вы можете видеть, у меня есть много динамических вещей, которые я хотел бы иметь возможность указать: положение в форме, класс для метки, класс для требуемого раздела, класс для ошибки. Я также хотел бы иметь возможность указать это из INI-файла. Мне удается настроить основные мета из INI, но не настраиваемые поля.

    Одна из причин, по которой я не могу использовать базовые декораторы, заключается в том, что мне нужно иметь "error" в классе "li", когда есть ошибка в элементе или в sub_form. Я не уверен, что это возможно с декоратором ошибок... (поправьте меня если я ошибаюсь)

    Кроме того, для группы мне нужно что-то, что обрабатывает ошибки, а поскольку основные группы не обрабатывают ошибки, мне нужно создать подкласс sub_form. Но как я могу создать подчиненную форму в INI-файле, и я не знаю, как предоставить параметры для формы из INI-файла.

    Основная идея заключается в том, чтобы иметь возможность иметь визуальные и логические группы элементов в форме. Например, мне нужна группа "имя" с полным именем, отчеством и т. Д. Это также подразумевает глобальный валидатор для этой группы "имя". Другое дело, что я хочу иметь возможность позиционировать эти группы: левая половина, правая половина, полная. Я подготовил CSS для этого и работал с грушей.

    Так что мне нужно простое решение, с небольшим количеством кода и конфигурации ini. К сожалению, я думаю, что застрял в чем-то слишком сложном, поэтому, если кто-то имеет представление о простой архитектуре, это было бы удивительно!

    Заранее спасибо за помощь, Бест, Борис

    1 ответ

    Если вам нужно сложное оформление, вы можете использовать ViewScript Zend_Form_Element_Decorator

    $element->setDecorators(array(
            array('ViewScript', array('viewScript' => 'path/to/your/views/element.phtml')),
    ));
    

    а затем в path/to/your/views/element.phtmlболее или менее что-то вроде

    <li class="<?php echo $this->element->getAttrib('position_in_the_form') ?> <?php echo $this->element->hasErrors() ? 'error' : '' ?>">
      <label class="<?php echo $this->element->getAttrib('label_class') ?>"> 
            <?php echo $this->formLabel($this->element->getName(),
                           $this->element->getLabel()) ?>
        <? if ( $this->element->isRequired() ) { ?>
            [<span class="required_class"> * </span>]
        <? } ?>
      </label>
      <div> <?php echo $this->{$this->element->helper}(
          $this->element->getName(),
          $this->element->getValue(),
          $this->element->getAttribs()
      ) ?> </div>
        <? if ( $this->element->hasErrors() ) { ?>
            [<p class="<?php echo $this->element->getAttrib('error_class') ?>"> <?php echo $this->formErrors($this->element->getMessages()) ?> </p>]
        <? } ?>
    </li>
    

    Это всего лишь небольшой фрагмент кода, но он должен вести вас в направлении, к которому вы стремитесь.

    С уважением

    Другие вопросы по тегам