2010年2月22日星期一

Re: [fw-mvc] Passing parameters to view scripts

Hi,

you want to use view partials or zend_layout (more in manual).

For what you are building, zend_layout is a best choice. 

--
Juozas Kaziukėnas (juozas@juokaz.com)
Aš internete - JuoKaz (http://www.juokaz.com)


On Tue, Feb 23, 2010 at 12:14 AM, electrotype <electrotype@gmail.com> wrote:

I want to be able to pass some parameters to a template I include. For
example, in a template I would like to include another template,
'header.phtml', and telling it to show a logo or not:

----------------------
<div id="top">
   <?php
       // doesn't work: no parameters allowed
       $header = $this->render('header.phtml', array('showLogo' => true));
       echo $header;
   ?>
</div>
<div>
   some other content
</div>

----------------------

The default Zend_View doesn't allow that. I think it's not possible to do
that with placeholders either. So I coded my own solution, but I want to be
sure there is not an already existing solution I didn't see!

My solution:

-----------------
// I use my own view class
class My_View extends Zend_View
{
   protected $_renderParameters = array();
   protected function setRenderParameters($renderParameters)
   {
       $this->_renderParameters = $renderParameters;
   }
   protected function addRenderParameters($parameters)
   {
       $this->_renderParameters = array_merge($this->_renderParameters,
$parameters);
   }
   protected function getRenderParameters()
   {
       return $this->_renderParameters;
   }

   public function renderWithParams($fileName, $parameters = array())
   {
       $previousParameters = $this->getRenderParameters();

       $this->addRenderParameters($parameters);

       // call real render() method
       $content = $this->render($fileName);

       // reset parameters
       $this->setRenderParameters($previousParameters);

       return $content;
   }
}

----------------------

And then I can have a template to include another template with parameters:

----------------------
<div id="top">
   <?php
       $header = $this->renderWithParams('header.phtml', array('showLogo'
=> true));
        echo $header;
   ?>
</div>
<div>
   some other content
</div>

----------------------

And in "header.phtml":

----------------------
<?php
$params = $this->getRenderParameters();

if(isset($params['showLogo']) && $params['showLogo'] === true)
{
?>
    /img/logo.jpg
<?php
}
?>
<div>
   some other content
</div>

----------------------


Did I reinvented the wheel? Is there something I didn't see?

Thanks in advance!





--
View this message in context: http://n4.nabble.com/Passing-parameters-to-view-scripts-tp1565353p1565353.html
Sent from the Zend MVC mailing list archive at Nabble.com.


没有评论: