Рендер масивів в сьомому друпалі

Рендерние масиви є будівельними блоками сторінки Drupal. починаючи з сьомого Друпала. Рендерний масив - це асоціативний масив, який відповідає стандартам і структурі даних, що використовуються в системі рендеринга Друпала.

Що таке рендер?

Відносно Друпала, рендер позначає перетворення рендер масивів в HTML код.

Що таке рендер масив?

Рендер масив - класичний структурований масив в Drupal, який надає інформацію / дані (можливо, вкладену) поряд з підказками щодо того, як цей елемент повинен бути представлений (наприклад, #type визначає тип елемента).

Масив сторінки може виглядати наступним чином:

Для чого це робиться?

До виходу Друпал 7 можна було запросто змінювати форми (за допомогою hook_form_alter ()), проте інші елементи, які можна було змінювати в модулях або темах, перетворювалися в HTML код до того, як передавалися для змін.

зміна елементів

Після виходу сьомого Друпала блоки і сторінки можуть бути змінені так само, як раніше ми міняли форми. Багато інших елементів також стали доступні для зміни. Наприклад, за допомогою hook_page_alter () ви можете в своєму модулі або темі зробити так:

Як рендерние масиви пов'язані з елементами?

У модулях можна визначати нові елементи, які насправді є рендернимі масивами, записаними за певними правилами. Для цього використовується hook_element_info (). Елемент - це рендерний масив, який має #type і інші властивості, що визначають його подальшу поведінку. Коли створюється рендерний масив і йому поставлено #type. то до нього завантажуються значення за замовчуванням для тих атрибутів, які не мають в масиві, але вони описані в hook_element_info () для цього елемента.

Створення даних у вигляді рендерних масивів

В Drupal 7. на відміну від попередніх версій, модуль практично завжди створює дані у вигляді рендерних масивів. Функція виклику будь-якої сторінки повертає масив, який в подальшому буде отрендеріть (перетворений в HTML). Це дозволяє модулям зберігати дані в масивах настільки довго, наскільки це можливо в процесі створення сторінки.

В Drupal 6 використовувався метод візуалізації даних і їх збору у вигляді HTML:

Приклади масивів різних типів

Як і раніше, всі елементи Drupal (див. Hook_element_info (). Який був hook_elements () в Drupal 6) представляють собою описаний тип даних. Дивлячись на system_element_info (). ми бачимо безліч визначених типів, в тому числі page, form. html_tag. value. markup. link. fieldset і багато інших. За угодою, # - атрибути, які використовуються цим типом, документуються з відповідною функцією темізаціі. Таким чином, наприклад, атрибути, використовувані в елементі типу #type => 'html_tag' можна знайти в функції theme_html_tag ().

Ось три приклади з модуля Examples (Render example):

Приклади типів елементів

До рендерному масиву можна застосувати безліч вже існуючих типів або створити свої. Нижче наведені найпоширеніші.

Зверніть увагу, що багато хто з цих властивостей описані в Forms API. тому що в Forms API завжди використовувалися рендерное API для вказівки типів, але вони не були задокументовані як типи рендерного API, якими вони, безсумнівно, є в Drupal 7.

Тип елемента. Якщо масив - елемент, то властивості елемента будуть завантажені за замовчуванням. Це веде до скорочення набору визначених властивостей, які можуть бути взяті з опису цього елемента в hook_element_info ().

Найпростіше властивість, яке просто створює рядок з розміткою #type => 'markup'. По суті, з його допомогою можна просто вставити шматок HTML'a без будь-яких перетворень або подальшого рендеру.

Використовується при необхідності додати рядок (або розмітку) на початку або в кінці елемента.

Масив функцій, який може змінити рендерний масив перед викликом рендеру для нього. Це властивість може змінити, видалити частини, встановити #printed = TRUE. щоб запобігти подальшому рендер і т.д.

Масив функцій, який може обробляти HTML, отриманий в результаті рендеру елемента. За великим рахунком це те ж саме, що і #theme_wrappers. за винятком того, що не використовується система темізаціі.

Масив функцій теми, який має можливість додавати що-небудь до рендерному масиву після того, як дочірні елементи були отрендеріть і поміщені в #children.
Зазвичай використовується для додавання HTML навколо відрендерене дочірніх елементів, особливо якщо дочірні елементи були отрендеріть рекурсивно за допомогою власних функцій темізаціі. Це властивість рідко використовують разом з #theme.

Позначає масив як Кешована і визначає термін його зберігання. Якщо рендерний масив вже був отрендеріть, він більше не буде рендіроваться, поки не закінчиться термін зберігання кешу. При кешуванні використовуються стандартні функції Друпала cache_get () і cache_set ().

Цей атрибут може містити такий масив масив:

  • 'Keys' => масив ключів, які будуть об'єднані для створення ключа кеша.
  • 'Bin' => ім'я кешу, яке буде використовуватися (Наприклад, 'cache' або 'cache_page' і т.д.)
  • 'Expire' => дата, записана в Unix-форматі, яка визначає термін придатності кеша.
  • 'Granularity' => значення, що позначає тип кешу. Наприклад, DRUPAL_CACHE_PER_PAGE. DRUPAL_CACHE_PER_ROLE або DRUPAL_CACHE_PER_USER.

Зверніть увагу, що елементи, помічені з атрибутом #cache зберігатимуть кеш до тих пір, поки не запуститься крон, не дивлячись на його термін придатності.