我不确定我是否正确地做到了这一点。我的目标是在我的布局中在标题部分显示登录或导航。
我的实现看起来像这样(没有逻辑):
2布局脚本:
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
}
}
它工作正常,但这是最好的方法吗? ;)
答案 0 :(得分:1)
我建议将功能放在view helper或partial中。你弯曲布局的方式不应该弯曲,我猜:)
我会这样做:
其他积极的一点是,如果你实现了“toString”方法,你可以在帮助器中存储布尔值 - 出于某种原因设置它为ex。在index.phtml视图中,然后使用echo $this->renderHeader()
在布局中的适当位置渲染它。太棒了,不是吗?如果您不确定,请查看head *(脚本,链接,...)帮助程序代码。
答案 1 :(得分: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”(空)布局也很有用。