首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >zend-form选择optgroup,如何指定id

zend-form选择optgroup,如何指定id
EN

Stack Overflow用户
提问于 2011-08-29 15:23:17
回答 3查看 5.8K关注 0票数 5

你好,我正在使用Zend表单,并试图让这个示例工作http://framework.zend.com/issues/browse/ZF-8252,但是它失败了xD

这是我的密码

代码语言:javascript
复制
$options = Array
(
    [] => Qualsiasi Agente
    [agenti_attivi] => Array
        (
            [4] => Giovanni Abc
            [10] => Luigi Abc
            [13] => Michela Abc
        )

);

$agenti->addMultiOptions($options);

生成的代码是:

代码语言:javascript
复制
<select name="agente_id" id="agente_id" tabindex="6">
    <option value="" label="Qualsiasi Agente" selected="selected">Qualsiasi Agente</option>
    <optgroup id="agente_id-optgroup-Agenti attivi: " label="Agenti attivi: ">
    <option value="4" label="Giovanni Abc">Giovanni Abc</option>
    <option value="10" label="Luigi Capoarea">Luigi Abc</option>
    <option value="13" label="Michela Abc">Michela Abc</option>
    </optgroup>

</select>

其中id="agente_id-optgroup-Agenti attivi:"不是xhtml有效行724,第44列:属性值"id“必须是单个标记。

我使用的是Zend1.11.10

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-01 21:47:01

创建一个扩展核心FormSelect的自定义视图助手FormSelect,然后修改代码。

  1. 在引导文件

中包含到视图帮助程序的路径。

代码语言:javascript
复制
protected function _initHelpers()
{
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->addHelperPath('My/View/Helper', 'My_View_Helper');
}

  1. 自定义视图助手。这是一份Zend_View_Helper_FormSelect的副本,但做了小修改。

类My_View_Helper_FormSelect扩展Zend_View_Helper_FormSelect {

公共函数formSelect($name,$value = null,$attribs = null,$options = null,$listsep = "\n") { $info = $this->_getInfo($name,$value,$attribs,$options,$listsep);提取($info);//名称、id、值、attrib、选项、listsep、禁用//强制$value数组,以便我们可以将多个值与多个//选项进行比较;还确保它是用于比较的字符串。$value = array_map('strval',(数组) $value);// check if元素可能具有多个值$multiple = '';if (substr($name,-2) == '[]') { // $multiple =‘multiple=’multiple‘所隐含的多个值;}如果(isset ($attribs' multiple ') ) { //属性集if ($attribs‘multiple’){ // True属性;设置多属性$multiple =‘multiple=’multiple‘;//确保名称指示允许多个值,如果(!空( $multiple )& (substr( $name,-2) != '[]')) {$name .=‘[];}$name{/ False属性;确保属性不设置$multiple= '';} unset($attribs' multiple ');} //现在开始构建XHTML。$disabled = '';if (真=== $disable) { $disabled =‘disabled=“禁用;}/首先构建周围的select元素。$xhtml = 'view->转义($name).’‘‘id="‘.$this->view->转义($id).’‘$multiple。$disabled。$this->_htmlAttribs($attribs)。">\n ";//构建选项列表$list = array();$translator = $this->getTranslator();foreach ((数组) $options as $opt_value => $opt_label) { if (is_array($opt_label)) { $opt_disable =‘;if (is_array($disable) && in_array( $opt_value,$disable)) { $opt_disable =‘disabled=“”禁用“;} if (null !== $translator) {$opt_value= $translator->translate($opt_value);} $opt_id =’id=‘。$this->formatElementId($id .“-视光群--”$opt_value)。$list[] = 'view->转义($opt_value). '';foreach ($opt_label as $val => $lab) { $list[] = $this->_build($val,$lab,$value,$disable);} $list[] =‘;}{ $list[] = $this->_build($opt_value,$opt_label,$value,$disable);} //将选项添加到xhtml并关闭select $xhtml .=内爆(“\n ",$list)。“n”;返回$xhtml;}私有函数formatElementId( $id ) { //在这里放置您想要的id值$id =trim的任何筛选器(strtr($id,数组(‘=> '-',’=>‘,’=>‘,':’=>‘)),'’-');$id= strtolower($id);返回$id};

}

好了。使用有效的id创建多个选择元素。

代码语言:javascript
复制
<?php
$this->addElement('multiSelect', 'agente_id', array(
    'label' => 'Label Name:',
    'multiOptions' => array(
        '' => 'Qualsiasi Agente',
        'Agenti attivi: ' => array(
            4 => 'Giovanni Verdi',
            10 => 'Luigi Capoarea',
            13 => 'Michela Passarin',
        )
    )
));
票数 5
EN

Stack Overflow用户

发布于 2011-09-03 10:08:25

试试看,这对我来说很管用:

代码语言:javascript
复制
$select = new Zend_Form_Element_Select('select');
$options = Array(
    '' => 'Qualsiasi Agente',
    'agenti_attivi' => Array(
            4 => 'Giovanni Verdi',
            10 => 'Luigi Capoarea',
            13 => 'Michela Passarin'
        )
);
$this->addElements(array($xxxx,$select,$yyyy)); // $this : the form instance

结果是:

代码语言:javascript
复制
<select id="select" name="select">
  <option label="Qualsiasi Agente" value="">Qualsiasi Agente</option>
  <optgroup label="agenti_attivi">
    <option label="Giovanni Verdi" value="4">Giovanni Verdi</option>
    <option label="Luigi Capoarea" value="10">Luigi Capoarea</option>
    <option label="Michela Passarin" value="13">Michela Passarin</option>
  </optgroup>
</select>

问题是id属性不接受空格和特殊字符:

代码语言:javascript
复制
id="agente_id-optgroup-Agenti attivi: "
票数 2
EN

Stack Overflow用户

发布于 2011-08-31 14:01:47

在给定doctype的情况下,Zend通常能够很好地呈现适当的html。

尝试像这样设置您的doctype,如果您还没有这样做。

代码语言:javascript
复制
<?php
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
$viewRenderer->initView();
$viewRenderer->view->doctype('XHTML1_STRICT');

代码语言:javascript
复制
<?php echo $this->doctype(); ?>

在你的布局的顶端

我没有一个ZF的安装,我可以很容易,如果这不工作,设置不良的测试环境。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7232180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档