Как вставить пользовательскую форму в представление узла Drupal и обработать данные узла при отправке? - PullRequest
2 голосов
/ 12 июля 2011

Мы импортируем наши заказы на продажу из нашей системы учета на сайт Drupal 6.

Мы устанавливаем тип контента, называемый заказами.

Я хотел бы создать модуль доставки для нашей доставкипровайдер (нет уже одного).

Я понимаю, как создавать «блочные» модули и «контентные» модули.

Каков наилучший подход к созданию модуля, который будет отображаться в нижней части наших узлов заказов, представляющих формуони должны завершить (что, в свою очередь, обработает доставку)

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

1 Ответ

6 голосов
/ 12 июля 2011

Если вы хотите прикрепить пользовательскую форму к каждому узлу, сначала вам нужно (в вашем модуле):

  • напишите функцию, которая будет строить форму (см .: Генерация форм ). Если эта функция будет отображать данные, относящиеся к узлу, в соответствии с узлом, который просматривается в данный момент, вам, вероятно, потребуется передать nid или целое $node в качестве аргумента.

Затем вы должны решить, как вы хотите вставить вставку формы в страницу узла (или, тем не менее, это то, что узел просматривается), и есть несколько способов сделать это, включая:

  1. Реализация hook_nodeapi () и в рамках операции «просмотр» (т. Е. $op == 'view') вы можете получить свою форму и добавить ее в $node->content.
  2. Добавление формы в качестве переменной шаблона (см .: template_preprocess_node () , вы должны сделать MYMODULE_preprocess_node(&$vars)), чтобы вы могли поместить ее в любое место в своем пользовательском файле node.tpl.php.

Я полагаю, что есть и другие способы (ваш модуль генерирует блок с формой и т. Д.), Это зависит от того, что вам конкретно нужно.

Какой бы вариант вы ни выбрали, вы получите разметку для пользовательской формы:

<?php
// something like this for hook_nodeapi() way.
$node->content['body']['value']] .= drupal_get_form('my_custom_form_generating_function', $node);
// or something like this for the hook_preprocess_node() way.
$vars['my_custom_form'] = drupal_get_form('my_custom_form_generating_function', $vars['node']);

Если ваша функция создания форм действительно примет $ узел в качестве параметра, то вам нужно будет либо использовать PHP func_get_args () , либо явно объявить аргумент $node в сигнатуре:

<?php
function my_custom_form_generating_function($form_state, $node) { }

И чтобы быть ясным:

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

Модули Drupal - это не вещи, которые «появляются». Модули - это расширения, которые обеспечивают дополнительную функциональность для вашего сайта Drupal. Они могут реализовать хуков , которые могут или не могут в конечном итоге генерировать разметку, которая "появится" на вашем сайте.

Относительно «модулей контента» и «блочных модулей»: хотя я видел термин « узел модуль» для обозначения модулей, которые предоставляют новые типы контента, любой модуль может реализовать любой хук, и таким образом предоставьте блоки, типы контента и т. д.

...