我正在以编程方式构建一个具有两个选择框的自定义块。第一个是自动填充的,第二个是根据第一个的值填充的。理想情况下,我想使用AJAX,并且我有以标准形式集成AJAX的经验,但是块配置表单不包含$ form_state变量,并且似乎功能不同。可以使用标准方法吗?
'#ajax' => array(
'callback' => 'my_callback',
'wrapper' => 'the-id',
'method' => 'replace',
'effect' => 'fade',
),
回调如何运作?
谢谢, 豪伊
答案 0 :(得分:0)
我没有尝试过,但我敢打赌它有效:使用hook_form_alter()来访问您的块配置表单。在那里,你将有一个& $ form_state,并能够做一些奇特的AJAX东西(see this)。 困难的部分是只在改变方式改变你的形式。可能的方法:
不确定这是否有效(最优雅的方式):
function mymodule_form_alter(&$form,&$form_state,$form_id) {
if ($form_id == 'block_admin_configure' ) {
// Find the delta in the $form variable
if ($form['delta'] == 'the_delta_you_are_looking_for') {
//do fancy ajax stuff
}
}
}
丑陋但绝对可能:
function mymodule_form_alter(&$form,&$form_state,$form_id) {
if ($form_id == 'block_admin_configure' && arg(4) == 'mymodule') {
//do fancy ajax stuff
}
}
}
更加丑陋但也有可能:
function mymodule_block_configure($delta = '') {
$form = array();
if ($delta == 'my_block') {
$form["my_block_change_this"] = array(
"#type" => "hidden",
"#value" => "lalala",
)
}
}
function mymodule_form_alter(&$form,&$form_state,$form_id) {
if ($form_id == 'block_admin_configure' ) {
if (!empty($form['my_block_change_this'])) {
//do fancy ajax stuff
}
}
}
提示:打印出form_state-array(在alter hook中)并查看其中的内容(当我遇到FAPI-Issues时,这总是我做的第一件事)。希望这可以帮助。