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

Reply via email to