Как получить параметры в макете Zend - PullRequest
1 голос
/ 29 ноября 2010

Я работаю над книгой "Zend Framework - Руководство для начинающих". Часть третьей главы описывает работу с masterlayout.

Для моей навигации я бы хотел динамически установить id-атрибут тела. Как я могу получить параметр из любого контроллера в этот файл макета?

Мастер-макет задается в application.ini:

resources.layout.layoutPath = APPLICATION_PATH "/layouts"
resources.layout.layout = master

привет Frank

Ответы [ 2 ]

2 голосов
/ 29 ноября 2010

Лучший способ сделать это - использовать заполнители.Вот пример макета:

master.phtml
------------
<html>
   <head>
      <title>My Master Layout</title>
   </head>
   <body id="<?= $this->placeholder('my_dynamic_id_attrib'); ?>">
    ...
   </body>
</html>

Обратите внимание, что значение атрибута "id" начинается с "<?=".Это то же самое, что и "<?php echo", и оно должно работать правильно, если вы используете файл .htaccess по умолчанию, который рекомендует Zend.Если «<?=» не работает для вас, просто замените его на:

<body id="<?php echo $this->placeholder('my_dynamic_id_attrib'); ?>">

Теперь в вашем контроллере вы можете установить свой динамический идентификатор, используя:

IndexController.php
-------------------
public function indexAction(){

  //------------------------------------
  // Can either be $_GET or $_POST, etc.
  $dynamicParam = $this->_getParam('id');

  //------------------------------------
  // Set the dynamic id
  $this->view->placeholder('my_dynamic_id_attrib')->set($dynamicParam);
}
2 голосов
/ 29 ноября 2010

Вы можете использовать view-переменные для простых переменных, которые нужно передать в скрипты макета:

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

function indexAction()
{
    $this->view->pageTitle = "Zend Layout Example";
}

В вашем макете:

<html>
<head>
    <title><?php echo $this->escape($this->pageTitle); ?></title>
</head>
<body></body>
</html>
...