View
2.369
Download
1
Category
Preview:
DESCRIPTION
Citation preview
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
Recommended