Додайте поле у ​​прив'язку_node_info ();


9

Чи можна додати поля до типу вузла, оголошеного за допомогою гачок_node_info? Чи потрібно додати поля окремо? Якщо так, який гак я б використав для цього?

Відповіді:


8

Поля потрібно приєднувати окремо, їх неможливо додати через hook_node_info(). Зазвичай ви робите це у hook_install()функції у .install-файлі вашого модуля.

Гарний простий приклад з ядра Drupal - у файлі встановлення модуля блогу:

function blog_install() {
  // Ensure the blog node type is available.
  node_types_rebuild();
  $types = node_type_get_types();
  node_add_body_field($types['blog']);
}

Функція просто перебудовує типи вузлів (тому щойно доданий тип доступний), а потім додає до нього поле тіла за допомогою node_add_body_field()функції. Ця функція сама по собі дає чудовий приклад того, як створити поле, екземпляр цього поля, а потім приєднати його до типу вмісту за допомогою функцій field_create_field()та field_create_instance().

Код не так вже й довгий, тому я включу його тут як приклад:

function node_add_body_field($type, $label = 'Body') {
  // Add or remove the body field, as needed.
  $field = field_info_field('body');
  $instance = field_info_instance('node', 'body', $type->type);
  if (empty($field)) {
    $field = array(
      'field_name' => 'body', 
      'type' => 'text_with_summary', 
      'entity_types' => array('node'),
    );
    $field = field_create_field($field);
  }
  if (empty($instance)) {
    $instance = array(
      'field_name' => 'body', 
      'entity_type' => 'node', 
      'bundle' => $type->type, 
      'label' => $label, 
      'widget' => array('type' => 'text_textarea_with_summary'), 
      'settings' => array('display_summary' => TRUE), 
      'display' => array(
        'default' => array(
          'label' => 'hidden', 
          'type' => 'text_default',
        ), 
        'teaser' => array(
          'label' => 'hidden', 
          'type' => 'text_summary_or_trimmed',
        ),
      ),
    );
    $instance = field_create_instance($instance);
  }
  return $instance;
}

Дякую. Чи потрібно мені щось робити в моїй_установці куки?
Гаелан

Це дійсно до вас ... якщо ви хочете видалити створений вами контент / тип контенту / поля, то так, якщо ви цього не зробите, то ні :)
Клайв

Тож мій тип вмісту не зникне, коли мій модуль вимкнеться?
Гаелан

2
Ваш спеціальний тип вмісту не зникне, коли ваш модуль буде відключений (в Drupal 7), навіть якщо ви не видалите відключений модуль. Якщо ви пишете код, щоб видалити типи вмісту, створені під час встановлення під час гак_uninstall () вашого модуля, то так, що Тип вмісту зникне, коли ви видалите свій модуль (але все ще не, коли ви просто відключите його).
Дядько Код Мавпи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.