Теперь можно менять элементы в дереве (через плагин на событие OnManagerNodePrerender), к примеру иконки скрывать дочерние документы, менять логику действия по клику, изменять контекстное меню и другое
Так же появилась галочка которая скрывает все дочерние документы из дерева массово:
Полный список изменений:
- refactor onManagerNodePrerender (now can full castomize tree, only for MODxRE_dropdownMenu)
- update IF
- update DocLister to 2.3.1
- update DLBuildMenu to 1.2
- alias_visible fix - select children of hidden parents when building cache
- Fix install check db version
- update tinyMCE to 4.6.1
Пример плагина который меняет контекстное меню:
$e = &$modx->Event;
switch($e->name){
case 'OnManagerNodePrerender':
if($ph['id'] == '9'){
//Просто меняем иконку если id 9
$ph['icon'] = "<i class='fa fa-address-card-o'></i>";
}
if($ph['id'] == '10'){
//скрываем дочерние документы + меняем иконку + пишем в лог переменные масива ph что б глянуть что же можно изменять
$ph['icon'] = "<i class='fa fa-list'></i>";
//$ph['icon_folder_open'] = "<i class='fa fa-list-alt'></i>";
//$ph['icon_folder_close'] = "<i class='fa fa-list-ul'></i>";
$ph['showChildren'] = '0';
$ph['tree_page_click'] = 'index.php?a=3&id='.$ph['id'].'&tab=1';
$modx->logEvent(123, 1, '<pre>- '.print_r($ph, true).' -</pre>', 'Заголовок сообщения'. $ph['id']);
}
if($ph['id'] == '10') {
//Свое кастомное меню для примера взял стандартное что б было понятно что изменять
$ph['contextmenu'] = array(
'header1' => array(
'innerText' => $ph['nodetitle'],
),
'item3' => array(
'innerHTML' => '<i class="fa fa-file-o fa-fw fa-lg"></i> Добавить товар',
'title' => 'Дочерний ресурс',
'id' => 'item3',
'onclick' => "modx.tree.menuHandler(3);",
),
'item2' => array(
'innerHTML' => '<i class="fa fa-pencil-square-o fa-fw fa-lg"></i> Редактировать',
'title' => ' Редактировать',
'id' => 'item2',
'onclick' => "modx.tree.menuHandler(2);",
),
'item5' => array(
'innerHTML' => '<i class="fa fa-arrows fa-fw fa-lg"></i> Переместить',
'title' => 'Переместить',
'id' => 'item5',
'onclick' => "modx.tree.menuHandler(5);",
),
'item7' => array(
'innerHTML' => '<i class="fa fa-clone fa-fw fa-lg"></i> Сделать копию',
'title' => 'Сделать копию',
'id' => 'item7',
'onclick' => "modx.tree.menuHandler(7);",
),
'item11' => array(
'innerHTML' => '<i class="fa fa-sort-numeric-asc fa-fw fa-lg"></i> Сортировать по позиции в меню',
'title' => 'Сортировать по позиции в меню',
'id' => 'item11',
'onclick' => "modx.tree.menuHandler(11);",
),
'seperator' => '',
'item9' => array(
'innerHTML' => '<i class="fa fa-arrow-up fa-fw fa-lg"></i> Опубликовать',
'title' => 'Опубликовать',
'id' => 'item9',
'onclick' => "modx.tree.menuHandler(9);",
),
'item10' => array(
'innerHTML' => '<i class="fa fa-arrow-down fa-fw fa-lg"></i> Отменить публикацию',
'title' => 'Отменить публикацию',
'id' => 'item10',
'onclick' => "modx.tree.menuHandler(10);",
),
'item4' => array(
'innerHTML' => '<i class="fa fa-trash fa-fw fa-lg"></i> Удалить',
'title' => 'Удалить',
'id' => 'item4',
'onclick' => "modx.tree.menuHandler(4);",
),
'item8' => array(
'innerHTML' => '<i class="fa fa-arrow-circle-o-up fa-fw fa-lg"></i> Восстановить',
'title' => 'Восстановить',
'id' => 'item8',
'onclick' => "modx.tree.menuHandler(8);",
),
'seperator2' => '',
'item6' => array(
'innerHTML' => '<i class="fa fa-link fa-fw fa-lg"></i> Дочерняя веб-ссылка',
'title' => 'Дочерняя веб-ссылка',
'id' => 'item6',
'onclick' => "modx.tree.menuHandler(6);",
),
'seperator3' => '',
'item1' => array(
'innerHTML' => '<i class="fa fa-list fa-fw fa-lg"></i> Все товары',
'title' => 'Обзор ресурса',
'id' => 'item1',
'onclick' => "modx.tree.menuHandler(1);",
),
'item12' => array(
'innerHTML' => '<i class="fa fa-eye fa-fw fa-lg"></i> Просмотр',
'title' => 'Просмотр',
'id' => 'item12',
'onclick' => "modx.tree.menuHandler(12);",
),
'seperator4' => '',
'item100' => array(
'innerHTML' => '<i class="fa fa-info fa-fw"></i> Пример своего пункта',
'title' => 'Title',
'id' => 'item1',
'onclick' => "alert('Простой алерт можно заменить на что угодно работает любой js')",
),
'image2' => array(
'innerHTML' => '<img src="/assets/images/modx-logo.png" width="200" />'
)
);
//Незабываем проверять если документ опубликован то ссылка опубликовать не имеет смысла так же как и сортировка пунктов если это не папка.
if ($ph['isfolder']=='0') unset($ph['contextmenu']['item11']);
if ($ph['deleted']=='0') unset($ph['contextmenu']['item8']);
if ($ph['deleted']=='1') unset($ph['contextmenu']['item4']);
if ($ph['published']=='0') unset($ph['contextmenu']['item10']);
if ($ph['published']=='1') unset($ph['contextmenu']['item9']);
}
$e->output(serialize($ph));
break;
}
В целом логика работы 1 в 1 с работой плагина на изменение верхнего меню:
$e = &$modx->Event;
switch($e->name){
case 'OnManagerMenuPrerender':
if($_SESSION['mgrRole']!=='2') return;
unset($menu['reports']);
unset($menu['tools']);
unset($menu['users']);
unset($menu['modules']);
unset($menu['elements']);
unset($menu['add_resource']);
unset($menu['add_weblink']);
$menu['remove_locks'] = array('remove_locks','site','Удалить блокировки','javascript:removeLocks();','Удалить блокировки','this.blur();','remove_locks','',0,20,'');
$e->output(serialize($menu));
break;
}
Таким образом мы можем полностью изменять админку под свои нужны.
Ну и еще минус 2 преимущества REVO(изменение меню и collections), по части collections в планах сделать модуль который даст возможность удобно работать с документами ибо это очень важная часть для Интернет магазинов и нужен мне в evoShop.
Скачивать как всегда с гит или тут: modx.com.ua
Александр 23.05.2017 12:03 #
Dmi3yy 23.05.2017 12:04 #
modx.im/blog/addons/4287.html