Drupal → Как программно вывести форму создания ноды

21.12.2010

Код, который возвращает в переменную $output форму создания материала типа article:

Drupal 7:

module_load_include('inc', 'node', 'node.pages');
$type = 'article';
$node = (object)array(
  'uid' => $GLOBALS['user']->uid,
  'name' => isset($GLOBALS['user']->name) ? $GLOBALS['user']->name : '',
  'type' => $type,
  'language' => LANGUAGE_NONE
);
$form = drupal_get_form($type . '_node_form', $node);
$output = render($form);

или:

module_load_include('inc', 'node', 'node.pages');
$form = node_add('article');
$output = render($form);

Drupal 6:

module_load_include('inc', 'node', 'node.pages');
$type = 'article';
$node = array(
  'uid' => $GLOBALS['user']->uid,
  'name' => isset($GLOBALS['user']->name) ? $GLOBALS['user']->name : '',
  'type' => $type,
  'language' => ''
);
$output = drupal_get_form($type . '_node_form', $node);
Написанное актуально для
Drupal 6, Drupal 7
Похожие записи

Комментарии

А почему не global $user; вместо $GLOBALS['user'] ?

а возможно как-то создать объект $form, а не уже готовую к показу html-форму?

А можно как-то вывести в эту форму в поле Body дефолтный предустановленный текст, если стоит TinyMCE?
Добавляю в массив $node строчку

'body' => array(LANGUAGE_NONE=>array(0=>array('value'=>$body_text)))

, и на долю секунды при открытии формы я вижу этот текст в поле body, но потом прогружается редактор, и поле очищается.. Как этого избежать?

Игорь
20.12.2012, 12:31

Возможно, это тема для отдельной статьи, но очень интересует вопрос:
Как программно вывести форму создания entiy_type entity_bungle
то есть для типа сущности созданного с помощью модуля Entity API?
Здесь: Работа с сущностями с помощью Entity metadata wrappers почитал, но ответа не нашел.
пытался так:

print render(drupal_get_form('eck__entity__form_edit_{entiy_type}_{entiy_bungle}');

но не работает, то ли надо какой-то файлик подключить, то ли другой id формы, то ли надо ещё какую-то сущность типа $node получить...

Игорь
20.12.2012, 13:15

Решил:

  $entity = entity_create('{entiy_type}', array());
  $entity->type = '{entiy_bungle}';
  $form = drupal_get_form('eck__entity__form_add_{entiy_type}_{entiy_bungle}', $entity);
  print render($form);
Гость
09.01.2013, 01:30

Хочу сказать, что в этом способе не будут работать дефолтные ajax виджеты, типа аплоада файлов и т.д..

Ильдар
19.06.2013, 15:00

о спасибо!!! не понимал почему у меня форма не отображалось, оказываться надо было include делать эххх

Добрый день

Пытаюсь использовать тип материала в качестве "отзыва".

Видел в некоторых проектах возможность оставлять отзыв, только один раз в каждой ноде.
Отзывы можно комментировать без ограничений.

Как пример можно взять тостер.

Попробовал вывести как вы предложили, но вероятно нужно еще связать ноды.

Не могли бы вы подсказать, как это сделать ?

Спасибо

нужно еще связать ноды

с чем связать? какие ноды?

Не ноды, а типы материала.

Основные и те которые в качестве отзыва.

Гость
01.09.2014, 14:07

как сделать чтобы работали дефолтные ajax виджеты, типа аплоада файлов и т.д.. ?

Добавить комментарий