Добавить или удалить пункты в основном меню админстративной панели MODx Evolution (далее MODx)
В MODx существует событие для плагина OnManagerMenuPrerender, которое передает переменную $menu. Содержимое данной переменной примерно следующее (расшифровка параметров указана напротив каждого параметра):
Array ( [site] => Array ( [0] => site // id пункта меню [1] => main // id родителя [2] => Сайт // Анкор [3] => #site // атрибут href ссылки [4] => Сайт // атрибут alt ссылки [5] => new NavToggle(this); return false; // действие по событию onclick [6] => '' // доступ [7] => '' // атрибут target ссылки [8] => 0 // разделитель (1 или 0) [9] => 10 // позиция меню [10] => active // атрибу class ссылки ) ... )
Все, что нам остается - это добавить или удалить пункты, а потому вернуть новый массив с данными системе.
Допустим, мы хотим вынести пункт Очистить кэш на основную панель, убрав ее из вкладки Сайт. Для этого напишем такой плагин:
$e = &$modx->event; if($e->name == 'OnManagerMenuPrerender') { $menu = $e->params['menu']; //получаем переменную $menu['refresh_site'][1] = 'main'; //указываем родительский блок main $e->output($menu); //возвращаем новое меню }
Для добавления пункта в меню код может быть таким:
$e = &$modx->event; if($e->name == 'OnManagerMenuPrerender') { $menu = $e->params['menu']; //получаем переменную $menu['new_link'] = array( 'new_link', 'main', 'Новая ссылка', 'index.php?a=4', 'Новая ссылка', 'setLastClickedElement(0,0);this.blur();', '', '', 0, 100, '' ); $e->output($menu); //возвращаем новое меню }
А для удаления таким:
$e = &$modx->event; if($e->name == 'OnManagerMenuPrerender') { $menu = $e->params['menu']; //получаем переменную unset($menu['new_link']); $e->output($menu); //возвращаем новое меню }
Вот и все :)