3

我认为在您的 Web 应用程序中拥有下面有“编辑删除”按钮的表单是一个常见的要求。但是采埃孚将一个按钮放在另一个按钮下,这是违反直觉的。我猜 ViewScript 装饰器可以帮助我完全覆盖按钮 html。

但是如何跨其他形式做到这一点,以避免重复?可能是我过于复杂了,我应该以某种方式粘贴 html 代码而不是按钮元素对象?

4

3 回答 3

1

这是我在自己的 Form 类中使用的代码,我的所有表单都继承自该类。主要技巧是仅在按钮本身上使用 ViewHelper 装饰器,并将按钮粘贴在使用 DtDdWrapper 的显示组中,并将按钮包装在 a 中以<div class='buttons'>获得额外的样式选项

  protected $_buttons = array();

  /**
   * Sets a list of buttons - Buttons will be standard submits, or in the getJson() version
   * they are removed from display - but stuck in the json in the .buttons property
   *
   * $buttons = array('save'=>'Save This Thing', 'cancel'=>'Cancel') as an example
   *
   * @param array $buttons 
   * @return void
   * @author Corey Frang
   */
  public function setButtons($buttons)
  {
    $this->_buttons = $buttons;
    foreach ($buttons as $name => $label)
    {
      $this->addElement('submit', $name, array(
          'label'=>$label,
          'class'=>$name,
          'decorators'=>array('ViewHelper'),
        ));
    }
    $this->addDisplayGroup(array_keys($this->_buttons),'buttons', array(
      'decorators'=>array(
        'FormElements',
        array('HtmlTag', array('tag'=>'div', 'class'=>'buttons')),
        'DtDdWrapper'
      )
    ));
  }

  // Example from form::init()
  $this->setButtons(array('save'=>'Save Entry', 'delete'=>'Delete Entry'));
于 2009-08-06T00:16:31.057 回答
1

在 Zend Developer Zone 上阅读本教程:

带有 Zend_Form 的装饰器

于 2009-03-31T14:55:50.577 回答
1

可以在 Form 的构造函数中修改按钮装饰器。由于 dt/dd 标签,按钮应该没有 HtmlTag 装饰器以禁用单独的行,可以像这样删除 HtmlTag 装饰器:

$buttonobject->setDecorators(array(
    'ViewHelper',
    //array('HtmlTag', array('tag' => 'dd')),
    //array('Label', array('tag' => 'dt')),         
));

评论仅用于演示目的。此外,出于样式目的,按钮可以分组到一个字段集中:

$this->addDisplayGroup(array('delete','submit'),'buttons');

可选的 site.css 代码:

#fieldset-buttons { border: none; }
于 2009-04-01T17:53:27.680 回答