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 (зарегистрированный идентификатор пользователя) в столбце uid узла таблицы ... и я попытался сделать это, как вы можете видеть ... но он все равно отправляет 0 ... Мне нужна помощь в этом ... пожалуйста, помогите


person RajeevK    schedule 31.05.2012    source источник


Ответы (2)


ИМО, создавать узел для каждой отправки веб-формы - не лучшая идея. Хромой. Вы всегда можете настроить форму узла под то, что делает веб-форма, так что это простая настройка. Кроме того, вы можете легко получить доступ к данным каждого представления, а веб-форма уже имеет интеграцию с представлениями, поэтому я не знаю, зачем вам создавать узел.

Однако, если вам все еще нужно идти вперед, лучший способ, который я предлагаю, - это использовать новые хуки 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, но вопрос в том ... как создать виджет формы по коду с помощью этого хука? Или, пожалуйста, предложите мне, где разместить этот код после создания веб-формы из интерфейса. Спасибо - 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