如何在Drupal 7中以表单更改形式使用Ajax?


8

我创建了一个名为“主菜单”的内容类型。我只有几个相互依赖的选择列表。当要选择不同的复选框时,我想显示一个不同的列表。我发现需要使用Ajax来编辑表单才能实现这一点,但是谁能告诉我如何将Ajax与hook_form_alter一起使用?

我应该编辑的表单的表单ID是“ main_menu_node_form”。当我尝试使用hook_form_alter()并添加#ajax表单字段的属性来访问此表单时,似乎无法执行此操作,因为在将句柄传递给之前已经渲染了这些字段hook_form_alter()。谁能帮我解决这个问题?

注意:我已经使用创建了内容类型hook_install()

function main_menu_content_type_form_main_menu_node_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
  dpm($form_state);

  $form['field_mlnk'] = array(
    '#ajax' => array(
      'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
      'wrapper' => 'link-div',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );
}

1
查看您尝试更改的表单的代码以及用于更改它的代码将很有帮助。
kiamlaluno

@kiamlaluno我已经使用hook_install函数创建了内容类型main_menu。我想显示字段,同时根据列表中的选择添加内容。我应该在hook_install或Hook_form_alter中添加ajax属性。
Drupal开发人员

不过,查看您正在使用的代码还是很有用的hook_form_alter()(如您所写,“当我尝试使用alter […[…]表单访问此表单时”)。
kiamlaluno

@kiamlaluno我已将代码段添加到我的问题中。请看一下,然后告诉我代码是否有效。
Drupal Developer

如果您还显示的代码,那将是完美的main_menu_content_type_form_main_menu_node_form_alter_callback();如果该函数包含错误的代码,则用户无法报告您应该对代码进行的任何更改以使其正常运行。
kiamlaluno

Answers:


7

如果您包含自定义模块中的一些实际代码,我将能够为您提供有关hook_form_alter做错事情的详细信息。但是,由于您没有提供任何细节,因此可以观看以下视频:如何在Drupal 7中构建漂亮的表单(请注意,我输入的URL是从描述ajax的那一刻开始的)。大约5分钟的观看时间可能会为您提供问题的答案(因为它准确地描述了如何在hook_form_alter中使用ajax),但是如果您实在不耐烦,那么实际的代码将显示在此处

如果您想查看一个使用ajax更改表单的实时,经过良好测试和记录的示例,示例模块中提供了一个示例。你可以找到实际钩这里和回调函数在这里

我希望这有帮助。如果没有,请给我们更多有关您的代码的背景知识,我们将能够准确告诉您您在做什么错。


@ F123K我想更改表单中的现有字段,而不是向表单中添加新字段。所以,请告诉我该怎么做。
Drupal Developer

使用示例挂钩和回调函数编辑的帖子。
F1234k'4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.