Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Zend_Layout & Zend_View Enhancements Ralph Schindler Software Engineer, Zend Technologies Zend Framework includes a powerful set of components that facilitate best practices in the area of keeping a consistent look and feel within an application.
Overview The problem Zend_Layout/ZVE solves Simple MVC Usage Benefits of Zend_Layout & ZVE Advanced Usage Case: local layouts within a module Q & A
THE PROBLEM Exploring the problem area
The Problem What are layouts? Consistent look and feel across application Independent of dispatched application code Common page items such as: Navigation Headers Footers Tag cloud
The Problem Previous attempts (PHP4 till now): Smarty (separation of business & presentation logic) First divergence from Model 1 programming. Common solution (included in every template): Header {include file=‘header.tpl’} Footer files {include file=‘footer.tpl’} Navigation {include file=‘common/nav.tpl’}  Ref:  http://en.wikipedia.org/wiki/Model_1
The Problem Previous attempts in ZF community: Controller Plugin dispatchLoopStartup() / preDispatch() dispatchLoopShutdown() / postDispatch() ViewRenderer Extension postDispatch() View Extension
The Problem Does a best practices pattern exist? Yes, in PoEAA, M. Fowler describes the Two-Step-View Pattern. “ Turns domain data into HTML in two steps: first by forming some kind of logical page, then rendering the logical page into HTML.”
The Problem Can ZF implement a Two-Step-View solution? Yes, if we leverage both the controller and the view layer, a two-step-view is possible. Lets look at the controller dispatch process: (image on next screen)
The Problem
The Problem Zend_Layout is the solution! Zend_Layout by itself is simply a view decorator When used in conjunction with the MVC elements its so much more: A Controller Plugin for detecting when to render a layout An Action Helper to facilitate communication between Action Controllers and Layouts A View Helper to facilitate communication between View Scripts and Layouts
The Problem The Two-Step-View and Zend_Layout introduce new concerns: How can view scripts know the content type of the current layout?  View Scripts might use code that implies a requirement at the layout layer: Setting page title Inject JS in the HEAD block Inject Style requirements in the HEAD block Etc.
The Problem With new problems, come new solutions! Zend View Enhancements Doctype helper for setting/getting content type Head Helpers: headScript() headMeta() headStyle() headTitle()
The Problem In addition to solving problems, there are a few other Zend_View Enhancements to simply life: Partial(), PartialLoop(), and Placeholder() exist to aid developers in DRYing up their code Action() View Helper exists to facilitate the dispatching of an Action Controller when a task requires that views attempt to gain new information from the model layer.
The Problem Zend_Layout and Zend_View Enhancements are the Solution! DRY up code Best Practices Better code organization both application and display logic Ability to add new features and requirements to a project without having to retrofit.
BASIC MVC USAGE Using Zend_Layout & Zend_View enhancements within a ZF MVC application
Basic MVC Usage File structure
Basic MVC Usage bootstrap.php
Basic MVC Usage Controller Script
Basic MVC Usage View Script
Basic MVC Usage Layout Script
Basic MVC Usage Output HTML & Display
Basic MVC Usage HeadTitle Usage
Basic MVC Usage Output HTML & View
Basic MVC Usage Partial & PartialLoop $this->partial($script, $model) $this->partialLoop($script, $arrayOfModels) Assumes “model” is An array Implements toArray Or is an object that can return properties via object_get_vars By passing a “model” as an object, and providing a key to access the properties
Basic MVC  Usage PartialLoop
BENEFITS Just a little review on the benefits
Benefits DRY up code (before and after)  Ability to scale and grow code without retrofiting
Benefits Zend_Layout & Zend_View enhancements are a supported best practice. Developers can find the code locations for improvements and fixes faster. Developers can get up to speed quicker with the detailed documentation and best practices these components promote.
ADVANCED USAGE Brief discussion of the advanced usage possibilities
Advanced Usage AJAX Support Pulling all the components together to make an Ajaxy Autocompleter headScript headStyle Dojo Toolkit ( http://www.dojotoolkit.org/  ) Zend_Layout
Advanced Usage The Model
Advanced Usage Controller
Advanced Usage View
Advanced Usage Layout
Advanced Usage
Advanced Usage JSON Output
Q&A TIME Stump the chump!  
CONFERENCE & DEMO Slides & Sample code will be provided following the confernece
RESOURCES Matthew W. O’Phinney’s Blog: http://weierophinney.net/matthew/archives/163-Using-Zend_View-Placeholders-to-Your-Advantage.html Zend_Layout & Zend_View Manual: http://framework.zend.com/manual/en/zend.layout.html http://framework.zend.com/manual/en/zend.view.html Mailing List & #zftalk
Thank You! http://framework.zend.com [email_address]

More Related Content

Zend_Layout & Zend_View Enhancements

  • 1. Zend_Layout & Zend_View Enhancements Ralph Schindler Software Engineer, Zend Technologies Zend Framework includes a powerful set of components that facilitate best practices in the area of keeping a consistent look and feel within an application.
  • 2. Overview The problem Zend_Layout/ZVE solves Simple MVC Usage Benefits of Zend_Layout & ZVE Advanced Usage Case: local layouts within a module Q & A
  • 3. THE PROBLEM Exploring the problem area
  • 4. The Problem What are layouts? Consistent look and feel across application Independent of dispatched application code Common page items such as: Navigation Headers Footers Tag cloud
  • 5. The Problem Previous attempts (PHP4 till now): Smarty (separation of business & presentation logic) First divergence from Model 1 programming. Common solution (included in every template): Header {include file=‘header.tpl’} Footer files {include file=‘footer.tpl’} Navigation {include file=‘common/nav.tpl’} Ref: http://en.wikipedia.org/wiki/Model_1
  • 6. The Problem Previous attempts in ZF community: Controller Plugin dispatchLoopStartup() / preDispatch() dispatchLoopShutdown() / postDispatch() ViewRenderer Extension postDispatch() View Extension
  • 7. The Problem Does a best practices pattern exist? Yes, in PoEAA, M. Fowler describes the Two-Step-View Pattern. “ Turns domain data into HTML in two steps: first by forming some kind of logical page, then rendering the logical page into HTML.”
  • 8. The Problem Can ZF implement a Two-Step-View solution? Yes, if we leverage both the controller and the view layer, a two-step-view is possible. Lets look at the controller dispatch process: (image on next screen)
  • 10. The Problem Zend_Layout is the solution! Zend_Layout by itself is simply a view decorator When used in conjunction with the MVC elements its so much more: A Controller Plugin for detecting when to render a layout An Action Helper to facilitate communication between Action Controllers and Layouts A View Helper to facilitate communication between View Scripts and Layouts
  • 11. The Problem The Two-Step-View and Zend_Layout introduce new concerns: How can view scripts know the content type of the current layout? View Scripts might use code that implies a requirement at the layout layer: Setting page title Inject JS in the HEAD block Inject Style requirements in the HEAD block Etc.
  • 12. The Problem With new problems, come new solutions! Zend View Enhancements Doctype helper for setting/getting content type Head Helpers: headScript() headMeta() headStyle() headTitle()
  • 13. The Problem In addition to solving problems, there are a few other Zend_View Enhancements to simply life: Partial(), PartialLoop(), and Placeholder() exist to aid developers in DRYing up their code Action() View Helper exists to facilitate the dispatching of an Action Controller when a task requires that views attempt to gain new information from the model layer.
  • 14. The Problem Zend_Layout and Zend_View Enhancements are the Solution! DRY up code Best Practices Better code organization both application and display logic Ability to add new features and requirements to a project without having to retrofit.
  • 15. BASIC MVC USAGE Using Zend_Layout & Zend_View enhancements within a ZF MVC application
  • 16. Basic MVC Usage File structure
  • 17. Basic MVC Usage bootstrap.php
  • 18. Basic MVC Usage Controller Script
  • 19. Basic MVC Usage View Script
  • 20. Basic MVC Usage Layout Script
  • 21. Basic MVC Usage Output HTML & Display
  • 22. Basic MVC Usage HeadTitle Usage
  • 23. Basic MVC Usage Output HTML & View
  • 24. Basic MVC Usage Partial & PartialLoop $this->partial($script, $model) $this->partialLoop($script, $arrayOfModels) Assumes “model” is An array Implements toArray Or is an object that can return properties via object_get_vars By passing a “model” as an object, and providing a key to access the properties
  • 25. Basic MVC Usage PartialLoop
  • 26. BENEFITS Just a little review on the benefits
  • 27. Benefits DRY up code (before and after) Ability to scale and grow code without retrofiting
  • 28. Benefits Zend_Layout & Zend_View enhancements are a supported best practice. Developers can find the code locations for improvements and fixes faster. Developers can get up to speed quicker with the detailed documentation and best practices these components promote.
  • 29. ADVANCED USAGE Brief discussion of the advanced usage possibilities
  • 30. Advanced Usage AJAX Support Pulling all the components together to make an Ajaxy Autocompleter headScript headStyle Dojo Toolkit ( http://www.dojotoolkit.org/ ) Zend_Layout
  • 37. Q&A TIME Stump the chump! 
  • 38. CONFERENCE & DEMO Slides & Sample code will be provided following the confernece
  • 39. RESOURCES Matthew W. O’Phinney’s Blog: http://weierophinney.net/matthew/archives/163-Using-Zend_View-Placeholders-to-Your-Advantage.html Zend_Layout & Zend_View Manual: http://framework.zend.com/manual/en/zend.layout.html http://framework.zend.com/manual/en/zend.view.html Mailing List & #zftalk