How do you tie in context-sensitive things like menu's or breadcrumbs?
----- Original Message -----
From: "Matthew Weier O'Phinney" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, May 29, 2007 9:53 AM
Subject: Re: [fw-general] ViewRenderer and nested templates
-- 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/