xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Код, который возвращает в переменную $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
Похожие записи

Комментарии RSS

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

без разницы

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

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

'body' => array(LANGUAGE_NONE=>array(0=>array('value'=>$body_text)))
, и на долю секунды при открытии формы я вижу этот текст в поле body, но потом прогружается редактор, и поле очищается.. Как этого избежать?

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

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

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

Решил:

  $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);

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

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

Добрый день

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

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

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

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

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

Спасибо

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

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

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании