Создайте несколько узлов CCK с одной пользовательской формой в Drupal - PullRequest
3 голосов
/ 30 июля 2009

Мне нужна форма, которая позволит создавать несколько связанных узлов одновременно. Все узлы содержат поля CCK.

Я бы хотел использовать как можно больше практических возможностей встроенной проверки, отправки, виджета ввода и функций безопасности CCK.

Каков наилучший способ сделать это в Drupal 6? Где-нибудь есть «лучшие практики» или документы?

Вот 3 варианта, которые я вижу. Я хотел бы получить отзыв о том, сработает ли какой-либо из них, или если есть еще лучшие варианты.

1

  • начать со стандартной формы создания узла для типа контента foo.
  • изменить форму, добавив поля для панели типа контента, используя ловушку form_alter [можно ли напрямую вставлять виджеты cck для панели типа контента?]
  • использовать пользовательский обработчик отправки для создания узла типа bar при отправке формы можно ли вызывать стандартный обработчик cck? или мне нужно «вручную» создать объект узла, выполнить собственную проверку и использовать node_save?]

2

  • создать новую пользовательскую форму, которая объединяет «нормальные» формы создания узлов для соответствующих типов контента.
  • затем используйте hook form_alter для изменения форм по мере необходимости.
  • позволяют стандартным обработчикам отправки cck выполнять работу по созданию узлов.

3.

  • создание собственной формы с нуля
  • создавать узлы в моих собственных обработчиках отправки, используя подготовку узлов, сохранение узлов и т. Д.

Если найдена документация по повторному использованию стандартной формы создания узла , но создание нескольких узлов одновременно не упоминается.

Использование hook nodeapi и hook form_alter документировано в посте на сайте advomatic, но, похоже, для конкретного метода descrube требуется загрязнение одного из типов контента полями 'dummy'.

Большое спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 16 октября 2009

Парни из Advomatic опубликовали хорошее решение этой проблемы.

http://www.advomatic.com/blogs/jonathan-delaigle/multiple-nodes-single-node-submission

0 голосов
/ 18 августа 2009

Если второму типу bar требуется только один или два дополнительных ввода (поля) от пользователя, я бы пошел с вашим подходом один.

Но, учитывая ваше пояснение, кажется, что foo и bar достаточно различны и сложны, поэтому ваш второй подход кажется более разумным.

Объединить обе формы в одну и скрыть поля bar , которые вы хотите заполнить, из полей foo (или узла после его создания). В функциях проверки и отправки форм вам придется снова разделить формы, чтобы вы могли вызывать стандартные обработчики проверки / отправки для обоих по отдельности.

Я еще не сделал этого, поэтому я не уверен, насколько хорошо это будет работать с функциональностью cck, но я ожидаю, что он будет работать достаточно хорошо, чтобы попробовать.

0 голосов
/ 15 августа 2009

почему бы просто не использовать hook_nodeapi для обработки создания узла для определенных типов контента.

просто установите тестовое условие, чтобы увидеть, если $ node-> type = 'foo', а затем запустите функцию, чтобы создать два узла или сколько угодно, используя значения из предопределенных полей. вы можете даже настроить hook_nodeapi на запуск только в том случае, если $ op почти готов вставить узел в базу данных, таким образом гарантируя, что объект прошел соответствующую проверку перед передачей на новые узлы, которые необходимо создать.

http://api.drupal.org/api/function/hook_nodeapi/6 эта страница содержит список всех доступных операций для переменной $ op и их действия.

Надеюсь, это поможет

...