2009-12-09 3 views
3

Привет, эксперты в области пирожных! Я ищу вам помощь в раскрывающемся списке dyanmic с dyanamic optgroup. Предположим, у меня есть две таблицы:Выпадающий список с dyanmic optgroup

countries: id, country_name, 

counties: id, county_name, country_id 

Теперь я хочу, чтобы отобразить выпадающий список с optgroups населенных FRM стран таблицы и элементы списка заселенных из графств.

country_name1 

     county_name1 

     county_name2 

country_name2 

     county_name3 

     county_name4 

country_name3 

     county_name4 

     county_name5 

....... 

Заранее благодарим за помощь!

ответ

19

торта F Метод ormHelper :: input будет отображать тег select с optgroups, если параметры верны, например.

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

при условии, есть переменная доступна в представлении под названием $ графств, который содержит данные в следующем формате:

$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', 
), 
); 

Таким образом, в вашем контроллере, сделать что-то вроде:

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

и в вашей стране Модель, сделайте что-нибудь вроде:

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

ничего себе .. это симпатичный .. спасибо много – leo

+0

STILL очень полезно, спасибо. –

1

связывают TableB с TABLEA в TABLEA модели, сделать

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

затем использовать

find("all") 

может понадобиться

$this->tableA->recursive->2 

перед найти

+0

нет чувак, это не работает – leo

0

Вы также можете использовать Hash :: совмещать функцию вместо вложенного цикла, как предложено @neilcrookes

 

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