Плюшка CMS#17.01.2018 новое

/* Создан для быстрой разработки приложений */
Скачать Демо

16. Меню

09.10.2015

В административной части сайта устройство меню довольно схоже с устройством виджетов.

В базе данных есть таблица «menuType», в которой хранится описание всех типов меню. Поля этой таблицы таковы:

При нажатии на кнопку «добавить пункт меню» и выборе из списка типа меню, в диалоговое окно подгружается форма, содержащая дополнительные элементы управления. Суть этой формы состоит в том, чтобы сформировать ссылку на какую-либо страницу сайта (при этом также могут вноситься какие-либо данные в базу данных или создаваться какие-либо файлы).

В контроллере, указанном в поле «controller» таблицы «menuType» должны быть предусмотрено два метода для каждого типа меню:

public function actionMenuNAME() {
if($_GET['link']) $link=$_GET['link']; else $link='';
...
$f=core::form();
$f->submit('
Продолжить','submit);
return $f

}

public function actionMenuNAMESubmit($data) {
...
return
$link;
}

Тут NAME это название типа виджета.

Первый метод должен сформировать HTML-форму, параметры которой определяют тип ссылки. Если метод вызван для редактирования существующей ссылки, то эта ссылка будет доступна через переменную $_GET['link'].

Иногда никаких полей в форме не требуется, тогда нужно просто вернуть «пустую» форму так, как это сделано в примере. В данном примере для кнопки «продолжить» задано имя «submit» - это нужно для того, чтобы в $_POST был хотя бы один параметр, иначе метод actionMenuNameSubmit() вызван не будет.

Эта процедура является действием контроллера, поэтому она может возвращать MVC представление также, как это делается для основного контента (описано в разделе про MVC). Кроме того можно устновить текст подсказки через $this->cite, а вот метатеги и заголовок страницы не используется.

Второй метод является submit-действием. Он получает данные HTML-формы из первой процедуры и должен вернуть строку, содержащую ссылку на страницу, например «article/blog/news».

Очевидно, что при создании пункта меню могут также создаваться сопутствующие данные (в базе данных или в файловой системе). Поэтому при удалении пункта меню нужно также обязательно удалить эти сопутствующие данные. Для этого нужно установить обработчик на событие «menuItemDelete». Обработчику передаётся один параметр — удаляемая ссылка.

Важно! Меню может содержать несколько ссылок на одну и ту же страницу, поэтому перед удалением данных нужно обязательно выполнить примерно такую проверку:

if($db->fetchValue('SELECT COUNT(id) FROM menuItem WHERE link='.$db->escape($link))!='1') return true;

Подробнее про обработку событий написано в разделе «События (хуки)».