Drupal 6: การสร้างฟอร์มเพื่อสร้างโหนด..!

ฉันกำลังสร้างแบบฟอร์มที่กำหนดเองที่มี 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 อยู่...ผมต้องการความช่วยเหลือในเรื่องนี้...กรุณาช่วยด้วย


person RajeevK    schedule 31.05.2012    source แหล่งที่มา


คำตอบ (2)


IMO ไม่ใช่ความคิดที่ดีที่จะสร้างโหนดสำหรับการส่งเว็บฟอร์มแต่ละครั้ง ไม่ได้เรื่อง. คุณสามารถปรับแต่งโหนดฟอร์มให้ทำแบบเดียวกับที่เว็บฟอร์มทำได้ตลอดเวลา ดังนั้นจึงเป็นการตั้งค่าที่ตรงไปตรงมา นอกจากนี้คุณยังสามารถเข้าถึงข้อมูลของการส่งแต่ละครั้งได้อย่างง่ายดาย และเว็บฟอร์มมีการผสานรวม Views อยู่แล้ว ฉันจึงไม่รู้ว่าทำไมคุณต้องสร้างโหนด

อย่างไรก็ตาม หากคุณยังต้องดำเนินการต่อ วิธีที่ดีที่สุดที่ฉันแนะนำคือการใช้ hooks ใหม่ของ 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. 
}
}
person AKS    schedule 31.05.2012
comment
ขอบคุณสำหรับการตอบกลับ ฉันมีคำถามบางอย่าง .. ฉันลองสร้างแบบฟอร์มด้วยความช่วยเหลือของ formAPI และส่งค่าผ่าน node_save() ฉันไม่ประสบความสำเร็จในการแมปค่าของข้อมูลอินพุตของผู้ใช้กับตารางโหนดด้วยฟังก์ชันนี้ แต่ฟังก์ชันนี้เป็นเพียงการสร้างโหนดที่มีฟิลด์ว่าง ดังที่คุณแนะนำผมไปแล้ว...ผมสามารถลองทำโดยใช้ webform hook ก็ได้ แต่คำถามคือ..จะสร้าง form widget ด้วยโค้ดโดยใช้ hook นี้ได้อย่างไร? หรือกรุณาแนะนำฉันว่าจะวางโค้ดนี้ไว้ที่ไหนหลังจากสร้างเว็บฟอร์มจากอินเทอร์เฟซ .. ขอบคุณ - person RajeevK; 01.06.2012

มีเหตุผลพิเศษที่คุณต้องใช้เว็บฟอร์มหรือไม่? ดูเหมือนว่าคุณจะควบคุมได้มากขึ้นและมีปัญหาน้อยลงด้วยการสร้างประเภทเนื้อหาเฉพาะสำหรับสิ่งนี้ และให้สิทธิ์แก่ผู้ใช้ที่ไม่ระบุชื่อในการส่งเนื้อหาดังกล่าว จากนั้น คุณจะได้รับโมดูลที่ให้สิทธิ์ระดับฟิลด์และปฏิเสธการเข้าถึงฟิลด์ที่คุณไม่ต้องการให้แตะต้อง (ตรวจสอบให้แน่ใจว่าไม่จำเป็น)

ฉันขาดอะไรบางอย่างจากสิ่งที่คุณต้องการหรือเปล่า?

person TelFiRE    schedule 31.05.2012
comment
จริงๆ แล้วฉันมีประเภทเนื้อหาที่มีช่อง CCK บางช่อง..และอยู่ในกลุ่มเดียว หากผู้ใช้ไปที่นั่นและสร้างเนื้อหาโดยคลิกที่นั้น ฉันจะต้องแสดงทุกฟิลด์ที่ต้องกรอก.. แต่ฉันต้องสร้างแบบฟอร์มที่มีเพียง 4 ฟิลด์ ซึ่งฉันจะแสดงในตำแหน่งที่แตกต่างกัน และจากที่นั่นฉันแค่อยากสร้าง เนื้อหาก่อนหน้านั้นอย่างรวดเร็ว... นี่คือข้อกำหนด...ฉันสามารถอธิบายได้หรือไม่? - person RajeevK; 01.06.2012
comment
อ่าโอเค. ฉันอาจแนะนำให้สร้างแบบฟอร์มโดยทางโปรแกรม (เช่น: krlucas.com/blog/2009/07/19/) แทนที่จะใช้ Webform แต่ดูเหมือนว่าคุณจะคุ้นเคยกับมันแล้ว ดังนั้นสิ่งที่ดีที่สุดที่เราทำได้คือขอให้คุณโชคดี! - person TelFiRE; 01.06.2012