我正在研究drupal 7模块,我希望在页面上打印信息(MENU_LOCAL_TASK节点/%node / something),带有ajax过滤器。
我创建了一个表单并添加了2个复选框,1表示默认情况下其他表示没有。我想根据选中的复选框向用户显示信息。 1表示在表格行1上显示,2表格在表格2上显示。如果其中一些是关闭的,那么表行就会关闭。我提到过,我想解决它而不提交和重新加载,只有ajax。
我将两个“复选框”添加到以下'ajax' => array('callback' => 'my_module_callback')
。这是代码的其余部分,简化了。
function my_module_callback($form, $form_state) {
$data = array();
$nid = 1;
if ($form_state['values']['checkbox1']) {
$data += load_data($nid, "checkbox1");
}
if ($form_state['values']['checkbox1']) {
$data += load_data($nid, "checkbox2");
}
$commands[] = ajax_command_html("#here", my_module_table($data));
return array('#type' => 'ajax', '#commands' => $commands);
}
function my_module_table($data){
//do some stuff with the data in a foreach
return theme("my_module_fancy_table",array("data" => $data));
}
function theme_my_module_fancy_table($data){ //registered with my_module_theme()
// putting html into $output in a foreach
return $output;
}
function my_module_page_callback_from_menu_function($nid){
$output = drupal_render(drupal_get_form('my_module_custom_ajax_form'));
$output .= "adding other stuffs including div#here";
return $output;
}
首先,这是做这件事的“好方法”,因为我有点失去信心:) 第二个问题,如何在页面加载时显示数据,现在需要更改一个复选框以查看一些信息。
感谢和抱歉简短说明:)
答案 0 :(得分:1)
你不应该真的在回调中进行处理,它应该在表单构建函数中完成。回调通常只返回已更改的表单部分。此外,我不认为在这种情况下不需要设置命令[],因为表单的返回部分将自动替换'wrapper'设置的内容。
function my_module_form($form, $form_state){
$data = array();
$nid = 1;
if ($form_state['values']['checkbox1']) {
$data += load_data($nid, "checkbox1");
}
if ($form_state['values']['checkbox2']) {
$data += load_data($nid, "checkbox2");
}
$form = array();
$form['checkbox1'] = array(
'#type' => 'checkbox',
'#ajax' => array(
'callback' => 'my_module_callback'
'wrapper' => 'mydata',
'event' => 'change',
),
);
$form['checkbox2'] = array(
'#type' => 'checkbox',
'#ajax' => array(
'callback' => 'my_module_callback'
'wrapper' => 'mydata',
'event' => 'change',
),
);
$form['mydata'] = array(
'#prefix' => '<div id="mydata">',
'#suffix' => '</div>',
'#markup' => my_module_table($data),
);
return $form;
}
function my_module_callback($form, $form_state){
// $form_state['rebuild'] = true; may have to be set because the form has not been submitted and wont be rebuilt...I think, I cant remember for sure.
return $form['mydata'];
}
要显示页面加载的数据,您只需在表单构建功能中更改设置数据的逻辑。 另外,fyi,有一个专门用于drupal的堆栈站点:http://drupal.stackexchange.com