nickolay shmalenuk.render api eng.drupalcamp kyiv 2011

24
Render API in Drupal7 Shmaleniuk Nikolay [email protected]

Upload: campdrupalua

Post on 17-Dec-2014

2.366 views

Category:

Technology


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Render API in Drupal7

Shmaleniuk [email protected]

Page 2: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Gold Sponsor ofDrupalCamp Kyiv 2011

Page 3: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Silver Sponsors ofDrupalCamp Kyiv 2011

Page 4: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Render API introduction

Render API similar to the work of the Form API.1. The system collects an array which contains all the

necessary data– Array data converted to html and displayed

Page 5: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Main hooks

• hook_page_buildadd items to the page

• hook_page_alter override the output of all page elements before output

Page 6: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Page 7: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

dsm(hook_page_alter_data)

Page 8: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Page 9: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011
Page 10: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Render API theming

• #theme - theme_function to be called• #arg_1, #arg_2 - arguments with prefix "#", necessary for the

theme function

Page 11: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

The advantages of using

• One general system of generating output data• All html on the page, can be easily overridden by using a one

hook• Reusability code. Reusability the menu callbacks or blocks

for the their tasks (eg AJAX replies)• Caching

Page 12: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

3 types of element

1. Standerd element, key #type (hook_element_info())2. Text data, key #markup3. Theme element, key #theme

Page 13: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Example, node.tpl.php

render(), show(), hide()

<?php hide($content['comments']); hide($content['links']); print render($content); ?>

<?php if (!empty($content['links'])): ?> <div class="links"><?php print render($content['links']); ?> </div> <?php endif; ?>

<?php print render($content['comments']); ?>

Page 14: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Example

// Drupal 6.function my_module_show_same_items() { $items = array('item 1', 'item 2', 'item 3'); $out = theme('item_list', $items); return $out;}

// Drupal 7.function my_module_show_some_items() { $items = array('item 1', 'item 2', 'item 3'); $build = array( 'items' => array('#theme' => 'item_list', '#items' => $items), ); return $build; }

Page 15: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Examplefunction theme_pager_link($variables) { $var_text = $variables['var']; $var_page_new = $variables['var_2'];... }

function my_module_show_some_text() { $item = array( 'items' => array( '#theme' => 'pager_link', '#var' => 'some text', '#var_2' => '...', ), ); return $item;}

Page 16: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

The array keys Render API• #access - TRUE or FALSE• #type - str• #printed - TRUE or FALSE• #cache - array()• #theme - str• #theme_wrappers - array()• #pre_render - array()• #post_render - array()• #attached - array()• #prefix, #suffix - str

Page 17: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Sequence of actions drupal_render()

1. Checking #access и #printed2. Checking the cache3. Loading the default item (if #type)4. Call #pre_render5. Call #theme6. Call #theme_wrappers7. Call #post_render8. Load attached recurses #attached (JS, CSS, etc.)9. If #cache set, the write cache10.return #prefix . $out . #suffix;

Page 18: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Attached recurses, JS/CSS files

$form['#attached']['css'] = array( drupal_get_path('module', 'ajax_example') . '/ajax_example.css',);

$form['#attached']['js'] = array( drupal_get_path('module', 'ajax_example') . '/ajax_example.js',);

Page 19: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Attached recurses, JS settings

$settings = array('id' => 'mymodule-element-1');

$form['#attached']['js'][] = array( 'data' => array('mymodule' => $settings), 'type' => 'setting',);

Page 20: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Attached recurses, http header and library$form['#attached']['drupal_add_http_header'] = array( array('Content-Type', 'application/rss+xml; charset=utf-8'),);

$form['#attached']['library'][] = array('system', 'drupal.ajax');

Page 21: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Caching

$build = array( 'items' => array( '#theme' => 'item_list', '#items' => $items, '#cache' => array( 'keys' => array('example', 'cache'), 'bin' => 'cache', 'expire' => time() + $interval, 'granularity' => DRUPAL_CACHE_PER_PAGE | DRUPAL_CACHE_PER_ROLE, ), ), );

Page 22: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Caching

$items = module_load_item_list(); $build = array( 'items' => array( '#theme' => 'item_list', '#items' => $items, '#cache' => array( 'keys' => array('example', 'cache'), 'bin' => 'cache', 'expire' => time() + $interval, 'granularity' => DRUPAL_CACHE_PER_PAGE | DRUPAL_CACHE_PER_ROLE, ), ), );

Page 23: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

Caching

$build = array( 'items' => array( '#theme' => 'item_list', '#pre_render' => array( 'module_load_item_list'), '#items' => array(), '#cache' => array( 'keys' => array('example', 'cache'), 'granularity' => DRUPAL_CACHE_PER_PAGE, ), ), ); function module_load_item_list(&$element) { $element['#items'] = module_load_item_list(); }

Page 24: Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

• Render Arrays in Drupalhttp://drupal.org/node/930760

• Examples http://drupal.org/project/examples

Shmaleniuk [email protected]