【发布时间】:2011-07-25 20:00:04
【问题描述】:
我有一个 Drupal 表单,当然是用 PHP 编写的,它有两个选择器。第一个是 Drupal 主题列表,第二个是可用区域列表。 In Drupal, certain themes have certain regions which are available to put blocks into so when a theme is chosen, I want the region selector to be populated by the available options associated to the selected theme.
我希望我的 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);
它确实会提醒“测试”。
希望我问对了,谢谢:)
【问题讨论】:
-
不知道这是否会有所帮助,但 Drupal 有一些您可以利用的内置 ajax 功能:drupal.org/node/752056
-
谢谢!我确实弄清楚了如何仅使用 PHP 和 jQuery 来完成,并在下面解释了我的步骤
标签: jquery forms drupal dynamic selector