Какими модулями можно решить следующую задачу:
Надо поднять (например в модальном окне) форму добавления материала определенного типа. При этом для заполнения показать только нужные поля, т.е. не показывать все.
Для примера. Есть тип материала "Клиент". В нем множество полей CCK (различные характеристики). Надо поднять форму добавления, где пользователь должен будет заполнить всего 2-3 CCK поля. Остальные поля он потом может при необходимости отредактировать.
Комментарии
вручную, через хук hook_form_alter()
нах хук?
можно просто вручную получить данные из любой самодельной формы и записать их через node_save(). Я бы так поступил а не хукил всю форму.
<?php
global $user;// текущий юзер $new_node = new StdClass();
$new_node->title=$_POST['title'];
$new_node->teaser=$_POST['text'];
$new_node->body=$_POST['text'];
$new_node->taxonomy = array($_POST['term_id']);// таксономия
// далее служебные данные
$new_node->uid = $user->uid;$new_node->name = $user->name;
$new_node->status=1;// Опубликовано
$new_node->promote=0;// На главную
$new_node->sticky = 0;// Прилеплена
$new_node->type='my_fucking_node'; // Тип ноды
$new_node->language = 'ru';//язык
//$new_node->format = 1;//Формат ввода Filtred Html
$new_node->format = 2;//Формат ввода Full Html
$new_node->created=time();// время создания
$new_node->changed=time();// время обновления
$new_node->validated = TRUE;// типа проверенная, вродек как очень обязательная,
//а то CCK поля не запишутся простым node_save, нужно будет делать submit
//заполнение полей ноды
$new_node->field_firma = array(0 => array('nid' => $_POST['node_id']));// страница фирмы номер ноды для нодреференса$new_node->field_director = array(0 => array('value' => $_POST['FIO']));// директор текстовое CCK поле node_save(&$new_node);// Сохранение ноды
?>
Надеюсь все поняли что это пример, и что пихать в ноду не проверенные данные из POST неразумно.
И что, пробовал такой вариант и сработало? Или теоретический свист?
PS Действительно, скрыть несколько полей через unset элемента массива $form намного сложнее, чем писать весь этот бред, непонятно ещё в каком месте.
Я не думаю что у Вас есть желание со мной поспорить но все-же:
На задачу нужно смотреть комплексно, а не с чьей либо колокольни. Я же понимаю что после ансета в формальтере, последует вопрос "а как мне эту самую форму с анситиными полями вывести яваскриптом или во флеш с всплывающим банером". Так вот что бы этого вопроса не было, человек, который не знает апи drupal (а если вчитаться в вопрос он апи точно не знает) создает обычную форму с пост запросом на том на чем может и отсылает по сабмиту в супурпуперимяфайла.php в котором в начале прописано
<?php
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
а далее то что я привел + личные исправления. Приведеный код создает ноду из данных пришедших пост-запросом из любой внешней формы ( вот здесь Вы можете почитать о суперглобальном массиве $_POST) в которой предварительно настроены cck поля.
Я понял что Вам сложно разобраться в 30-ти строчках простого кода, поэтому расшифрую(хотя в коде есть каменты)
В случае кода указанного выше тип материала должен 'my_fucking_node', поля должны быть: 'field_firma' типа nodereference(ссылается на страницу фирмы), 'field_director' текстовое поле можно типа текстовое поле, можно текстовую строку.
Хамить не надо, сам-то код откуда-то скопипастил, судя по типу ноды. Я предложил нормальное решение в рамках CMS Drupal( а мы вообще то на сайте поддержки Друпала), а ты предложил костыль.
Что, если нода не такая простая? Если она входит в одну из групп Organic groups? А разные pathauto, разные настройки комментариев и публикации для разных типов данных? Auto Nodetitle и другие подобные радости? Всё ручками в скрипте вместо стандартных средств Друпала делать? А если типов данных штук 20 с разными настройками? 20 скриптиков или ещё скрытое поле в форме делать с типом данных?
PS Не надо тут пальцы растопыривать и строить из себя специалиста.
И что мешает создать самописную форму и направить его на Друпал стандартными средствами темизации формы? Или не знаешь API Drupal и как это делать? Для чего тут городить огород отдельным скриптом?
Я специализируюсь на парсерах, так что код скопипастил из одного из своего парсера.
Вы как я понял не читаете пост топикстартера. Там написано что полей очень много, поэтому ансетить поля это больше кода чем у меня, да еще к тому же для вывода формы в окне а не на node/add придется вставить drupal_get_form в какой нибудь файл шаблона или функцию, поэтому я и предложил путь более простой.
всем спасибо за предложенные варианты. хотелось решить задачу без программирования.
Получилось!
1. Ставим модуль modalframe. Он позволяет поднимать аяковские модальные окна.
2. Ставим Automodal. Позволяет ссылки загружать в модальном окне. В ссылку достаточно добавить название класса "automodal":
<a href="http://example.com" class="automodal">Click me!</a>
3. И самый нужный мне модуль ModalFrame Exclude From Node
Он позволяет для форм редактирования и создания материала, которые будут отображаться в модальном окне, спрятать ненужные элементы (меню, ревизия и т.д.) материала и CCK поля.
Получается просто отлично. А то пользователям показывается очень много информации для заполнения. А для быстрого создания объекта необходимо всего пару полей. Потом пользователь может дополнить необходимые поля.
осталась одна неприятная вещь. В модальное окно также подгружается меню модуля simplemenu. А как его убрать не знаю