Загружается...

Модификация верхнего меню админки

Задача

Добавить или удалить пункты в основном меню админстративной панели 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); //возвращаем новое меню
}

Вот и все :)