hook_form для нескольких типов контента, определенных одним и тем же модулем - PullRequest
4 голосов
/ 05 мая 2010

Новый модуль 'foo' реализует foo_node_info () , где можно определить один или несколько новых типов контента.

Если foo_node_info () определяет два типа контента, а именно тип контента «footypea» и тип контента «footypeb», как можно реализовать hook_form () (что должно ли быть название «hook»?) для настройки формы редактирования каждого узла?

В примере drupal имя нового типа контента совпадает с именем модуля. Что происходит в вышеописанном примере, где модуль определяет два новых типа контента?

Должна ли реализованная функция hook_form () иметь форму: footypea_form () и footypeb_form ()? (это не похоже на работу)

Или вы должны реализовать одну функцию foo_form () и создать и вернуть массив $ form с элементами $ form ['footypea'] и $ form ['footypeb'], которые в свою очередь являются массивами отдельного поля формы определения?

Ответы [ 2 ]

3 голосов
/ 12 мая 2010

В hook_node_info () вашего модуля добавьте свойство 'module' (см. http://api.drupal.org/api/function/hook_node_info/6).

Например:

/**
 * Implementation of hook_node_info().
 */
function foo_node_info() {
  return array(
    'footypea' => array(
      'name' => t('Foo Type A'),
      'description' => t('This is Foo Type A'),
      'module' => 'footypea',  //This will be used for hook_form()
    ),
    'footypeb' => array(
      'name' => t('Foo Type B'),
      'description' => t('This is Foo Type B'),
      'module' => 'footypeb',  //This will be used for hook_form()
    ),
  );
}

Теперь вы можете добавить следующую hook_form () реализации для каждого типа (см. http://api.drupal.org/api/function/hook_form/6).

/**
 * Implementation of hook_form().
 */
function footypea_form(&$node, $form_state) {
  // Define the form for Foo Type A
}

/**
 * Implementation of hook_form().
 */
function footypeb_form(&$node, $form_state) {
  // Define the form for Foo Type B
}

Хитрость в том, что свойство модуля каждого элемента в hook_node_info() не обязательно должно быть таким же, как у модуля, реализующего hook_node_info(). КаждыйОпределенный тип может иметь уникальное свойство модуля для реализации зависимых от типа хуков.

0 голосов
/ 06 мая 2010

Неважно, как называются типы узлов, когда вы реализуете хуки в Drupal, первая часть - это имя модуля, который их создает. Итак, ваш модуль foo реализует hook_form () в foo_form ().

Кстати, потому что это проще и потому что это входит в Drupal 7, вы также должны проверить CCK для создания типов контента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...