Drupal 6:创建表单以创建节点。。!
我正在创建一个包含4个字段的自定义表单&我想创建一个特定内容类型的节点,其中包含一些CCK字段 我打算在提交此表格时按语法创建node。我计划推送一些字段的默认值,一些字段将映射到此表单小部件 这是我的密码Drupal 6:创建表单以创建节点。。!,drupal,form-api,Drupal,Form Api,我正在创建一个包含4个字段的自定义表单&我想创建一个特定内容类型的节点,其中包含一些CCK字段 我打算在提交此表格时按语法创建node。我计划推送一些字段的默认值,一些字段将映射到此表单小部件 这是我的密码 <?php require 'modules/node/node.pages.inc'; /** * Implements hook_menu(). */ function taskform_menu() { $items = array(); $items['ad
<?php
require 'modules/node/node.pages.inc';
/**
* Implements hook_menu().
*/
function taskform_menu() {
$items = array();
$items['admin/content/taskform'] = array(
'title' => 'Add Task',
'page callback' => 'drupal_get_form',
'page arguments' => array('taskform_form'),
'access arguments' => array('create create_task content'),
);
return $items;
}
global $user;
function taskform_perm() {
return array('Submit daily task');
}
function taskform_form(&$node)
{
$form['date'] = array(
'#type' => 'date',
'#title' => t('Date'),
);
$form['edproject'] = array(
'#type' => 'select',
'#title' => t('Project'),
'#options' => array(
1 => 'Konnected',
2 => 'eLearning',
3 => 'Others',
),
'#description' => t('Choose a project'),
);
$form['task'] = array(
'#type' => 'textfield',
'#title' => t('Task'),
'#size' => 30,
'#required' => TRUE,
'#maxlength' => 30,
'#description' => t('Enter the task'),
);
$form['remarks'] = array(
'#type' => 'textfield',
'#title' => t('Remarks'),
'#size' => 30,
'#description' => t('Enter remarks (If any).'),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Add Task'),
'#submit' => array('taskform_form_submit'),
);
return $form;
}
function taskform_form_submit($form, &$form_state) {
$node = new stdClass();
$node->type = 'create_task';
$node->uid = $user->uid;
$node->title = $form_state['values']['task'];
$node->body = $form_state['values']['task'];
$node->status = 1;
$node->promote = 0;
$node->field_assigned_uid[]['uid'] = $user->uid;
node_object_prepare($node);
$node = node_submit($node);
if ($node->validated) {
node_save($node);
}
else{
t("Node not created");
}
}
现在,当我提交此文件时,它正在创建一个内容类型,其中文本字段text为title和body,我打算这样做…但我想将UIDLoged存储在表节点的uid列中的用户ID中…正如您所看到的,我已经尝试过这样做…但它仍然发送0。。。
我需要这方面的帮助…请帮助我,为每个提交的Web表单创建一个节点不是一个好主意。瘸的 您总是可以定制节点表单来完成webform所做的工作,因此它是一种直接的设置。此外,您可以轻松访问每个提交的数据,而且webform已经具有视图集成,所以我不知道为什么需要创建节点 但是,如果您仍然需要继续,我建议最好的方法是使用WebForm3之后的webform新挂钩。 看
您需要使用webform有什么特别的原因吗?通过为此创建特定的内容类型并授予匿名用户提交权限,您似乎可以获得更多的控制权,减少问题。然后,您可以获得一个模块,该模块提供字段级权限,并拒绝访问您不希望接触的字段,以确保这些字段不是必需的
我是否遗漏了您需要的内容?谢谢您的回复。我有一些问题..我尝试在formAPI的帮助下制作表单,并通过node_save提交值。使用此函数,我无法成功地将用户输入数据的值映射到节点表,但此函数只是用空白字段填充节点。现在,正如你建议我的那样…我可以尝试通过WebFormHook的帮助来实现,但问题是..如何通过这个钩子通过代码创建表单小部件?或者,请建议我在从界面制作Web表单后将此代码放在何处。。谢谢,实际上我有一个包含一些CCK字段的内容类型,它列在一个组中。如果一个用户去那里并通过点击创建内容,那么我必须显示每个要填充的字段。。但我必须制作一个只有4个字段的表单,我将在不同的地方显示,从那里我只想快速创建之前的内容。。。这就是要求…我能解释一下吗?啊,好的。嗯,我可能会建议你用编程的方式创建表单,而不是使用Webform,但是你似乎已经很熟悉它了,所以我能做的就是祝你好运!
<?php
function MYMODULE_webform_submission_insert($node, $submission) {
// print the submitted values object's information as a message.
// Once you have grabbed the necessary data, remove this line.
drupal_set_message('<pre>'.print_r($submission, TRUE).'</pre>');
// Now, grab the fields you want and map them to the $node object below.
$node = new stdClass();
$node->title = 'Webform submission: '$submission->sid;
$node->body = 'test body';
$node->type = 'story';
$node->created = time();
$node->status = 1; //published.
$node->promote = 1;
$node->sticky = 0;
$node->format = 1;
$node->uid = 1; // author!
if ($node = node_submit($node)) {
node_save($node);
}
else {
// error creating node.
}
}