Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Nickolay Shmalenuk.Render api eng.DrupalCamp Kyiv 2011

2,828 views

Published on

Published in: Technology
  • Be the first to comment

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

×