我有关于构建子菜单的问题。在我的布局中,不是在视图中,我有两个元素。第一个元素是主菜单,第二个元素是子菜单。当您将鼠标悬停在主菜单上的按钮上时,主菜单下会出现一个神奇的子菜单,这不是那种子菜单。
我了解如何在CakePHP中构建动态主菜单。 Model-Controller->View->Element->Layout
。但是当我使用同样的approuch进行我的子菜单时,我的子菜单将是静态的。因为当我按下按钮时,内容正在改变(视图)而不是布局。
有哪些解决方案可以将子菜单更改为主菜单上相应的按下按钮?
Controller / MenuController.php
class MenusController extends AppController{
var $name = 'Menus';
function main() {
if (isset($this->params['requested']) && $this->params['requested'] == true) {
$menus = $this->Menu->find('all', array( 'conditions' => array('Menu.parent_id' => '0'), array ('order' => 'position')));
return $menus;
} else {
$this->set('menus', $this->Menu->find('all', array( 'conditions' => array('Menu.parent_id' => '0'), array ('order' => 'position'))));
}
}
function sub() {
if (isset($this->params['requested']) && $this->params['requested'] == true) {
$subs = $this->Menu->find('all', array( 'conditions' => array('Menu.parent_id' => '1'), array ('order' => 'position')));
return $subs;
// } else {
// $this->set('subs', $this->Menu->find('all', array( 'conditions' => array('Menu.controller' => $this->params['controller']), array ('order' => 'position'))));
}
//debug($this->params['controller']);
}
}
模型/ Menu.php
class Menu extends AppModel {
var $name = 'Menu';
}
查看/布局/ default.thtml中
<div id="submenu">
<?php echo $this->element('main'); ?>
<?php echo $this->element('sub'); ?>
</div>
我尝试为子菜单构建查询。普通字符串确实有效。当我请求控制器名称并在查询中使用它时它不起作用。通过debug($ this-&gt; request ['controller']),我可以看到控制器名称。但为什么这不能在查询中工作?
function sub() {
// $subrequest = "Projects";
$subrequest = $this->request['controller'];
if (isset($this->params['requested']) && $this->params['requested'] == true) {
$subs = $this->Menu->find('all', array( 'conditions' => array('Menu.controller' => $subrequest)));
return $subs;
} else {
$this->set('subs', $this->Menu->find('all', array( 'conditions' => array('Menu.controller' => $subrequest))));
}
}
答案 0 :(得分:0)
在每个页面加载时呈现整个布局和视图。你不需要你的MenuController。您需要在$menus
方法中设置$subs
和AppController->beforeFilter
变量,以便检测您所在的控制器和操作。确保每个控制器都扩展AppController并调用其parent::beforeFiler
。
答案 1 :(得分:0)
感谢您的时间。
我的主题和topic的答案给了我最终解决方案。
那我做了什么?