Програмне створення і увімкнення відображень (view mode) для типів матеріалів (сутностей)


Всього голосів: 1173
Приклад модуля

Вирішив написати рішення по такій проблемі, як програмно додати свої відображення (або view mode ) в кастомному модулі. Нам потрібно буде два хука: hook_entity_info_alter() і hook_install() 1.

Якщо ви новачок в Drupal і хочете більш близько познайомитись з архітектурою CMS, то для вас постане питання "Де хоститись?", "Який сервер брати?". Один з таких хостингів "СітіХост", який пропонує послуги vds, vps та віртуального сервера.

Перший хук випористовуємо в файлі інсталяції модуля, в моєму випадку це my_module.install:

  1. <?php
  2. /**
  3.  * @file
  4.  * Contains installation functions for the My module.
  5.  */
  6.  
  7. /**
  8.  * Implements hook_install().
  9.  */
  10. function my_module_install() {
  11. // Вмикає відображення для типу матеріалу "my_type"
  12. $config = field_bundle_settings('node', 'my_type'); // Отримуємо конфігурацію типу матеріалу "my_type"
  13.  
  14. $config['view_modes']['top']['custom_settings'] = TRUE; // Вмикаємо відображення
  15. $config['view_modes']['similar']['custom_settings'] = TRUE;
  16.  
  17. field_bundle_settings('node', 'my_type', $config); // Зберігаємо налаштування
  18.  
  19. }

my_type - машинне ім’я типу матеріалу

Далі нам немобхідно відкрити сам файл модуля і визначити нові відображення. В моєму випадку це my_module.module:

  1. <?php
  2. /**
  3.  * @file
  4.  * Main module of site.
  5.  */
  6.  
  7. /**
  8.  * Implements hook_entity_info_alter().
  9.  */
  10. function my_module_entity_info_alter(&$entity_info) {
  11. $entity_info['node']['view modes']['top'] = array(
  12. 'label' => t('Top'), // Назва при редагуванні типу матеріалу на сторінці відображення
  13. 'custom settings' => FALSE, // Якщо TRUE то увімкнено для всіх типів матеріалів
  14. );
  15. $entity_info['node']['view modes']['similar'] = array(
  16. 'label' => t('Similar'),
  17. 'custom settings' => FALSE,
  18. );
  19. }

top і similar це машинне ім’я відображення

Якщо у вас виникають якісь питання задавайте їх в коментарях.


  1. Також замість хуку hook_install() ви можете використати альтернативні: hook_update(), hook_enable() ↩︎