【问题标题】:Zend_form rendering problemZend_form 渲染问题
【发布时间】:2010-11-29 21:52:27
【问题描述】:

我需要一个主要包含复选框的 zend_form。我需要将它们分组并为每个组显示一个标题。例如

标题 1

标签1检查1

标签2检查2

标签3检查3

标题 2

标签4检查4

标签5检查5

标签6检查6

首先我不知道如何显示标题(“标题”)!有没有一种方法可以将标签添加到表单而不是元素或任何其他解决方案以在 Zend Form 中添加这些标题?

其次我如何渲染这种方式?我应该使用什么样的装饰器? 我对装饰器有些东西,但我不太了解?

有人有什么想法吗? 谢谢!

【问题讨论】:

    标签: zend-framework rendering zend-form decorator formatting


    【解决方案1】:

    尝试添加此类

    class Zend_Form_Element_Note extends Zend_Form_Element_Xhtml
    {
        public $helper = 'formNote';    
    }
    

    到 /Your/Own/Form/Element 目录,例如

    $form->addPrefixPath( 'LSS_Form_Element', 'LSS/Form/Element', 'element' );
    

    然后您可以添加“note”元素类型,这些元素类型只显示静态文本,如标题。例如

    $form->addElement( 'note', 'my_note', array( 'label' => 'Heading 1' ) );
    

    【讨论】:

    • 首先你应该将你的类命名为“LSS_Form_Element_Note”,因为你把它放在那个目录和前缀路径中。之后,您需要在 View_Helper 名称中创建视图助手: FormNote 在该助手中放置函数 formNote($name , .....) 以呈现此注释。然后它将起作用。
    【解决方案2】:

    您可能对手册的这一部分感兴趣,这似乎正是您想要获得的内容:23.4.3. Display Groups (引用):

    显示组是一种创建方式 元素的虚拟分组 显示目的。保留所有元素 可以在表单中按名称访问,但是 当迭代表单或 渲染,显示中的任何元素 组一起渲染。最多 常见的用例是 对字段集中的元素进行分组。

    这应该允许您将表单元素重新组合到字段集中,并且每个元素都可以有其图例——在您的情况下,这将是“heading X”。 p>

    一旦您的复选框被添加到表单中,您应该能够使用类似这样的方式重新组合它们:

    $form->addDisplayGroup(array('checkbox1', 'checkbox2', 'checkbox3'), 'firstgroup');
    $form->addDisplayGroup(array('checkbox4', 'checkbox5', 'checkbox6'), 'fsecondgroup');
    


    对于渲染部分,我想它会使用Zend_Form_Decorator_Fieldset


    评论后编辑

    要设置每个组的标题,您必须设置其“legend”,并将其作为选项传递。

    例如,这是我从很久以前从事的一个旧项目中找到的一段代码:

    $form->addDisplayGroup(array(
        'idCategory',
        'date',
        // ...
        'tags', 
        'nbComments'
    ), 
    'postmeta', 
    array(
        'order' => 2,
        'attribs' => array(
            'class' => 'group',
            'legend' => 'Meta-données'
        )
    ));
    

    据我回忆,“Meta-données”是用于包含这些元素的字段集的“legend”。

    【讨论】:

    • 谢谢!我设法分组。但是如何为每个组设置标签或标题?
    • 使用 setLegend 方法,或者传入一个带有您想要显示的值的“legend”选项
    • @Granit :我编辑了我的答案,以提供我从我的一个旧项目中找到的示例;; @Machine:也谢谢!
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 2010-10-19
    相关资源
    最近更新 更多