CakePHP - 不同元素中的子菜单

时间:2014-03-11 13:23:16

标签: php jquery cakephp

我有关于构建子菜单的问题。在我的布局中,不是在视图中,我有两个元素。第一个元素是主菜单,第二个元素是子菜单。当您将鼠标悬停在主菜单上的按钮上时,主菜单下会出现一个神奇的子菜单,这不是那种子菜单。

我了解如何在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))));
 }
}

2 个答案:

答案 0 :(得分:0)

在每个页面加载时呈现整个布局和视图。你不需要你的MenuController。您需要在$menus方法中设置$subsAppController->beforeFilter变量,以便检测您所在的控制器和操作。确保每个控制器都扩展AppController并调用其parent::beforeFiler

答案 1 :(得分:0)

感谢您的时间。

我的主题和topic的答案给了我最终解决方案。

那我做了什么?

  1. 我删除了menuController
  2. 我在appController中创建了一个beforeFilter,并将变量传递给元素main和     子。