On Sun, Nov 8, 2009 at 1:44 PM, Matthew Weier O'Phinney <[email protected]> wrote: > Can you add an issue to the tracker for this, along with your patch? The > feature has been requested more than once. :) >
Sure, opened as ZF-8252 (not sure why the formatting got hosed): http://framework.zend.com/issues/browse/ZF-8252 > -- Bradley Holt <[email protected]> wrote > (on Sunday, 08 November 2009, 01:28 PM -0500): >> I dug into the rendering code in Zend_View_Helper_FormSelect. Based on >> how the optgroup element is created I can see that there's no way to >> add an id or class to the optgroup. Here is a patch that should allow >> for the following use case but should still be backwards compatible. >> This is not necessarily the best way to do this and could probably be >> a lot better: I put it together very quickly. The existing code >> doesn't seem to follow the Zend Framework coding standards so I kept >> my new code similar to the code that's already there. Again, this >> could be a lot more extensible than it is (e.g. it only allows for id >> and not class or other arbitrary decorators). >> >> Here is the use case that will give the desired output in my previous >> email (id attribute on optgroup elements): >> >> $optgroupTest = new Zend_Form_Element_Select('optgroup_test'); >> $options = array ( >> array( >> 'id' => 'option_group_1', >> 'label' => 'Option Group 1', >> 'options' => array ( >> 'A' => 'Option A', >> 'B' => 'Option B', >> 'C' => 'Option C', >> ), >> ), >> array( >> 'id' => 'option_group_2', >> 'label' => 'Option Group 2', >> 'options' => array ( >> 'D' => 'Option D', >> ), >> ), >> ); >> $optgroupTest >> ->setLabel('Optgroup Test') >> ->addMultiOptions( >> $options >> ) >> ; >> >> Here is the patch against Zend Framework 1.9.5 (tags/release-1.9.5) >> that will make the above use case work (patch attached as well): >> >> Index: View/Helper/FormSelect.php >> =================================================================== >> --- View/Helper/FormSelect.php (revision 18900) >> +++ View/Helper/FormSelect.php (working copy) >> @@ -116,6 +116,15 @@ >> $translator = $this->getTranslator(); >> foreach ((array) $options as $opt_value => $opt_label) { >> if (is_array($opt_label)) { >> + $opt_id = ''; >> + if (is_integer($opt_value)) { >> + $opt_array = $opt_label; >> + if (array_key_exists('id', $opt_array)) { >> + $opt_id = ' id="' . $opt_array['id'] . '"'; >> + } >> + $opt_value = $opt_array['label']; >> + $opt_label = $opt_array['options']; >> + } >> $opt_disable = ''; >> if (is_array($disable) && in_array($opt_value, $disable)) { >> $opt_disable = ' disabled="disabled"'; >> @@ -124,6 +133,7 @@ >> $opt_value = $translator->translate($opt_value); >> } >> $list[] = '<optgroup' >> + . $opt_id >> . $opt_disable >> . ' label="' . $this->view->escape($opt_value) >> .'">'; >> foreach ($opt_label as $val => $lab) { >> >> --- >> >> Thanks, >> Bradley > > > > -- > Matthew Weier O'Phinney > Project Lead | [email protected] > Zend Framework | http://framework.zend.com/ >
