Макет в Zend Framework - PullRequest
       0

Макет в Zend Framework

0 голосов
/ 21 марта 2012

Я использовал свой собственный макет для управления загрузкой страниц внутри страницы индекса.

   <div id="content">
            <ul>
                <li><a href="<?php echo $this->url(array('module' => 'visits', 'controller' => 'visit', 'action' => 'index', 'page' => 'view'), NULL, TRUE); ?>" class="showVisists">Display all visits</a></li>
                <li><a href="<?php echo $this->url(array('module' => 'visits', 'controller' => 'visit', 'action' => 'index', 'page' => 'add'), NULL, TRUE); ?>" class="addVisit">Add new visit</a></li>
            </ul>

            <span class="result"><?php echo $this->message ?></span>
            <div id="innerpage">
             <?php include_once($this->pageToInclude . ".phtml") ?>
            </div>
        </div>

Когда я выбираю привязку в навигации, параметр принимается через действие индекса контроллера, которое выбирает страницу.Я должен включить и вернуть его на страницу индекса, чтобы можно было просматривать страницу.

public function indexAction() {
    $status = $this->getRequest()->getParam('page');
    switch ($status) {
        case 'view':
            $pageToInclude = 'get-visits';
            break;
        case 'add':
            $pageToInclude = 'add';
            break;
   default:
            $pageToInclude = 'get-visits';

    }

    $this->view->pageToInclude = $pageToInclude;
}

Теперь я хочу использовать макеты, поддерживаемые Zend Framework.

Я включилмакет и скопировал все содержимое индекса в layout.phtml.

Когда я включил страницы в макет, произошла ошибка.Я знаю, что не должен использовать includes или даже require в Zend Framework, но я не знаю, как отобразить представление «получить все посещения», когда я нажимаю на якорь «Показать все посещения» внутримакет страницы.

Я хочу сделать что-то вроде этого:

<div id="innerpage">
               <?php echo $this->layout()->content; ?>

            </div>

но как мне указать содержимое динамически?

Примечание: я новичок в Zend Framework,и пока не знаком с тем, как эффективно с ним работать.

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Hum ваш вопрос не на 100% ясно. Это на основе AJAX?

NON Ajax на основе:

Просто перейдите по ссылке из Навигации к действию вашего контроллера, после чего соответствующий «.phtml» вид будет отображен в «области содержимого»:

// reders: view/scripts/index/addvisit.phtml
public function addvisitAction 
{

}

Лучший способ создать ссылки внутри навигации - помощник по URL:

<?php

$linkToAllVisits = $this->url(array(
    'controller' => 'index',
    'action'     => 'addvisits',
    'module'     => 'default'
));

?>

<div id="navi">
    <li><a href="<?php echo $linkToAllVisits; ?>">AllVisits</a></li>
</div>

Если вы хотите загрузить контент с помощью ajaxRequest (я думаю, вы хотите это сделать), просто откройте то же действие контроллера, как в примере выше, но отключите макет для этого действия:

// reders: view/scripts/index/addvisit.phtml
public function addvisitAction 
{
    // disable layout and return only .phtml
    $this->_helper->layout->disableLayout();

}

кстати, если вы хотите использовать Actionnames с "-", вы должны назвать действия как это в CamelCase:

// add-visits with add-visits.phtml
puhlic function addVisitsAction()
{}
0 голосов
/ 21 марта 2012

Я полагаю, что это важная часть вашего вопроса:

<?php include_once($this->pageToInclude . ".phtml") ?>

Тогда вы можете добиться того же, используя render() метод представления:

<?php echo $this->render($this->pageToInclude . ".phtml") ?>

Вы будетенеобходимо убедиться, что страница .phtml находится в разрешенном пути для render().Если это просто скрипт вида для обычного действия в том же контроллере, он должен быть уже в пути.

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