【发布时间】:2012-02-27 12:03:21
【问题描述】:
我正在寻找一种将 zend_form 表单元素包装在 div 中的方法。 我可以通过在表单类中使用下面的代码来获得所需的结果。
$element->setDecorators(array(
'ViewHelper',
'Description',
'Errors',
array(array('top-left' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-top-left')),
array(array('top-right' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-top-right')),
array(array('top-center' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-top-center')),
array(array('bottom-left' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-bottom-left')),
array(array('bottom-right' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-bottom-right')),
array(array('bottom-center' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-bottom-center')),
array(array('left' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-left')),
array(array('right' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-right')),
array(array('dd' => 'HtmlTag'), array('tag' => 'dd', 'id' => $element->getLabel().'-element')),
array('Label', array('tag' => 'dt')),
));
我想知道是否可以使用自定义装饰器来实现所需的结果。
上面的代码很容易实现,但必须为每个元素完成。 那么我想,我可以使用自定义装饰器来达到同样的效果吗?
到目前为止我还不能,这就是我在这里问这个问题的原因。
::编辑::
我忘了提及到目前为止我一直在尝试做的事情。 我一直在尝试分解自定义装饰器中的表单。 但到目前为止我还没有运气。
class Form_Decorator_Borders extends Zend_Form_Decorator_Abstract
{
public function render($content)
{
$element = $this->getElement(); // get form
$elements = $element->getElements(); // get form elements
$placement = $this->getPlacement();
$name = htmlentities($element->getFullyQualifiedName());
$id = htmlentities($element->getId());
foreach ($elements as $k => $v) {
if (is_object($v) && get_class($v) == "Zend_Form_Element_Text") {
$elements[$k]->setDecorators(array(
'ViewHelper',
'Description',
'Errors',
array(array('top-left' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-top-left')),
array(array('top-right' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-top-right')),
array(array('top-center' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-top-center')),
array(array('bottom-left' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-bottom-left')),
array(array('bottom-right' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-corner-bottom-right')),
array(array('bottom-center' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-bottom-center')),
array(array('left' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-left')),
array(array('right' => 'HtmlTag'), array('tag' => 'div', 'class' => 'content-border-right')),
array(array('dd' => 'HtmlTag'), array('tag' => 'dd', 'id' => $elements[$k]->getLabel().'-element')),
array('Label', array('tag' => 'dt')),
));
}
}
$element->setElements($elements);
$this->setElement($element);
$this->setElement($element);
return $this->getElement()->getView()->render($name);
}
}
【问题讨论】:
-
这在 html 中应该是什么样子?
-
我已将样本上传到 imageshack:img28.imageshack.us/img28/6411/sampledl.png
-
代码应该在输入元素周围创建边框,所以我有圆角,没有 CSS3 的麻烦(现在)。
标签: zend-framework zend-form zend-decorators