-- Kevin McArthur <[EMAIL PROTECTED]> wrote (on Tuesday, 29 May 2007, 09:43 AM -0600): > Surely, nested templates will have some sort of built-in basic > functionality. I dont know many PHP developers who use templates like > they're a series of concatenated strings. It just doesn't jive with the > nested nature of html. > > Most PHP apps follow a standard/shared layout approach; so whats the > 'framework' way of handling common elements now? render header, content, > footer?
I use the Two Step View pattern. My applications render content to the response object (just the application content, none of the site skeleton), and then in a dispatchLoopShutdown() plugin I pull the response content and inject it into a sitewide template, and finally inject that rendered content back into the response object. I've provided a sample of such a plugin in the past on either the fw-mvc or fw-general list. > ----- Original Message ----- > From: "Rob Allen" <[EMAIL PROTECTED]> > To: <[email protected]> > Sent: Tuesday, May 29, 2007 2:09 AM > Subject: Re: [fw-general] ViewRenderer and nested templates > > > >Kevin McArthur wrote: > >>Hi Guys, > >> > >>I'm trying to upgrade several sites to 1.0 but my sites tend to use a > >>main template (engine.tpl) plus a set of sub templates (actionName.tpl) > >>(menu.tpl) etc... it seems fairly evident how to sub-render, but with > >>outer most template always being the same file, how do you set this with > >>the view renderer's automatic actions to set the $view->content variable > >>to the actionName template automatically. > >> > > > > > >Currently, I'm exploring extending ViewRender's renderScript() to do > >something similar. > > > >My first attempt looks like this: > > > >class My_Controller_Action_Helper_ViewRenderer > >extends Zend_Controller_Action_Helper_ViewRenderer > >{ > > public function renderScript($script, $name = null) > > { > > if (null === $name) { > > $name = $this->getResponseSegment(); > > } > > $content = $this->view->render($script); > > > > $this->view->content = $content; > > > > $layoutTemplate = 'site.tpl.php'; > > $this->getResponse()->appendBody( > > $this->view->render($layoutTemplate), > > $name > > ); > > > > $this->setNoRender(); > > } > >} > > > > > >I also have: > > > > $viewRenderer = new My_Controller_Action_Helper_ViewRenderer(); > > $viewRenderer->setViewSuffix('tpl.php'); > > Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); > > > >in my bootstrap before I first instantiate the front controller, so that > >my ViewRenderer is used. > > > > > > > > > >Regards, > > > >Rob... > > > -- Matthew Weier O'Phinney PHP Developer | [EMAIL PROTECTED] Zend - The PHP Company | http://www.zend.com/
