我是cakephp的新手。我想为我的网站建立一个菜单系统。反正有没有在整个站点显示控制器输出视图?我的控制器是这样的:
<?php
App::uses('AppController', 'Controller');
class MenusController extends AppController {
// I want to show all avilable controller in my application
public $components = array('ControllerList');
public function index() {
$this->set('menus', $this->ControllerList->getList());
}
}
我的观点:
foreach ($dataForView['menus'] as $key => $val) {
if ($val['name'] == 'Menus') {
unset($val['name']);
unset($val['actions']);
}
else {
echo '<li class="dropdown">';
echo "<a href='#' class='dropdown-toggle' data-toggle='dropdown'>".$val['name'].'<b class="caret"></b></a>' ;
echo '<ul class="dropdown-menu">';
foreach ($val['actions'] as $key => $value) {
echo '<li><a href="#">'. $value .'</a></li>';
if ($value == 'add') {
break;
}
}
echo "</li></ul>";
}
}
答案 0 :(得分:2)
您拥有的其中一个选项是让ControllerList
成为AppController
和menus
的组成部分
在beforeFilter
的{{1}}方法中设置AppController
属性。
示例:
class AppController extends Controller {
var $components = array(
'ControllerList'
);
public function beforeFilter() {
$this->set('menus', $this->ControllerList->getList());
}
}
CakePHP Controller Callbacks docs here
对于视图,您应该将菜单创建为元素,并在布局中包含一次。
示例:
app/View/Element/main_menu.ctp:
foreach ($dataForView['menus'] as $key => $val) {
... // your code here
}
然后将其包含在您的布局中(例如app / View / Layouts / default.ctp)
<?php echo $this->element('main_menu'); ?>