如何建立從類別和子類別的導航菜單,就像這樣:如何創建動態導航菜單的CakePHP
http://mysite/categories/view/1/2
我試過菜單生成器1.01,但它僅適用於ACL用戶。 我也讀過這tutorial,但它沒有幫助。
如何建立從類別和子類別的導航菜單,就像這樣:如何創建動態導航菜單的CakePHP
http://mysite/categories/view/1/2
我試過菜單生成器1.01,但它僅適用於ACL用戶。 我也讀過這tutorial,但它沒有幫助。
您的第一個鏈接不起作用。
坦率地說,我甚至不知道我明白你想要做什麼。您提供的第二個鏈接 - 我承認我只查看了第一個代碼段 - 不使用數據庫表。如果你希望你的菜單是動態的,就像在基於控制器的動作一樣,這是有道理的。如果你希望它是「動態的」,就像你想要對CRUD訪問的菜單項進行動態控制一樣(你知道CRUD代表什麼,對嗎?),這是一個不同的(真正簡單的)故事。
這是最基本的,可以想象的簡單的例子。在我的沙箱Cake 1.3.12安裝中,我在十五分鐘內從字面上把它們一起拍了下來。我很確定我得到了Cake 2的所有名稱,但是有些調整可能是必要的。我試圖削減絕對的基礎知識,並儘可能保持代碼的清晰。按照適合你的方式進行構建。請參閱食譜並記住隨時遵循Cake約定。
menus
的名稱創建一個表。menu.php
的模型。MenusController.php
。創建/Views/Menus
目錄和/views/Elements/Menus
。
CREATE TABLE menus
( id
INT(11)無符號NOT NULL的auto_increment, name
VARCHAR(255)NOT NULL默認 '', controller
VARCHAR(255)NOT NULL, action
VARCHAR(255)NOT NULL, created
datetime NOT NULL, modified
datetime default NULL, PRIMARY KEY(id
) )ENGINE = InnoDB DEFAULT CHARSET = utf8;
型號代碼 - Menu.php:
<?
class Menu extends AppModel {
var $name = 'Menu';
}
控制器代碼 - MenusController.php:
<?
class MenusController extends AppController {
var $name = 'Menus';
function index() {
if (isset($this->params['requested']) && $this->params['requested'] == true) {
$menus = $this->Menu->find('all');
return $menus;
} else {
$this->set('menus', $this->Menu->find('all'));
}
}
function add() {
if (!empty($this->data)) {
if ($this->Menu->save($this->data)) {
$this->Session->setFlash(__('The menu item has been saved', true));
}
}
}
// Build out additional CRUD functionality,
// for example edit/view/delete, as desired.
}
每MenusController行動需要在[動作名稱] .ctp文件/view/menus/
。
因此創建/views/menus/index.ctp
和/views/menus/add.ctp
。你放入/views/menus/index.ctp的內容甚至不是非常重要,而/ views/menus/add。CTP是根據需要將用於增加新的菜單項形式:
<div class="menus form">
<?php echo $this->Form->create('Menu');?>
<fieldset>
<legend><?php __('Add Menu Item'); ?></legend>
<?php
echo $this->Form->input('name');
echo $this->Form->input('controller');
echo $this->Form->input('action');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit', true));?>
</div>
現在,創建/views/elements/menus/main.ctp
:
<ul class="header main-menu">
<? if (!isset($menus) || empty($menus)) :
$menus = $this->requestAction('/menus/index');
endif;
foreach($menus as $menu) :
?>
<li>
<?="<a href='".DS.$menu['Menu']['controller'].DS.$menu['Menu']['action']."'>".$menu['Menu']['name']."</a>"; ?>
</li>
<? endforeach; ?>
</ul>
最後,將元素在佈局所以它出現在無論哪個視圖,每一頁。如果您使用的是默認的蛋糕佈局,那意味着您應該編輯/views/layouts/default.ctp
。你可能想把這個東西放在合適的地方,比如<div id="header">
元素。插入element()
電話如下:
<div id="header">
<!-- whatever markup, code, etc. you may have in the header is fine. -->
<?= $this->element('menus/main'); ?>
</div>
<!-- ...the rest of your layout continues... -->
這可能是必要的造型添加到您的元素,使之可讀。根據需要將樣式添加到您可能具有的任何樣式表(默認爲cake.generic.css)。
HTH。 The cookbook是你的朋友。
你不unerstand我,, – user1080247
這聽起來像你要找人來爲你的程序的菜單,是不是有可能你會收到一個答案在這裏的一個問題。這有點像問「我如何構建管理工具?」。 – Dave