0

我不确定我是否以正确的方式做这件事。我的目标是在我的布局中显示标题部分的登录或导航。

我的实现看起来像这样(没有逻辑):

2 布局脚本:

  • 登录.phtml
  • 导航.phtml

FrontController 插件:

class Plugin_Header extends Zend_Controller_Plugin_Abstract {

        /**
         * PreDispatch
         *
         * Decides wich kind of navigation is displayed in header section
         * for logged in users the menu, for guests the login box and
         * link to registration form.
         *
         * @return void
         */
        public function preDispatch(Zend_Controller_Request_Abstract $request)
        {
            $layout = Zend_Layout::getMvcInstance();
            $layout->topNavigation = $layout->render('login'); // or navigation 
        } 
}

它工作正常,但这是最好的方法吗?;)

4

2 回答 2

1

我建议将功能放在视图助手或部分视图中。我猜你以不应该弯曲的方式弯曲布局:)

我会这样做:

  • 有两个部分 - 导航和登录
  • 制作一个视图助手 My_View_Helper_RenderHeader() 检索一个参数 - boolean $isLoggedIn
  • 基于布尔值渲染导航 $isLoggedIn = true 否则登录部分。
  • 您还可以添加某种设置(假设为不同的部分名称或不同的路径)以使该组件更可重用

其他积极的事情是,如果您实现“toString”方法,您可以将布尔值存储在帮助程序中 - 出于某种原因设置它。在 index.phtml 视图中,然后使用echo $this->renderHeader(). 太棒了,不是吗?如果您不确定,请查看 head*(脚本、链接、...)助手代码。

于 2009-10-19T20:24:52.207 回答
0

我使用不同的布局:

anonymous.phtml
authenticated.phtml

并且在前端控制器插件的 preDispatch() 方法中有这个:

$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity()) {
    $layout = 'authenticated';
} else {
    $layout = 'anonymous';
}


// Bootstrap layouts
Zend_Layout::startMvc(array(
'layoutPath' => APPLICATION_PATH . '/layouts/scripts',
'layout' => $layout
));

此外,我发现在这里检查 Ajax 请求 ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') 也很有用,并且有第三个“ajax”(空)布局。

于 2009-10-19T18:35:18.840 回答