Как я могу создать меню навигации из категорий и подкатегорий, например:
http://mysite/categories/view/1/2
Я попробовал построитель меню 1.01, но он работает только для пользователей acl. Я также прочитал это руководство, но оно не помогло.
Как я могу создать меню навигации из категорий и подкатегорий, например:
http://mysite/categories/view/1/2
Я попробовал построитель меню 1.01, но он работает только для пользователей acl. Я также прочитал это руководство, но оно не помогло.
Ваша первая ссылка не работает.
Честно говоря, я даже не уверен, что понимаю, что вы пытаетесь сделать. Вторая предоставленная вами ссылка — признаюсь, я просмотрел только первый фрагмент кода — не использует таблицу базы данных. Если вы хотите, чтобы ваше меню было динамичным, например, основанным на действиях контроллера, это имеет смысл. Если вы хотите, чтобы он был «динамическим», например, с динамическим контролем над элементами меню, к которым вы хотите иметь доступ CRUD (вы ведь знаете, что означает CRUD, верно?), это другая (действительно очень простая) история. .
Это самый простой пример, который только можно себе представить. Я буквально слепил это за пятнадцать минут в моей песочнице Cake 1.3.12. Я почти уверен, что изменил все имена для соглашений Cake 2, однако может потребоваться некоторая настройка. Я попытался сократить его до абсолютных основ и сделать код максимально понятным. Стройте так, как вам удобно. Обратитесь к кулинарной книге и не забывайте всегда следовать правилам торта.
menus
.menu.php
.MenusController.php
.Создайте каталог /Views/Menus
и /views/Elements/Menus
.
CREATE TABLE menus
( id
int(11) unsigned NOT NULL auto_increment, name
varchar(255) NOT NULL default '', controller
varchar(255) NOT NULL, action
varchar(255) NOT NULL, created
datetime NOT NULL, modified
datetime по умолчанию NULL , ПЕРВИЧНЫЙ КЛЮЧ (id
) ) ENGINE = InnoDB НАБОР ШИМОВ ПО УМОЛЧАНИЮ = 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) по желанию.
ХТН. Поваренная книга — ваш друг.