2. Render API
Render API
Что такое Render API
Концепция Render Arrays
Преимущества подхода
Ключевые свойства
Работа функций render(), drupal_render()
и drupal_render_children()
Рендеринг страницы
Render API и темизация
2
18. Render API
Ключевые свойства
#cache: настройки кэширования
элемента
Возможность кэширования отдельных частей
страницы
Свойства:
keys / cid – ключ кэша
granularity – кэш по роли, юзеру, странице
expire – время жизни
bin – хранилище (таблица cache по умолчанию)
18
19. Render API
Ключевые свойства
#states – условия изменения состояния
состояния - enabled/disabled,
visible/invisible, …
условия - empty/filled, checked, value …
19
27. Render API
Этапы работы drupal_render()
- #access и #pinted
- загрузка свойств поумолчанию (если указан #type)
- #pre_render
- #theme
- #theme_wrappers
27
28. Render API
Этапы работы drupal_render()
- #post_render
- #states
- #attached
- #cache
- Возвращает
#prefix.$output.#suffix
28
29. Render API
Рендеринг страницы
- Все элементы страницы собраны в
рендер массиве
- Можно изменить страницу с помощью
двух хуков hook_page_build() - дает
возможность добавить элементы на
страницу
- hook_page_alter() - дает возможность
изменить уже существующие элементы
29
30. Render API и темизация
- Для обработки рендер-массивов
в шаблоне нужно использовать
drupal_render()/render().
- hide()/show() - управляют
видимостью элемента в рендермассиве.
30
Render API
31. Render API
Render API и темизация
<!-- node.tpl.php -->
<div class="content"<?php print $content_attributes;?>>
<?php
// We hide the comments and links now so that we can render them
later.
hide($content['comments']);
hide($content['links']);
print render($content);
?>
</div>
<?php print render($content['links']); ?>
<?php print render($content['comments']); ?>
31
32. Render API
Render API и темизация
- В Drupal 7 есть два вида
передачи данных в функцию
темизации
properties-as-variable
element-as-variable
32
33. Render API
Render API и темизация
function mymodule_theme() {
return array(
//properties-as-variable
'mymodule_items' => array(
'variables' => array(
'items' => array(),
'title' => ''
)
)
);
}
33
34. Render API
Render API и темизация
properties-as-variable
function theme_mymodule_items($vars)
{
$items = $vars['items'];
$title =
$vars['title'];
}
34
35. Render API
Render API и темизация
function mymodule_theme() {
return array(
//element-as-variable
'mymodule_element' => array(
'render_element' => 'items'
)
);
}
35
36. Render API
Render API и темизация
element-as-variable
function theme_mymodule_element($vars){
$element = $vars['item'];
$items = $element['items'];
$title =
$element['title'];
}
36
37. Render API
Вывод
Render API - позволяет сделать код
- быстрым (благодаря #cache),
- прозрачным и понятным
(благодаря концепции рендермассивов)
- удобным (благодаря #states,
#attached)
37