nickolay shmalenuk.render api eng.drupalcamp kyiv 2011

Post on 17-Dec-2014

2.368 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

 

TRANSCRIPT

Render API in Drupal7

Shmaleniuk Nikolayn.shmaleniuk@gmail.com

Gold Sponsor ofDrupalCamp Kyiv 2011

Silver Sponsors ofDrupalCamp 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

Main hooks

• hook_page_buildadd items to the page

• hook_page_alter override the output of all page elements before output

dsm(hook_page_alter_data)

Render API theming

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

theme function

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

3 types of element

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

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']); ?>

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; }

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;}

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

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;

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',);

Attached recurses, JS settings

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

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

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');

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, ), ), );

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, ), ), );

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(); }

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

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

Shmaleniuk Nikolayn.shmaleniuk@gmail.com

top related