SlideShare a Scribd company logo
1 of 39
Render API

Render API
Виктория Султановская
victoria.sultanovskaya@volcanoideas.com
Render API

Render API
Что такое Render API
Концепция Render Arrays
Преимущества подхода
Ключевые свойства
Работа функций render(), drupal_render()
и drupal_render_children()
Рендеринг страницы
Render API и темизация
2
Render API

Что такое Render API

3
Render API

Что такое Render API

4
Render API

Что такое Render API
/**
* Drupal 6 page callback
* @return string
*/
function mymodule_drupal6_page() {
$items = mymodule_get_items();
$output = theme('mymodule_items', $items);
$output .= theme('pager');
return $output;
}
5
Render API

Что такое Render API

/**

* Drupal 7 page callback
* @return array
*/

function mymodule_drupal7_page() {
$items = mymodule_get_items();
...
$output[] = array(
'#theme' => 'mymodule_items', '#items' => $items
);
$output[] = array(
'#theme' => 'pager'
);
...
return $output;
}

6
Render API

Концепция Render Arrays
Рендер массив

Рендеринг

7
Render API

Концепция Render Arrays

Страница в Drupal 7
8
Render API

Преимущества подхода
- Модули могут внести свои
изменения в отдаваемый
контент.
- Единая система
формирования контента
9
Render API

Ключевые свойства
#type
hook_element_info()

(link, radio,
checkbox)

#theme
имя вызываемой
функции темизации
Функция должна отрендерить
все дочерние элементы
10
Render API

Ключевые свойства
#theme_wrappers
Обрабатывается после #theme
Это позволяет дополнительно обернуть дочерние
элементы нужными нам тегами

<form>
<input type=”checkbox”/>
<input type=”text”/>
</form>

11
Ключевые свойства
#theme_wrappers
<form>
<div class=”extra-container”>
<input type=”checkbox”/>
<input type=”text”/>
</div>
</form>
12

Render API
Render API

Ключевые свойства
#attached
js
css
libraries
function

13
Render API

Ключевые свойства
//attach internal resources
$build['#attached']
'js'
'css'

=>
=>

'library'

=

array(

$module_path
$module_path
=>

.

'/block.js',
.

'/block.css',

array(

array('system',

'drupal.ajax')

)
);
14
Render API

Ключевые свойства

//attach external resources

$build['#attached']['js'][] = array(
'http://code.jquery.com/jquery.min.js'
=>
array('type ' => 'external')
);
15
Render API

Ключевые свойства
//attach function
$build['#attached']['drupal_add_http_header']
= array(
array('Content-Type',
charset = utf-8')

'application/rss-xml;

);

16
Render API

Ключевые свойства
#attached
drupal_add_js()
drupal_add_css()

17
Render API

Ключевые свойства
#cache: настройки кэширования
элемента
Возможность кэширования отдельных частей
страницы
Свойства:
keys / cid – ключ кэша
granularity – кэш по роли, юзеру, странице
expire – время жизни
bin – хранилище (таблица cache по умолчанию)
18
Render API

Ключевые свойства
#states – условия изменения состояния
состояния - enabled/disabled,
visible/invisible, …

условия - empty/filled, checked, value …

19
Render API

Ключевые свойства
#states

20
Ключевые свойства
#states

21

Render API
Render API

Ключевые свойства

banner_display_type
show_banner_image
show_banner_html
22
Render API

Ключевые свойства
/**
* Implement hook_form
*/
$form['banner_html']['#states'] = array(
'visible' => array(
':input[name="banner_display_type"]' =>
array('value' => 'show_banner_html')
)
);
23
Ключевые свойства
/**
* Implement hook_form
*/
$form['banner_image']['#states'] = array(
//banner_image - fieldset
'visible' => array(
':input[name="banner_display_type"]' =>
array('value' => 'show_banner_image')
)
);
);

24

Render API
Render API

Ключевые свойства
#pre_render/#post_render
преобработка/постобработка (содержат массив
функций, которые будут вызваны перед/после
рендеринга массива)

#prefix/#suffix
#printed
#access
25
Render API

drupal_render()
render()
drupal_render_children()

26
Render API

