0

我正在创建一个包含 4 个字段的自定义表单,并且我想创建一个具有一些 CCK 字段的特定内容类型的节点。

我打算在提交此表单时以编程方式创建节点。我计划为某些字段推送默认值,并且某些字段将使用此表单小部件映射..

这是我的代码

 <?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");
    }


}

现在,当我提交此内容时,它正在创建内容类型,其中文本字段文本作为标题和正文,我打算这样做......但我想将 UID(登录用户 ID)存储在表节点的 uid 列中...我已经尝试过,如您所见...但它仍然发送 0...我需要帮助...请帮助

4

2 回答 2

0

IMO,为每个 webform 提交创建一个节点并不是一个好主意。瘸。您始终可以定制节点表单以执行 webform 所做的操作,因此这是一个简单的设置。此外,您可以轻松访问每个提交的数据,并且 webform 已经集成了 Views,所以我不知道您为什么需要创建一个节点。

但是,如果您仍然需要继续,我建议的最好方法是使用 webform 的新钩子(从 Webform 3 开始)。见hook_webform_submission_insert

<?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. 
}
}
于 2012-05-31T21:10:45.323 回答
0

您需要使用网络表单有什么特别的原因吗?通过为此创建特定的内容类型并授予匿名用户提交的权限,您似乎可以拥有更多的控制权和更少的问题。然后,您可以获得一个模块,该模块提供字段级权限并拒绝访问您不希望他们接触的字段(确保它们不是必需的)。

我错过了你需要的东西吗?

于 2012-05-31T23:57:41.863 回答