2009-12-09 4 views
3

Salut les experts en cakephp! Je vous demande de l'aide sur une liste déroulante dyanmique avec danyamic optgroup. Supposons que j'ai deux tables:Liste déroulante avec dyanmic optgroup

countries: id, country_name, 

counties: id, county_name, country_id 

Maintenant, je veux afficher une liste déroulante avec optgroups population table de pays FRM et éléments de la liste des comtés peuplés.

country_name1 

     county_name1 

     county_name2 

country_name2 

     county_name3 

     county_name4 

country_name3 

     county_name4 

     county_name5 

....... 

Merci d'avance et apprécions toute aide !!

Répondre

19

F Cake La méthode d'entrée ormHelper :: rendra une balise select avec optgroups si les options sont correctes, par ex.

echo $form->input('county'); 

condition qu'il y ait une variable disponible dans la vue appelée comtés $ qui contient des données dans le format suivant:

$counties = array(
    'Country Name 1' => array(
    'county_1_id' => 'County 1 Name', 
    'county_2_id' => 'County 2 Name', 
    'county_3_id' => 'County 3 Name', 
), 
    'Country Name 2' => array(
    'county_4_id' => 'County 4 Name', 
    'county_5_id' => 'County 5 Name', 
    'county_6_id' => 'County 6 Name', 
), 
); 

Ainsi, dans votre contrôleur, faire quelque chose comme:

$this->set('counties', ClassRegistry::init('Country')->getCountiesByCountry()); 

et dans votre modèle de pays, faire quelque chose comme:

function getCountiesByCountry() { 
    $countries = $this->find('all', array('contain' => array('County'))); 
    $return = array(); 
    foreach ($countries as $country) { 
    foreach ($country['County'] as $county) { 
     $return[$country['Country']['name']][$county['id']] = $county['name']; 
    } 
    } 
    return $return; 
} 
+0

wow .. c'est belle .. merci beaucoup – leo

+0

encore très utile, merci. –

1

lient tableB à tableA dans le modèle de tableA, faire

$hasMany = array("tableB"=>array("className"=>"tableB","foreignKey"=>"aId")); 

puis utilisez

find("all") 

pourraient avoir besoin

$this->tableA->recursive->2 

droit trouver avant

+0

pas mec, ça ne fonctionne pas – leo

0

Vous pouvez également utiliser la fonction Hash :: combiner au lieu d'une boucle imbriquée comme suggéré par @neilcrookes

 

$counties = Hash::combine($countries,'{n}.County.id','{n}.County.name','{n}.Country.name'); 
 
Questions connexes