Я установил новый contentkey для отображения меню в правом столбце моего сайта. Вот так:

public function menuAction()
{        
    $this->view->layout()->setContentKey('menu');

}

Это код макета:

<div class="center_col"><?php echo $this->layout()->content; ?></div>
<div class="right_col"><?php echo $this->layout()->menu; ?></div>

Но есть проблема!! после настройки меню contentKey результат каждого действия отображается в правом столбце (контент не работает!)

У меня есть плагин для действий в меню, я думаю, это причина!

Это мой плагин:

class Places_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract
{
public function dispatchLoopStartup( Zend_Controller_Request_Abstract $request)
{
    $front = Zend_Controller_Front::getInstance();

    if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
            $actionStack = new Zend_Controller_Plugin_ActionStack();
            $front->registerPlugin($actionStack, 97);
        } else {
        $actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
    }

        $menuAction = clone($request);
        $menuAction->setActionName('menu')->setControllerName('index');
        $actionStack->pushStack($menuAction);

}}

Мне нужен вызов действия меню на всех страницах, поэтому я использую этот плагин!

Есть ли способ решить мою проблему?!


Ответьте с помощью Марцина и SMka:

 public function menuAction()
{        

    $this->view->placeholder("menu")
                  ->append($this->view->render("menu/menu.phtml" ));

}
0
afsane 15 Апр 2011 в 19:50
1
Рассматривали ли вы возможность использования помощника представления заполнителя? В этой ситуации, возможно, это было бы более подходящим, чем изменение имени контента.
 – 
Marcin
16 Апр 2011 в 06:52
Я проверил это, но он не может t manage in action method (or i couldn ничего найти для этого), я должен использовать файл начальной загрузки для управления этим! я предпочитаю управлять меню в методе действия
 – 
afsane
16 Апр 2011 в 11:54
1
Афсан. Вы можете получить доступ к помощнику представления заполнителя в своих действиях, например. $this->view->placeholder('my-placeholder').
 – 
Marcin
16 Апр 2011 в 12:03

1 ответ

В вашем действии меню просто сделайте рендеринг в именованный сегмент

// Renders my/login.phtml to the 'form' segment of the
// response object
$this->render('login', 'form');

Нет необходимости layout()->setContentKey, этот метод для других целей

1
SMka 16 Апр 2011 в 09:12