1.3.0
EVOLUTION CMS 1.3.0
Новый релиз EVO 1.3.0 в первую очередь интересен тем что идет уже под именем EVOLUTION CMS. А так же интересен тем что теперь не будет отдельно моей кастомной сборки которая развивалась активней основной ветки. Это приведет к тому что теперь обновления будут выходить чаще, думаю раз в месяц будет свежий релиз а не так как было последнее время что у нас 1 релиз в пол года год.
Сразу скажу пару слов про планы на будущее:
- Начиная с текущей версии у нас будет правильная версионность: http://semver.org/lang/ru/ думаю это будет куда как удобней и правильней.
- В ближайшее время будет закончена работа с сайтом для документации: docs.evo.im, и сниму видео как помогать с документацией так что б собрать все в одном месте. Также документация будет сразу мультиязычной.
- Так же будут перемещены многие дополнения из ядра в репозиторий.
- По части админки: удаление motools, перевод всего html на бутстрап.
- Так же в планах интеграция composer и многое другое, в скором времени собираюсь накидать roadmap где будет расписано что и как.
Что же нового в 1.3.0:
- Новое имя EVOLUTION CMS и Новый логотип.
- Исправление ошибок и стабильность работы
- Новая тема админ панели с большим количеством нововведений:
- Drag&drop В дереве документов
- Dark style Быстрое переключение внешнего вида адмики
- Еще легче еще быстрее
- Контекстное меню для елементов
- Удобный Ajax поиск по админке
- Запоминание путей в админ панели
- Меню элементов в 3 уровня с поиском и возможностью создать новый элемент
- Поддержка мобильных устройств, хотя еще есть над чем работать
- Виджеты для главной странички (OnManagerWelcomeHome)
- Изменение верхнего меню (OnManagerMenuPrerender)
- Изменения дерева документов (OnManagerNodePrerender)
Останавлюсь подробней на новинках:
Новое лого:
Больше спасибо компаниии SKY INCOM (https://www.skyname.net) за разработку логотипа:
Последние изменения по сравнению с версией 1.2.2
- delete all theme exept dafault
- fix style in default theme
- fix showChildren in tree
- fix #60 Shrinking browser width results in site tree overlay
- fix #62 Edited date on dashboard recently editied/created panel is wrapped
- new plugin Updater (For update evo from admin panel)
- Исправлено отображение навигации для менеджеров с разными правами
Новая тема
Переключается тема кнопочкой над деревом елементов возле корзины
Значительно ускорили скорость работы админки к примеру главная страничка весит меньш 740кб
и загружается за 0,2 сек. Раньше было: 1 мег и 0,8 секунды, Так же убрали 1 секунду ожидания после сохранения документа что так же добавило удобства в работе с админкой
Теперь удобней работать с элементами в шаблонах и чанках, так как можно быстро перейти к редактриованию или созданию нового элемента
Поиск в админке теперь AJAX + ищет не только по документам что облегчает разработку и навигацию, так же в верхнем меню отображаются сразу все элементы что ускоряет работу и с ними. Ну и в дополнение drag&drop в дереве документов и запоминание где мы находимся в админке теперь перезагрузка страницы не перекидывает на главную
Виджеты для главной страницы (OnManagerWelcomeHome):
Полностью переделали работу с виджетами, упростили их добавление а так же оставили задел на будущее что б можно было седлать удобный интерфейс для их изменения самим менеджером.
Пример виджета:
$e = &$modx->Event;
switch($e->name){
case 'OnManagerWelcomeHome':
//if($_SESSION['mgrRole']!=='2') return;
//$widgets['welcome']['hide']='1';
//$widgets['onlineinfo']['hide']='1';
//$widgets['recentinfo']['hide']='1';
//$widgets['news']['hide']='1';
//$widgets['security']['hide']='1';
$widgets['test'] = array(
'menuindex' =>'1',
'id' => 'test',
'cols' => 'col-sm-6',
'icon' => 'fa-rss',
'title' => 'test',
'body' => '<div class="card-body">[+modx_news_content+]</div>',
'hide'=>'0'
);
$e->output(serialize($widgets));
break;
}
Виджеты можно добавлять в разных плагинах, тоесть нет необходимости все виджеты настраивать в одном плагине. Так же в будущем думаю создадим модуль или плагин для удобной настройки самим пользователем. В прошлых версиях была проблема что админ не мог настроить виджеты для менеджера так как настройки хранились в локалстораже. Сейчас же с этим нет проблем.
Изменение верхнего меню (OnManagerMenuPrerender):
Верхнее меню можно менять довольно давно, собственно по логике с верхним меню и делали работу виджетов, ниже пример кода:
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','main','Удалить блокировки','javascript:modx.removeLocks();','Удалить блокировки','this.blur();','remove_locks','',0,20,'');
$e->output(serialize($menu));
break;
}
Единственное замечу что если будет несколько плагинов то удаление елементов нужно делать в последнем плагине, добавлять можно в любом.
Изменение документов в дереве а так же контекстного меню (OnManagerNodePrerender):
Этого функционала не хватало очень давно. Теперь можно менять поведение и внешний вид документов в дереве, менять иконку, по клику переходить в модуль (К примеру можно легко реализовать функционал Collections из MODX REVO), так же можно менять контекстное меню что б было более понятным к примеру на разделе новости место стандартного контекстного меню вывести: добавить новость, все новости.
Пример кода плагина:
$e = &$modx->Event;
switch($e->name){
case 'OnManagerNodePrerender':
if($ph['id'] == '2'){
//Просто меняем иконку если id 2
$ph['icon'] = "<i class='fa fa-address-card-o'></i>";
$ph['icon_folder_open'] = "<i class='fa fa-address-card-o'></i>";
$ph['icon_folder_close'] = "<i class='fa fa-address-card-o'></i>";
$modx->logEvent(123, 1, '<pre>- '.print_r($ph, true).' -</pre>', 'Заголовок сообщения'. $ph['id']);
}
if($ph['id'] == '15'){
//скрываем дочерние документы + меняем иконку + пишем в лог переменные масива 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';
//Свое кастомное меню для примера взял стандартное что б было понятно что изменять
$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' => "main.location.href='/'",
),
'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;
}
P.S.
- Так же хочу напомнить что основной репозиторий переехал сюда: https://github.com/evolution-cms/evolution/
- Все замечания по поводу некоректной работы, ошибок или предложения по улучшению пишем тут: https://github.com/evolution-cms/evolution/issues
- Скачать новую версию можно тут: https://github.com/evolution-cms/evolution/releases
- Новый оффициальный сайт по адресу https://evo.im но он пока еще в разработке.
- Новая документация будет тут: https://docs.evo.im так же еще в разработке.
- Так же у нас есть чат в телеграмм: https://t.me/evolutioncms и там же канал новостей: https://t.me/evolutioncmsnews