【问题标题】:Zend Form Decorator on 1.12 versionZend Form Decorator on 1.12 版本
【发布时间】:2014-01-28 14:33:51
【问题描述】:

大家好,我正在尝试用 Zend 渲染这个 html 结构:

<div id="medias" class="item">
    <h2> Medias </h2>
    <a id="addmedia" href="#">
        <img alt="" src="images/bigbtn-add.png">
    </a>
</div>

更新 1:

这就是我创建 media_img 元素的方式:

$media_img = new Zend_Form_Element_Image('media_img');
$media_img->setImage("/img/bigbtn-add.png");
$this->addElement($media_img);

使用这个:

$this->setElementDecorators(array(
    'ViewHelper',
    'HtmlTag', array('HtmlTag', array('tag' => 'a', 'id' => 'addmedia','href' => '#'))
),
array('media_img')
);

我正确渲染了这部分代码:

<a id="addmedia" href="#">
    <img alt="" src="images/bigbtn-add.png">
</a>

如何在 h2 前面添加,然后将这些元素包装到我的 div 中?

更新 2:

感谢@Mubo 的帮助,我渲染了这个html:

<h2 class="hint">Medias</h2>
<a id="addmedia" href="#">
    <input id="media_img" type="image" src="/img/bigbtn-add.png" name="media_img">
</a>

现在我只需要将所有这些行包装在一个 div 中。 装饰器现在看起来像这样:

$this->setElementDecorators(array(
    'ViewHelper',
    'HtmlTag', array('HtmlTag', array('tag' => 'a', 'id' => 'addmedia','href' => '#')),
    array('Description', array('tag' => 'h2', 'placement' => 'prepend')),
),
array('media_img')
);

缺少什么?

感谢您的帮助。

更新 3:我还是想不通...

【问题讨论】:

  • 您是否对所有元素都使用了一些复杂的装饰器,或者您只想为这一领域编写装饰器?因为另一个选项是手动呈现这个表单,你可以在那里定义这个标记。
  • 手动使用 HTML 即可。
  • @s7anley 我想只使用装饰器来实现这一点。如果我能做到这一点,那就更好了。我迷路了!

标签: zend-framework zend-form zend-form-element


【解决方案1】:

您可以使用 setDescription 并在其前面加上这样的装饰器。

这非常棘手且不简单。

     $myElement = new Zend_Form_Element_Text('name');
      $myElement->setLabel('Label');       
      $myElement->setRequired(true);
      $myElement->setDescription('Medias');        
      $myElement->setDecorators(   array(  'DijitElement', 'Errors',
                array(array('data' => 'HtmlTag'), array('tag' => 'td')),
                array('Label', array('tag' => 'td')),
                array('Description', array('tag' => 'h2', 'placement' => 'prepend')),
                array(array('row' => 'HtmlTag'), array('tag' => 'tr', 'class' => 'form_row'))
            ));
$this->addElement($myElement);

【讨论】:

  • 感谢您的回复。我试图将您的装饰器集成到我的,但我无法像我的示例中那样渲染它。你能把我的例子作为参考吗?
  • 我不明白你的意思,我已经测试了代码,它对我有用。在您的控制器中实例化表单类。并将其分配给视图,并在您的视图中 html 只是回显代码。如果你不知道这一切,我可以给你一个例子
  • 您正在使用 tr 标签。我怎样才能得到这个结构:&lt;div id="medias" class="item"&gt; &lt;h2&gt; Medias &lt;/h2&gt; &lt;a id="addmedia" href="#"&gt; &lt;img alt="" src="images/bigbtn-add.png"&gt; &lt;/a&gt; &lt;/div&gt;
  • 看来你想做的和那里写的不一样。我想在元素表单上添加 h2 TAG。这就是写的。
  • 这与zend形式无关。您写给我的以下代码只是纯 HTML 和图像链接。

    媒体

【解决方案2】:

哇,我终于找到了解决方案。这是我的装饰器:

   $media_img->setDecorators(array(
        'ViewHelper',
        'Errors',
        array('HtmlTag', array('tag' => 'a', 'id' => 'addmedia','href' => '#')),
        array('Description', array('tag' => 'h2', 'placement' => 'prepend')),
        array(
            array('fieldDiv' => 'HtmlTag'), 
            array(
                'tag' => 'div', 'class' => 'item', 'id' => 'medias'
            )
        )
    ));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    • 2017-02-11
    • 2013-09-16
    • 1970-01-01
    相关资源
    最近更新 更多