如何在CakePHP中动态更改菜单链接

如何在CakePHP中动态更改菜单链接,cakephp,menubar,Cakephp,Menubar,在我的一个项目中,我必须根据我的内容页更改菜单链接。它就像,如果我的内容页是第1页,那么我的菜单链接将是菜单1、菜单2、菜单3,…,如果我的内容页是第2页,那么我的菜单链接将是菜单A、菜单B、菜单C 例如: 在我的标题中,菜单栏是: 我想要的是,当我在page any_page.ctpmeans中时,当我在函数anyPage中时,菜单栏将自动更改为: <ul> <li><?php echo $this->Html->link("Menu A",ar

在我的一个项目中,我必须根据我的内容页更改菜单链接。它就像,如果我的内容页是第1页,那么我的菜单链接将是菜单1、菜单2、菜单3,…,如果我的内容页是第2页,那么我的菜单链接将是菜单A、菜单B、菜单C

例如: 在我的标题中,菜单栏是:

我想要的是,当我在page any_page.ctpmeans中时,当我在函数anyPage中时,菜单栏将自动更改为:

<ul>
   <li><?php echo $this->Html->link("Menu A",array('controller'=>'controllers','action'=>'menuA','full_base'=>true));?></li>
   <li><?php echo $this->Html->link("Menu B",array('controller'=>'controllers','action'=>'menuB','full_base'=>true));?></li>
</ul>
我想根据我的页面更改菜单。用CakePHP有没有办法做到这一点

如果需要更多的解释,请告诉我。

省去您可能想要使用的所有的和CSS样式,您可以在导航栏中尝试类似的内容

if ($this->params['action'] == 'page1') {
    echo "menu item 1";
    echo "menu item 1";
    echo "menu item 1";
} elseif ($this->params['action'] == 'page2') {
    echo "menu item A";
    echo "menu item B";
    echo "menu item C";
} else {
    echo "something else A";
    echo "something else B";
    echo "something else C";
}

基本上,如果您想在视图中访问当前操作,可以通过$this->params['action']获得它。要查看可用的其他变量,请尝试使用debug$this->params。

您可以为菜单创建元素。 例如,您希望为第1页创建菜单

<ul>
      <li><?php echo $this->Html->link("Menu",array('controller'=>'controllers','action'=>'menu1','full_base'=>true));?></li>
      <li><?php echo $this->Html->link("Menu 2",array('controller'=>'controllers','action'=>'menu2','full_base'=>true));?></li>   
</ul>

控制器是错误的地方,请尊重MVC模式并在视图中执行。好的,我将在视图部分在视图文件或头文件中执行。但是,你能告诉我怎么做吗?@burzumits说的全是“如果有别的话”。如果你想得到一个想法,那么用具体而清晰的例子更新你的问题。我用一个例子改变了问题描述。你现在能解决我的问题吗@Fazallassel我认为你在尝试什么,这不是一个好主意。。。您正在更改url上的操作意味着您必须创建多个操作,如menu1、menu2、menuA、menuB以及它们的视图。。。。最好使用查询字符串或将参数传递给一个操作…好吧,仍然不清楚您的目的,但您可以尝试@schnaus建议的方法…如果您多次使用同一菜单,我建议使用元素,这样您就可以重用元素。非常感谢您的想法,我认为这很好:。@StripWebUsing元素很好,如果您多次使用同一段代码。但是,如果您只使用一次@schnaus,那么它的答案将是一个很好的选择:这对我来说是一个新事物,我不知道params数组在那里。非常感谢@施努斯
<ul>
      <li><?php echo $this->Html->link("Menu",array('controller'=>'controllers','action'=>'menu1','full_base'=>true));?></li>
      <li><?php echo $this->Html->link("Menu 2",array('controller'=>'controllers','action'=>'menu2','full_base'=>true));?></li>   
</ul>
if($this->params["controller"]=="users" && $this->params["action"]=="page1" ){
  echo $this->element('page1_menu');
}