【问题标题】:Can custom decorator access parts of $content自定义装饰器可以访问 $content 的一部分吗
【发布时间】:2010-10-07 07:00:50
【问题描述】:

在自定义装饰器中,我使用 div 包装元素内容。此代码在<dt> label<dd> element 周围创建了一个div

public function render($content)
{        
   return '<div class="test">' . $content . '</div>';
}

有没有办法可以进一步访问这两个部分,dd 和 dt。比如可能只将 div 包裹在 &lt;dt&gt;&lt;dd&gt; 周围。如何访问$content 的不同部分?

【问题讨论】:

  • 它是&lt;!ELEMENT DL - - (DT|DD)+ -- definition list --&gt;,因此将 div 包裹在 dt 或 dd 周围会产生无效标记。
  • @Gordon,我同意,但我仍然需要访问这些内容的各个部分,以便我可以尝试对它们做一些事情
  • 我不确定您是否可以堆叠 HtmlTag 装饰器以将 div 包裹在标签和每个元素周围。 Label 本身也是一个装饰器。但是您绝对可以编写自己的自定义标签装饰器。基本上都在我昨天给你的第二篇文章里了。

标签: php zend-framework zend-form zend-decorators


【解决方案1】:

如果没有必要为您想要实现的目标创建自定义装饰器,您可以尝试直接装饰元素,如下所示:

$elementDecorators = array( 'ViewHelper', array(array('element'=>'HtmlTag'), array('tag' => 'dd')), array('Label', array('tag' => 'dt')), array(array('wrapper'=>'HtmlTag'), array('tag' => 'div')), );

shud 会产生这样的标记:

<div> <dt><label/></dt> <dd><input/></dd> </div>

所以如果你想在 dd 或 dt 之内/之间/之前/之后添加任何你想要的东西,你可以这样修改:

$elementDecorators = array( 'ViewHelper', array(array('addition'=>'HtmlTag'), array('tag' => 'span')), array(array('element'=>'HtmlTag'), array('tag' => 'dd')), array('Label', array('tag' => 'dt')), array(array('wrapper'=>'HtmlTag'), array('tag' => 'div')), );

这会产生:

<div> <dt><label/></dt> <dd><span><input/></span></dd> </div>

它只是在 dd 标签之前在元素周围包裹了一个 span 标签。

装饰后,您可以简单地添加变量作为元素的装饰器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2021-09-26
    • 2011-01-22
    • 2013-02-06
    • 2011-10-04
    • 1970-01-01
    相关资源
    最近更新 更多