Am 29.09.2011, 21:49 Uhr, schrieb Christof Coetzee <[email protected]>:


I personally would have designed the ZF decorators to be very lightweight
and use some kind of pattern, maybe something like this:

$form->setViewPatternDefault('<div>{label}</div><div>{field}<br
/>{description}</div>);
//or
$form->setViewPatternDefault('/path/to/form/views/rigid.phtml');

//and then if a specific field needed a different pattern

$form->getElement('dateCombo')
       ->setViewPattern('<div>{label}<br />{field}</div>');

One can currently emulate this with Decorator View Scripts, although still a
bit heavy, but gives you the most flexibility over form views.


Use the "Callback" decorator: (Example for PHP 5.3)

// View
$view = new Zend_View();
$view->setEncoding('utf-8');
$view->doctype('XHTML1_STRICT');

// Form
$form = new Zend_Form();
$form->setDecorators(array(
    'FormElements',
    'Form',
));

// Element
$form->addElement(
    'text',
    'foo',
    array(
        'label'       => 'Foo',
        'description' => 'Foobar...',
        'decorators'  => array(
            array(
                // Decorator name
                'Callback',
                // Decorator options
                array(
'callback' => function($content, $element, array $options)
                    {
                        // Add and setup view helper decorator
                        $element->addDecorator('ViewHelper');

                        $viewHelper = $element->getDecorator('ViewHelper');
                        $viewHelper->setElement($element);

                        // Label
                        $html = '<div><label for="' . $element->getId()
                                                    . '">'
                                                    . $element->getLabel()
                                                    . '</label></div>';
                        // Element
$html .= '<div>' . $viewHelper->render('') . '<br />';

                        // Description
                        $html .= $element->getDescription() . '</div>';

                        return $html;
                    },
                )
            ),
        ),
    )
);

// Render
echo $form->render($view);

// Output
<form enctype="application/x-www-form-urlencoded" action="" method="post">
    <div>
        <label for="foo">Foo</label>
    </div>
    <div>
        <input type="text" name="foo" id="foo" value="" /><br />
        Foobar...
    </div>
</form>

--
List: [email protected]
Info: http://framework.zend.com/archives
Unsubscribe: [email protected]


Reply via email to