Drupal7块配置AJAX
我正在以编程方式构建一个具有两个选择框的自定义块。第一个将自动填充,第二个将基于第一个的值填充。理想情况下,我希望使用AJAX,并且我有在标准表单中集成AJAX的经验,但是块配置表单不包含$form_状态变量,并且似乎功能不同。是否可以使用标准方法Drupal7块配置AJAX,ajax,forms,callback,drupal-7,block,Ajax,Forms,Callback,Drupal 7,Block,我正在以编程方式构建一个具有两个选择框的自定义块。第一个将自动填充,第二个将基于第一个的值填充。理想情况下,我希望使用AJAX,并且我有在标准表单中集成AJAX的经验,但是块配置表单不包含$form_状态变量,并且似乎功能不同。是否可以使用标准方法 '#ajax' => array( 'callback' => 'my_callback', 'wrapper' => 'the-id', 'method
'#ajax' => array(
'callback' => 'my_callback',
'wrapper' => 'the-id',
'method' => 'replace',
'effect' => 'fade',
),
回调将如何工作
谢谢,
Howie我没有尝试这个方法,但我打赌它是有效的:使用hook\u form\u alter()访问块配置表单。在那里,您将有一个&$form_状态,并且能够完成漂亮的AJAX工作()。 困难的部分是只在改变钩处改变你的形态。可能的方式: 不确定这是否有效(最优雅的方式): 丑陋但绝对可能:
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
}
}
}
甚至更丑陋,但也有可能:
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(在alterhook)并查看其中的内容(当我遇到FAPI问题时,这总是我要做的第一件事)。希望这有帮助 我很难过这没有任何回应。你有没有试过让它工作或者找到你的答案?后续链接会很棒,因为我正在做完全相同的事情。