gpt4 book ai didi

api - 一页上的 drupal 多节点表单

转载 作者:行者123 更新时间:2023-12-02 00:43:40 25 4
gpt4 key购买 nike

我有一个显示多个节点的 View 。我想在每个显示的节点下方放置节点表单。直接在 template.php 中的 node_adddrupal_get_form 工作正常,但我得到的表单 ID 与 NODETYPE_node_form 相同,验证和提交不起作用正如预期的那样。

如果您必须在一个页面上放置多个节点表单,您的一般做法是什么?

到目前为止的进展...

在预处理节点时在 template.php 中之前设置了 $author_profile 和 $content。

$unique = $vars['node']->nid;

$node = new StdClass();
$node->uid = $vars['user']->uid;
$node->name = $vars['user']->name;
$node->type = 'review';
$node->language = '';
$node->title = t('Review of ') . $vars['node']->realname . t(' by ') . $vars['user']->realname . t(' on ') . $content->title;
$node->field_review_to_A[0]['nid'] = $nodeA->nid;
$node->field_review_to_B[0]['nid'] = $vars['node']->nid;
$node->field_review_to_profile[0]['nid'] = $author_profile->nid;

if(!function_exists("node_object_prepare")) {
include_once(drupal_get_path('module', 'node') . '/node.pages.inc');
}

//$vars['A_review_form'] = drupal_get_form('review_node_form', $node);
$vars['A_review_form'] = mymodule_view($node, $unique);

在 mymodule 模块中

function mymodule_view($node, $unique) {
if(!function_exists("node_object_prepare")) {
include_once(drupal_get_path('module', 'node') . '/node.pages.inc');
}
$output = drupal_get_form('review_node_form_' . $unique, $node);
return $output;
}

function mymodule_forms($form_id, $args) {
$forms = array();
if (strpos($form_id, "review_node_form_") === 0) {
$forms[$form_id] = array('callback' => 'node_form');
}
return $forms;
}


function mymodule_form_alter(&$form, $form_state, $form_id) {
if (isset($form['type']) && isset($form['#node']) && $form_id != $form['type']['#value'] .'_node_form' && $form['type']['#value'] == 'review') {
$type = content_types($form['#node']->type);
if (!empty($type['fields'])) {
module_load_include('inc', 'content', 'includes/content.node_form');
$form = array_merge($form, content_form($form, $form_state));
}
$form['#pre_render'][] = 'content_alter_extra_weights';
$form['#content_extra_fields'] = $type['extra'];

//$form['#id'] = $form_id;
//$form['#validate'][0] = $form_id . '_validate';

$form['title']['#type'] = 'value';
$form['field_review_to_A']['#type'] = 'value';
$form['field_review_to_B']['#type'] = 'value';
$form['field_review_to_profile']['#type'] = 'value';
}
}

问题

我对总结不清楚的问题的看法...

  1. 这是在同一页面上显示多个节点表单的通用方法吗?
  2. 是否可以从content 模块复制/粘贴代码content_form_alter函数 mymodule_form_alter 中的函数?如果更新了 content 模块,它不会刹车吗?
  3. 我应该设置 $form['#id'] 吗?没有它,所有表单都有相同的 HTML 表单 ID node_form,有了它 ID 是唯一的,比如 review_node_form_254。问题是表单的提交方式没有区别。设置 $form['#validate'][0] 似乎也不会影响事情。也许我应该将 $form[button]['#submit'][0] 设置为其他内容?现在是 node_form_submit
  4. 为什么即使使用唯一的表单 ID 和表单验证功能,验证也不起作用?如果我在没有必填字段的情况下提交最后一份表格,所有以前的表格都会将特定字段变为红色。我应该制作自己的验证功能吗?什么级别 - 形式或领域?关于从哪里开始的任何提示?

最佳答案

您需要实现 hook_forms()将不同的 ID 映射到相同的构建器函数。

您提到的 NODETYPE_node_form id 已经是这种机制的一个例子,因为它们都映射到节点模块 node_form() 中的相同构建器函数( node_forms() )实现。

您可以在 drupal_get_form() 的“参数”解释中找到更多示例的链接。功能。

关于api - 一页上的 drupal 多节点表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com