I've got some CSS and javascript that I would like to dynamically add to
the HTML header depending on the controller/action. I would like to be
able to append information like appending to the response body. Then
use this information in a site wide template. The only solution that
comes to mind is using a view variable and having each controller/action
get the variable, append it, and write it back to the view. Is there
some functionality that I might be overlooking? - Thanks
Site wide template:
<html>
<head>
<title><?php echo $this->title; ?></title>
<?php echo $this->dynamic_header; ?>
</head>
<body>
...common header...
<?php echo $this->content; ?>
...common footer...
</body>
</html>
Matthew Weier O'Phinney wrote:
-- Arnaud Limbourg <[EMAIL PROTECTED]> wrote
(on Monday, 26 March 2007, 07:04 AM +0200):
Matthew Weier O'Phinney wrote:
I throw a Zend_View object in the registry, and then access this from my
controllers and plugins. The benefit of doing this is that the
controllers can set values in the view that are unused in their
individual view, but used later in the sitewide template.
Then, I use a dispatchLoopShutdown() plugin to inject any generated
content into a sitwide template:
class SiteTemplatePlugin extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopShutdown()
{
$response = Zend_Controller_Front:;getInstance()->getResponse();
$view = Zend_Registry::get('view');
$view->content = $response->getBody();
$response->setBody($view->render('site.phtml'));
}
}
Which poses a problem when you want to send back json (or whatever) and
you don't want a site wide template :)
This was a simple example. But it's actually really easy to return JSON:
public function dispatchLoopShutdown()
{
// assume that we've already determined the request is ajax
$request = $this->getRequest();
$response = $this->getResponse();
$view = Zend_Registry::get('view');
if ($request->getParam('isAjax', false)) {
// Ajax request detected
// Get any variables set in the view
$vars = get_object_vars($view);
// Merge with named path segments in response
$vars = array_merge($vars, $response->getBody(true));
// Create a header and set the response body to a JSON value
$resposne->setHeader('Content-Type', 'text/x-json');
$response->setBody(Zend_Json::encode($vars));
return;
}
// Otherwise, process as normal
$view->content = $response->getBody();
$response->setBody($view->render('site.phtml'));
}
--
------------------------------------------------------------------------
Dale McNeill |
Alchemy Systems | phone: (512) 532-8050
http://www.alchemysystems.com | email: [EMAIL PROTECTED]
------------------------------------------------------------------------