views:

111

answers:

1

Hi,

I got few issues proting a pear based form to zend form.

I have few elements I need :

  • Basic Elements
  • Groups
  • Group Elements
  • Sections
  • I previously used templates to render the forms on Pear. I obviously cannot use pre-existing zend decorators, since I need to specify css classes for each of the components of my base elements. To see the issue I need to render this, which is the template for a basic element :

    <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>
    

    So as you can see I have many dynamic things I would like to be able to specify : position in the form, class for the label, class for the required section, the class for the error. I would also like to be able to specify this from an ini file. I manage to set up the basic meta from the ini but not custom fields.

    One of the reason I cannot use basic decorators is that I need to have "error" in the "li" class when there is an error in the element or the sub_form.I'm not sure this is possible with the error decorator... (correct me if I'm wrong)

    Also, for the group I need something handling the errors, and since the core groups don't handle errors I need to subclass the sub_form. But how can I create a subform in an ini file and I don't know how to provide parameters to the sub form fromn the ini.

    The main idea here is to be able to have visual and logic groups of elements in a form. For example I need a 'name' group with fullname, middle name, etc. This also implies a global validator for this "name" group. An other thing is that I want to be able to position these groups : left half, right half, full I got the css ready for this and working with pear.

    So what I need is a simple solution, with few code and ini configurations. Unfortunately I think I got stuck in something too complicated, so if someone has any idea about a simple architecture it would be amazing!

    Thanks in advance for your help, Best, Boris

    A: 

    Hi Boris,

    In your complex decoration need, you might want to use the ViewScript Zend_Form_Element_Decorator

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

    and then in path/to/your/views/element.phtml, more or less something like

    <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>
    

    This is only a drafty snippet of code, but should lead you in the direction you aim.

    Regards

    Julien