Может ли один функциональный модуль вносить дополнения в другой функциональный модуль?


Я хотел бы иметь два функциональных модуля для включения пользователями. Один базовый и один продвинутый. Например, базовая функция создает тип контента блога, содержащий только поля заголовка и текста. Расширенный модуль, после включения, добавляет дополнительные поля к этому исходному типу контента, такие как теги или поле изображения. Возможно ли это или одно будет переопределять другое? Или мой сайт взорвется? или?

 6
Author: sicko, 2012-06-07

2 answers

Это определенно возможно, вчера мне пришлось сделать нечто подобное, и я рад сказать, что функции могут справиться с этим идеально.

Хитрость в том, что ваша "расширенная" функция вообще не будет содержать тип контента, а просто список дополнительных полей, прикрепленных к типу контента, определяемому исходным правилом.

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

Есть пример хорошо зарекомендовавшего себя дистрибутива Drupal, использующего тот же метод (если честно, у меня возникла идея); OpenPublish содержит функцию openpublish_article, которая определяет тип контента, и функцию openpublish_atricle_extra_media, единственная задача которой - добавить пару дополнительных полей в статью.

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

 3
Author: Clive, 2012-06-07 08:31:38

Вы можете легко сделать это с помощью hook_form_alter


function hook_form_FORM_ID_alter(&$form, &$form_state, $form_id) {
  if($form_id == 'YOUR_FORM_ID') {
    // Write your code here with conditions.
    global $user;   
    if($user->role == 'somerole') {
      // Here You can add form fields whatever you want for somerole.
    }
    else {
      // Here You can add form fields whatever you want for other roles.
    }
  }
}

Но для полей, которые вы хотите добавить для определенной роли, поле не должно быть обязательным.

 0
Author: Mohammad Anwar, 2012-06-07 06:48:28