Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

2,649 views
2,611 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,649
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

  1. 1. Render API in Drupal7Shmaleniuk Nikolayn.shmaleniuk@gmail.com
  2. 2. Gold Sponsor ofDrupalCamp Kyiv 2011
  3. 3. Silver Sponsors ofDrupalCamp Kyiv 2011
  4. 4. Render API introductionRender 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
  5. 5. Main hooks• hook_page_build add items to the page• hook_page_alter override the output of all page elements before output
  6. 6. dsm(hook_page_alter_data)
  7. 7. Render API theming• #theme - theme_function to be called• #arg_1, #arg_2 - arguments with prefix "#", necessary for the theme function
  8. 8. 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
  9. 9. 3 types of element1. Standerd element, key #type (hook_element_info())2. Text data, key #markup3. Theme element, key #theme
  10. 10. Example, node.tpl.phprender(), 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]); ?>
  11. 11. 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;}
  12. 12. 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;}
  13. 13. 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
  14. 14. 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;
  15. 15. 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,);
  16. 16. Attached recurses, JS settings$settings = array(id => mymodule-element-1);$form[#attached][js][] = array( data => array(mymodule => $settings), type => setting,);
  17. 17. Attached recurses, http headerand library$form[#attached][drupal_add_http_header] = array( array(Content-Type, application/rss+xml; charset=utf-8),);$form[#attached][library][] = array(system, drupal.ajax);
  18. 18. 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, ), ), );
  19. 19. 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, ), ),);
  20. 20. 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();}
  21. 21. • Render Arrays in Drupal http://drupal.org/node/930760• Examples http://drupal.org/project/examplesShmaleniuk Nikolayn.shmaleniuk@gmail.com

×