Этапы работы drupal_render()
- #access и #pinted
- загрузка свойств поумолчанию (если указан #type)
- #pre_render
- #theme
- #theme_wrappers
27
Render API

Этапы работы drupal_render()
- #post_render
- #states
- #attached
- #cache
- Возвращает
#prefix.$output.#suffix
28
Render API

Рендеринг страницы
- Все элементы страницы собраны в
рендер массиве
- Можно изменить страницу с помощью
двух хуков hook_page_build() - дает
возможность добавить элементы на
страницу
- hook_page_alter() - дает возможность
изменить уже существующие элементы
29
Render API и темизация
- Для обработки рендер-массивов
в шаблоне нужно использовать
drupal_render()/render().
- hide()/show() - управляют
видимостью элемента в рендермассиве.
30

Render API
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
Render API

Render API и темизация
- В Drupal 7 есть два вида
передачи данных в функцию
темизации
properties-as-variable
element-as-variable

32
Render API

Render API и темизация
function mymodule_theme() {
return array(
//properties-as-variable
'mymodule_items' => array(
'variables' => array(
'items' => array(),
'title' => ''
)
)
);
}

33
Render API

Render API и темизация
properties-as-variable

function theme_mymodule_items($vars)
{
$items = $vars['items'];
$title =

$vars['title'];

}
34
Render API

Render API и темизация
function mymodule_theme() {
return array(
//element-as-variable
'mymodule_element' => array(
'render_element' => 'items'
)
);
}
35
Render API

Render API и темизация
element-as-variable
function theme_mymodule_element($vars){
$element = $vars['item'];
$items = $element['items'];
$title =

$element['title'];

}
36
Render API

Вывод
Render API - позволяет сделать код
- быстрым (благодаря #cache),
- прозрачным и понятным
(благодаря концепции рендермассивов)
- удобным (благодаря #states,
#attached)
37
Render API

Вопросы

38
Render API
Виктория Султановская
victoria.sultanovskaya@volcanoideas.com

More Related Content

What's hot

Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleODrupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleODrupalSib
 
UICollectionView — Александр Зимин
UICollectionView — Александр ЗиминUICollectionView — Александр Зимин
UICollectionView — Александр ЗиминCocoaHeads
 
Cocoheads Moscow September
Cocoheads Moscow SeptemberCocoheads Moscow September
Cocoheads Moscow SeptemberAlexander Zimin
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsГлеб Тарасов
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Yandex
 
Не JS во фронтенде
Не JS во фронтендеНе JS во фронтенде
Не JS во фронтендеNitive
 
Yii2
Yii2Yii2
Yii2Noveo
 

What's hot (8)

Swift School #4
Swift School #4Swift School #4
Swift School #4
 
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleODrupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
Drupal - создание инсталляционных профайлов - Иван Абраменко, CimpleO
 
UICollectionView — Александр Зимин
UICollectionView — Александр ЗиминUICollectionView — Александр Зимин
UICollectionView — Александр Зимин
 
Cocoheads Moscow September
Cocoheads Moscow SeptemberCocoheads Moscow September
Cocoheads Moscow September
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
 
Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"Александр Тармолов "API Яндекс.Карт"
Александр Тармолов "API Яндекс.Карт"
 
Не JS во фронтенде
Не JS во фронтендеНе JS во фронтенде
Не JS во фронтенде
 
Yii2
Yii2Yii2
Yii2
 

Similar to Therenderapi 120913041852-phpapp02

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf Conference
 
Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Dmytro Olaresko
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoMoscowDjango
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8Technopark
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4Technopark
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7Technopark
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Minktyomo4ka
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)Ontico
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in MagentoVrann Tulika
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4Technopark
 
Angular 2 vs Angular 1
Angular 2 vs Angular 1Angular 2 vs Angular 1
Angular 2 vs Angular 1GDG Odessa
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""OdessaJS Conf
 

Similar to Therenderapi 120913041852-phpapp02 (20)

ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
ZFConf 2010: Zend Framework & MVC, Model Implementation (Part 1)
 
Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.Drupal Cafe №5 Харьков. Drupal 7 Form API.
Drupal Cafe №5 Харьков. Drupal 7 Form API.
 
Разработка расширяемых приложений на Django
Разработка расширяемых приложений на DjangoРазработка расширяемых приложений на Django
Разработка расширяемых приложений на Django
 
RequireJS і Magento 2
RequireJS і Magento 2RequireJS і Magento 2
RequireJS і Magento 2
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Web весна 2013 лекция 4
Web весна 2013 лекция 4Web весна 2013 лекция 4
Web весна 2013 лекция 4
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 
Yserver
YserverYserver
Yserver
 
Behat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и MinkBehat в PHP с использованием Behat и Mink
Behat в PHP с использованием Behat и Mink
 
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
TypeScript: особенности разработки / Александр Майоров (Tutu.ru)
 
Enterprise Patterns in Magento
Enterprise Patterns in MagentoEnterprise Patterns in Magento
Enterprise Patterns in Magento
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Not the Rails Way
Not the Rails WayNot the Rails Way
Not the Rails Way
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Web осень 2012 лекция 4
Web осень 2012 лекция 4Web осень 2012 лекция 4
Web осень 2012 лекция 4
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Angular 2 vs Angular 1
Angular 2 vs Angular 1Angular 2 vs Angular 1
Angular 2 vs Angular 1
 
Andrew Borisenko "Magic of Vue.js""
Andrew Borisenko  "Magic of Vue.js""Andrew Borisenko  "Magic of Vue.js""
Andrew Borisenko "Magic of Vue.js""
 
Zend Framework и Doctrine
Zend Framework и DoctrineZend Framework и Doctrine
Zend Framework и Doctrine
 

Therenderapi 120913041852-phpapp02