Drupal ajax表单,部分渲染

时间:2013-11-21 15:00:28

标签: ajax drupal

美好的一天。 我在我的模块中创建了自定义表单,并定义了这样的提交按钮:

$form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
    '#ajax' => array(
        'callback' => 'fmg_addbanner_ajax_callback',
        'method' => 'replace',
        'wrapper' => 'banner_add_wrapper'
    )
);

然后输出我的表格:

$form = drupal_get_form('fmg_banner_add_form', $region_id);
print render($form);

但是ajax请求不起作用。我认为因为没有必要的drupal js文件。我怎么解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

正常情况是将#ajax附加到常用输入,如复选框,文本框等。

行为是当用户更改输入值时,它将通过ajax触发你的回调并发送整个表单,然后你可以在场景后处理这个表单并在发送表单之前调整某些内容并更改元素到你定义的包装器。

我对部分表单呈现的一个问题是,我需要执行一些ajax调用或将部分表单元素注入页面的某个区域,同时保持表单呈现的完整性。 (我不知道究竟是什么形式的构建,我想我不想知道)

由于表单渲染使用可渲染数组,如果你只想提取某个元素,你可以这样做

$form = drupal_get_form('application_form');
$body = render($form['body']);

以下是一个真实示例,我将表单分成页眉,页脚和其余表单元素。

// get a form for updating application info.
$form = drupal_get_form('pgh_awards_review_application_form', $app);
$elements = array();
$form_render = render($form);
$elements = array(
    'qualify' => render($form['qualify']),
    'threshold_met' => render($form['threshold_met']),
    'submit' => render($form['submit']),
);
if (preg_match('/<form.+div>/', $form_render, $matches)) {
    $elements['header'] = $matches[0];
}
if (preg_match('/<input type="hidden".+form>/s', $form_render, $matches)) {
    $elements['footer'] = $matches[0];
}
$vars['form'] = $elements;

这绝对不是很好的方法,它只是满足当前的需求。