Slide 1

Slide 1 text

Drupal 7: Render() Moshe Weitzman BADcamp 2011 Thursday, November 10, 11

Slide 2

Slide 2 text

Demonstrations Move node links to a sidebar. Duplicate a block into another region. Add banner advert to comment listing. Thursday, November 10, 11

Slide 3

Slide 3 text

Request Flow menu_execute_active_handler bootstrap page callback delivery callback drupal_render($page) HOOK_page_alter() Thursday, November 10, 11

Slide 4

Slide 4 text

bootstrap No pertinent changes Thursday, November 10, 11

Slide 5

Slide 5 text

menu_execute_active_handler menu_get_item hook_menu_active_handler SELECT * FROM menu_router WHERE path IN (:ancestors) ORDER BY fit DESC LIMIT 1 Thursday, November 10, 11

Slide 6

Slide 6 text

page callback Thursday, November 10, 11

Slide 7

Slide 7 text

page callback Thursday, November 10, 11

Slide 8

Slide 8 text

Return render array, not string A single $build[#markup] = ‘foo’ is lame Don’t call theme() Use #theme=‘table’, not theme(‘table’) Don’t call drupal_render(). Let that happen later. page callback Thursday, November 10, 11

Slide 9

Slide 9 text

Delivery callback determines output format D7 ships with HTML & ajax delivery Future callbacks: Atom, YAML, Docbook Menu item can provide delivery callback hook_page_delivery_callback_alter() - run time changes See WSCCI Initiative for D8 delivery callback Thursday, November 10, 11

Slide 10

Slide 10 text

Regions Promises made by a theme. I will print this to the page. Thursday, November 10, 11

Slide 11

Slide 11 text

HOOK_block Make pre-packaged hunks of content available to the CMS Thursday, November 10, 11

Slide 12

Slide 12 text

Block.module An optional UI for placing blocks into regions. Thursday, November 10, 11

Slide 13

Slide 13 text

$page A large render array() containing content before theming. Thursday, November 10, 11

Slide 14

Slide 14 text

HOOK_page_alter() Apply site specific customization to content of page. Thursday, November 10, 11

Slide 15

Slide 15 text

drupal_render_page($page) hook_page_build($page) hook_page_alter($page) drupal_render($page) Thursday, November 10, 11

Slide 16

Slide 16 text

HOOK_page_alter() Thursday, November 10, 11

Slide 17

Slide 17 text

HOOK_page_alter() Thursday, November 10, 11

Slide 18

Slide 18 text

#cache #attached: js, css, library #theme #theme_wrappers drupal_render($page) Convert array to HTML Theme all the elements Thursday, November 10, 11

Slide 19

Slide 19 text

render() - node.tpl.php hide($content['comments']) hide($content['links']); print render($content); print render($content['links']); print render($content['comments']); Thursday, November 10, 11

Slide 20

Slide 20 text

Advantages Maintainability: Customized templates still work. New fields actually output. Security: Many folks were printing unsafe data from $node->field_foo Performance: Only theme stuff that gets output Empowerment: Template author has one workplace Backwards Compat: You don’t have to use it! Thursday, November 10, 11

Slide 21

Slide 21 text

drupal_render() cache Successor of the block cache. Applies to any renderable element. Applies when using node access Can use any cache key, expiry, bin. Most uses are site specific. @see forum_block_view() Thursday, November 10, 11

Slide 22

Slide 22 text

Summary hook_page_alter() enables changing content and positioning dynamically. Safer, more maintainable templates Better performance. #cache is tool for better performance for authenticated Thursday, November 10, 11

Slide 23

Slide 23 text

Credits Frando Dmitri Eaton Yves Effulgentsia Catch Moshe Dozens of others Thursday, November 10, 11

Slide 24

Slide 24 text

Questions Thursday, November 10, 11