views:

2179

answers:

2

I want to present radio buttons in logical products groups:

Broadband products:
  (*) 2 Mbit
  ( ) 4 Mbit

Voice products:
  ( ) Standard
  ( ) Total

Bundles:
  ( ) 4 Mbit + Standard
  ( ) 4 Mbit + Total

All radio buttons have the same name attribute - you get the idea. It seems that Zend Framework 1.8 does not support grouping radio buttons this way. Is there any solution to this?

Update. Just to clarify, resulting code should look somewhat this way:

Broadband products: <br/>
<input type="radio" name="product" value="1"/> 2 Mbit <br/>
<input type="radio" name="product" value="2"/> 4 Mbit <br/>

Voice products: <br/>
<input type="radio" name="product" value="3"/> Standard <br/>
<input type="radio" name="product" value="4"/> Total <br/>

Bundels: <br/>
<input type="radio" name="product" value="5"/> 4 Mbit + Standard <br/>
<input type="radio" name="product" value="6"/> 4 Mbit + Total <br/>

Nevermind the exact formatting code. Only form elements matter.

A: 

Take a look at Zend_Form_Element_Radio

http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.radio

There is the multi checkbox class too, but i guess it's only for checkboxes http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.multiCheckbox

Renato Aquino
That's what he's using and is having the problem with.
mercator
+3  A: 

You're correct that ZF 1.8 doesn't support grouping of options in this way. You could easily look at the code inside Zend_View_Helper_FormRadio and create your own view helper that supports a multi-dimensional array (ie the select groupings). I had to do this already for a project, check out the example at pastebin.com

PHP:

$form->addElement('radio', 'test', array(
    'helper'=>'formMultiRadio',
    'label'=>'Test Thing',
    'multiOptions'=>array(
        'Test'=>array('1'=>'1', '2'=>'2'),
        'Test 2'=>array('3'=>'3', '4'=>'4'),
        'Test 3'=>array('5'=>'5', '6'=>'6'),
      ),
  ));

Resulting HTML:

<dt id="test-label"><label for="test" class="optional">Test Thing</label></dt>

<dd id="test-element">
Test<br />
<label for="test-1"><input type="radio" name="test" id="test-1" value="1" />1</label><br />
<label for="test-2"><input type="radio" name="test" id="test-2" value="2" />2</label><br />
Test 2<br />
<label for="test-3"><input type="radio" name="test" id="test-3" value="3" />3</label><br />
<label for="test-4"><input type="radio" name="test" id="test-4" value="4" />4</label><br />
 Test 3<br />
 <label for="test-5"><input type="radio" name="test" id="test-5" value="5" />5</label><br />
 <label for="test-6"><input type="radio" name="test" id="test-6" value="6" />6</label>
 </dd>
gnarf
Thanks for pointing me in the right direction. I needed to wrap a div around each group of radio buttons, and was able to accomplish it in a similar fashion.
Chris