装饰器和动态创建的元素列表的问题

时间:2011-08-02 11:35:15

标签: zend-framework

我有Zend装饰器的问题。我试着找到一个简单的列表。

<ul class="gallery" id="gallery">
  <li><img src="image1" /></li>
  <li><img src="image2" /></li>
</ul>

我动态创建图像列表。

foreach ($imageData as $fileData)
{
  $filename = 'image'.$counter;
  $form->addElement('note',$filename);
  $form->getElement($filename)->setValue('<img src="/img/'.$fileData.'">')
       ->addDecorator('Label')
       ->addDecorator('Errors')
       ->addDecorator('HtmlTag', array('tag' => 'li'))
       ->addDecorator(array('ulTag'=>'HtmlTag'), array('tag'=>'ul','id' =>'gallery'))
  $counter++;
}

不幸的是我得到了:

 <ul class="gallery" id="gallery">
   <li><img src="image1" /></li>
 </ul>
 <ul class="gallery" id="gallery">
   <li><img src="image2" /></li>
 </ul>

我不明白,我如何更改装饰器,将所有图像放入1个列表而不是多个ul标签。任何人都可以给我一个建议吗?非常感谢提前!

1 个答案:

答案 0 :(得分:0)

您可以使用display groups对元素进行分组,然后将ulTag装饰器添加到组中,而不是单个元素。

以下代码应大致为您所需:

    foreach ($imageData as $fileData)
    {
      $filename = 'image'.$counter;
      $images[] = $filename;
      $form->addElement('note',$filename);
      $form->getElement($filename)->setValue('<img src="/img/'.$fileData.'">')
           ->addDecorator('Label')
           ->addDecorator('Errors')
           ->addDecorator('HtmlTag', array('tag' => 'li'))
      $counter++;
    }        
    $form->addDisplayGroup(
        $images,
        'images',
        array('disableLoadDefaultDecorators' => true)
    );
    $form->images
        ->addDecorator(array('ulTag'=>'HtmlTag'), array('tag'=>'ul','id' =>'gallery'))