Can you add an issue to the tracker for this, along with your patch? The
feature has been requested more than once. :)

-- 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/

Reply via email to