Of course, almost as soon as I posted this I found the solution:
In http://book.cakephp.org/view/189/automagic-form-elements section
7.3.3.4, the $options['options'] key. Amazing.. Instead of manually
separating the option groups, cake automagically created option groups
from my checkboxes with this code:
<?php echo $form->create('Firm.FirmProfile',array('url'=>array
('controller'=>'firms','action'=>'add'.'/step3')));?>
<?php echo $form->input('FirmProfile.id',array('value'=>$firm_data
['FirmProfile']['id'],'type'=>'hidden'));?>
<?php echo $form->input('ServiceAreaType.ServiceAreaType',array
('multiple'=>'checkbox','options'=>array(
'Regulations and Markets'=>array($regulationsAndMarkets),
'GHG Inventories'=>array($ghgInventories),
'Technology and Equipment'=>array($technologyAndEquipment),
'Industry experience and expertise'=>array($industryExperience)
)));?>
<?php echo $form->end('Continue');?>
So much better, and much simpler than I thought. Yes, I love Cake.
Being a cake beginner it has been a journey of learning so far.
Hopefully this helps anyone with similar problems.
-Scott
On Oct 6, 11:56 am, mindcube <[email protected]> wrote:
> I have 4 groups of Service Areas in a HABTM relationship with Firm
> Profiles.
>
> My controller :
>
> if ($step == 'step3') {
> if (!empty($this->data)) {
> $this->set('before',$this->data);
>
> if
> ($this->Firm->FirmProfile->saveAll($this->data)) {
> $this->Session->setFlash(__('Data
> Saved', true));
> } else {
> $this->Session->setFlash(__('Data Not
> Saved', true));
> }
> }
> $this->set('regulationsAndMarkets',
> $this->Firm->FirmProfile->ServiceAreaType->find('list',array('conditions'=>array(
>
> 'service_area_id'=>3)
> )));
> $this->set('ghgInventories',
> $this->Firm->FirmProfile->ServiceAreaType->find('list',array('conditions'=>array(
>
> 'service_area_id'=>1)
> )));
> $this->set('technologyAndEquipment',
> $this->Firm->FirmProfile->ServiceAreaType->find('list',array('conditions'=>array(
>
> 'service_area_id'=>4)
> )));
> $this->set('industryExperience',
> $this->Firm->FirmProfile->ServiceAreaType->find('list',array('conditions'=>array(
>
> 'service_area_id'=>2)
> )));
> $firm_data = $this->Session->read('data'); // Read
> firm data from
> session
> $this->set('firm_id',$firm_data['Firm']['id']); //
> Set variable
> firm_id for lookups
> $this->set('firm_data',$firm_data); // Set firm_data
> view array
> with data from session
> }
>
> My view:
>
> <?php echo $form->create('Firm.FirmProfile',array('url'=>array
> ('controller'=>'firms','action'=>'add'.'/step3')));?>
>
> <fieldset>
>
> <legend>Regulations and Markets</legend>
> <?php echo $form->input('ServiceAreaType.ServiceAreaType',array
> ('options'=>
> $regulationsAndMarkets,'label'=>'','multiple'=>'checkbox'));?>
> </fieldset>
>
> <fieldset>
> <legend>GHG Inventories</legend>
> <?php echo $form->input('ServiceAreaType.ServiceAreaType',array
> ('options'=>$ghgInventories,'label'=>'','multiple'=>'checkbox'));?>
> </fieldset>
>
> <fieldset>
> <legend>Technology and Equipment</legend>
> <?php echo $form->input('ServiceAreaType.ServiceAreaType',array
> ('options'=>
> $technologyAndEquipment,'label'=>'','multiple'=>'checkbox'));?>
> </fieldset>
>
> <fieldset>
> <legend>Industry experience and expertise</legend>
> <?php echo $form->input('ServiceAreaType.ServiceAreaType',array
> ('options'=>$industryExperience,'label'=>'','multiple'=>'checkbox'));?
>
> </fieldset>
>
> <?php echo $form->input('FirmProfile.id',array('value'=>$firm_data
> ['FirmProfile']['id'],'type'=>'hidden'));?>
>
> <?php echo $form->end('Continue');?>
>
> Basically, I want the user to be able to select multiple items within
> each different group, and have the HABTM relationships added when
> doing so. Right now, only the last group is saving. I have found out
> that this has something to do with the fact that you cannot POST
> multiple select groups with the same Name, and cake is creating the
> following HTML with this code:
>
> <form id="FirmProfileEditForm" method="post" action="/theclimatepages/
> firms/add/step3/32"><fieldset style="display:none;"><input
> type="hidden" name="_method" value="PUT" /></fieldset>
> <fieldset>
>
> <legend>Regulations and Markets</legend>
> <div class="input select"><label
> for="ServiceAreaTypeServiceAreaType"></label><input type="hidden"
> name="data[ServiceAreaType][ServiceAreaType]" value="" />
>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="4"
> id="ServiceAreaTypeServiceAreaType4" /><label
> for="ServiceAreaTypeServiceAreaType4">GHG Regulatory Compliance</
> label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="6"
> id="ServiceAreaTypeServiceAreaType6" /><label
> for="ServiceAreaTypeServiceAreaType6">Carbon Market Advisory Services</
> label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="7"
> id="ServiceAreaTypeServiceAreaType7" /><label
> for="ServiceAreaTypeServiceAreaType7">Legal Services</label></div>
>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="8"
> id="ServiceAreaTypeServiceAreaType8" /><label
> for="ServiceAreaTypeServiceAreaType8">Permit analysis and acquisition</
> label></div>
> </div></fieldset>
>
> <fieldset>
> <legend>GHG Inventories</legend>
> <div class="input select"><label
> for="ServiceAreaTypeServiceAreaType"></label><input type="hidden"
> name="data[ServiceAreaType][ServiceAreaType]" value="" />
>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="13"
> id="ServiceAreaTypeServiceAreaType13" /><label
> for="ServiceAreaTypeServiceAreaType13">Pre-verification services /
> auditing</label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="14"
> id="ServiceAreaTypeServiceAreaType14" /><label
> for="ServiceAreaTypeServiceAreaType14">Building a GHG inventory</
> label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="15"
> id="ServiceAreaTypeServiceAreaType15" /><label
> for="ServiceAreaTypeServiceAreaType15">Life-cycle analysis</label></
> div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="16"
> id="ServiceAreaTypeServiceAreaType16" /><label
> for="ServiceAreaTypeServiceAreaType16">Training</label></div>
>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="17"
> id="ServiceAreaTypeServiceAreaType17" /><label
> for="ServiceAreaTypeServiceAreaType17">Validation</label></div>
> </div></fieldset>
>
> <fieldset>
> <legend>Technology and Equipment</legend>
> <div class="input select"><label
> for="ServiceAreaTypeServiceAreaType"></label><input type="hidden"
> name="data[ServiceAreaType][ServiceAreaType]" value="" />
>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="9"
> id="ServiceAreaTypeServiceAreaType9" /><label
> for="ServiceAreaTypeServiceAreaType9">Energy audits</label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="10"
> id="ServiceAreaTypeServiceAreaType10" /><label
> for="ServiceAreaTypeServiceAreaType10">Enviornmental Software</label></
> div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="11"
> id="ServiceAreaTypeServiceAreaType11" /><label
> for="ServiceAreaTypeServiceAreaType11">Engineering analysis</label></
> div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" value="12"
> id="ServiceAreaTypeServiceAreaType12" /><label
> for="ServiceAreaTypeServiceAreaType12">Metering equipment / hardware</
> label></div>
>
> </div></fieldset>
>
> <fieldset>
> <legend>Industry experience and expertise</legend>
> <div class="input select"><label
> for="ServiceAreaTypeServiceAreaType"></label><input type="hidden"
> name="data[ServiceAreaType][ServiceAreaType]" value="" />
>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" checked="checked" value="18"
> id="ServiceAreaTypeServiceAreaType18" /><label
> for="ServiceAreaTypeServiceAreaType18" class="selected">Electric Power
> Sector</label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" checked="checked" value="19"
> id="ServiceAreaTypeServiceAreaType19" /><label
> for="ServiceAreaTypeServiceAreaType19" class="selected">Oil and Gas
> Sector</label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" checked="checked" value="20"
> id="ServiceAreaTypeServiceAreaType20" /><label
> for="ServiceAreaTypeServiceAreaType20" class="selected">Cement Sector</
> label></div>
> <div class="checkbox"><input type="checkbox" name="data
> [ServiceAreaType][ServiceAreaType][]" checked="checked" value="21"
> id="ServiceAreaTypeServiceAreaType21" /><label
> for="ServiceAreaTypeServiceAreaType21" class="selected">Manufacturing
> Sector</label></div>
> </div></fieldset>
>
> <input type="hidden" name="data[FirmProfile][id]" value="32"
> id="FirmProfileId" />
> <div class="submit"><input type="submit" value="Continue" /></div></
> form>
>
> I know this is a lot of code to wade through, but I'm at a brick wall
> and would definitely appreciate any wisdom! Thanks so much.
>
> -Scott
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---