У меня есть форма Drupal, написанная на PHP, конечно, с двумя селекторами. Первая содержит список тем Drupal, а вторая - список доступных регионов. В Drupal определенные темы имеют определенные регионы, в которые можно поместить блоки, поэтому при выборе темы я хочу, чтобы селектор регионов заполнялся доступными опциями, связанными с выбранной темой.
Я хочу, чтобы мой javascript-файл использовал jQuery для прослушивания селектора тем, чтобы при изменении он обновлял селектор регионов.
У меня есть модуль PHP, настроенный таким образом, что существует двумерный массив значений, такой что array ['theme'] = array () возможных значений области. Как это:
Array
(
[garland] => Array
(
[left] => left
[] =>
[right] => right
)
[zen] => Array
(
[] =>
[sidebar_first] => sidebar_first
[sidebar_second] => sidebar_second
)
)
Что делается с помощью этого кода:
$themeQuery = db_query('SELECT DISTINCT theme from {blocks}');
while($row = db_fetch_object($themeQuery)){
$regionQuery = db_query('SELECT DISTINCT region from {blocks} WHERE theme="%s"',$row->theme);
while($regions = db_fetch_object($regionQuery)){
$regionOptions[$row->theme][$regions->region] = $regions->region;
}
$themeOptions[$row->theme] = $row->theme;
}
А вот форма:
$form = array();
$form['title'] = array(
'#type' => 'markup',
'#value' => '<br/><h4>Update block: <strong>'.$module.': '.$delta.'</strong></h4>'
);
$form['theme'] = array(
'#title' => 'Theme',
'#type' => 'select',
'#options' => drupal_map_assoc($themeOptions),
'#default_value' => $currentTheme,
);
$form['region'] = array(
'#title' => 'Region',
'#type' => 'select',
'#options' => array(''),
'#default_value' => $currentRegion,
);
Все, что мне действительно нужно сделать, это вставить двумерный массив $ regionOptions в javascript! Я пробовал drupal_to_js и drupal_add_js, но это не сработало!
Javascript таков:
$(document).ready(function(){
$('#edit-theme').change(function(){
alert(Drupal.settings.regions[$(this).val()]);
});
});
Вот моя попытка drupal_add_js (в коде PHP):
drupal_add_js(array('regions' => $regionOptions),'setting');
Эта функция работает, если я пытаюсь сделать:
drupal_add_js(array('regions' => 'test'),'setting');
А затем позвоните в JavaScript:
alert(Drupal.settings.regions);
Оповещение «тест».
Надеюсь, я правильно спросил, спасибо:)