Zend Framework: макет - PullRequest
       5

Zend Framework: макет

0 голосов
/ 05 декабря 2009

как я могу добавить некоторые переменные в мой layout.phtml? Я мог бы добавить его в каждый контроллер, как здесь: Отправка переменных в макет в Zend Framework

Но это на самом деле не наводит на мысль, и в Bootstrap я тоже не хочу его добавлять.

Ответы [ 3 ]

1 голос
/ 05 декабря 2009

Создайте новый абстрактный контроллер, который будет расширяться Zend_Controller_Action.

IndexController extends My_Controller_Action -> My_Controller_Action extends Zend_Controller_Action

И там вы должны положить в init() все, что вы хотите. :)

1 голос
/ 05 декабря 2009

Вы можете создать плагин фронт-контроллера под названием LayoutDefaults:

class MyLib_Controller_Plugin_LayoutDefaults extends Zend_Controller_Plugin_Abstract
{    
  public function preDispatch(Zend_Controller_Request_Abstract $request)
  {
    $mvc = Zend_Layout::getMvcInstance();
    if ( !$mvc ) return;
    $view = $mvc->getView();
    if ( !$view ) return;

    /**
     * Set the defaults.
     */
    $view->value1 = "default value1";
  }
}

В вашем переднем контроллере:

Zend_Controller_Front::getInstance()
  ->registerPlugin( new MyLib_Controller_Plugin_LayoutDefaults() );

В вашем layout.phtml:

<?= $this->escape($this->value1) ?>

И, наконец, в ваших контроллерах при необходимости измените значение по умолчанию:

$this->view->value1 = "new value 1";
0 голосов
/ 05 декабря 2009

Звучит так, будто вы пытаетесь скрыть содержимое от контроллера. Я также верю в то, что пытаюсь сохранить содержимое просмотра вне контроллера, поэтому я стараюсь размещать содержимое просмотра в своих представлениях, когда это возможно. Я делаю это так:

Например, в layout.phtml у меня может быть два заполнителя, один для заголовка, а другой для основного контента:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title><?php echo $this->escape($this->placeholder('titleContent')) ?></title>
</head>
<body>
  <div id="maincontent">
    <?php echo $this->layout()->content ?>
  </div>
</body>

, а затем в самом представлении index.phtml я помещаю обе части контента следующим образом:

<?php $this->placeholder('titleContent')->Set('My Index Page Title') ?>
<p>Index page content here</p>

Вы можете добавить столько заполнителей, сколько захотите, без ущерба для ваших контроллеров. При использовании этого метода большая часть контента остается вне контроллера, если она не поступает из модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...