MODX.Evo.Custom 1.2.1-d9.1.7 (21.06.2017)

Свежий релиз моей сборки порадует большим, даже очень большим количеством вкусняшек. Но что б их увидеть нужно выбрать в настройках новую тему MODxRE_DropDownMenu, эта тема будет базовой в Evolution CMS 1.3 выход которой уже не за горами. Осталось решить пару задач:
— Дописать очень вкусный и полезный функционал для админки
— определиться с новым логотипом, пока зашли с этим в небольшой тупик, поэтому если кто желает может помочь. В целом думаю будет вариант №3 но его нужно допилить ибо куча косяков с точки зрения правильности в нем присутствует modx.im/blog/questions/5250.html

Пару скриншотов чего же там полезного:
Скорость загрузки админки увеличилась в 4 раза
Скорость загрузки увеличилась в 4 раза по сравнению с темой MODxRE. Так же убрали задержку при сохранении документов, это зачем то использовалось раньше так как по другому дерево не обновлялось но теперь это все переписали по уму и того нет таймаута в 1 секунду а так же минус 1 ненужная переадресация. Я думаю все по достоинству теперь оценят скорость работы :) Хотя и раньше у ЕВО не было проблем со скоростью работы админки:) но теперь она стала еще на порядок быстрее.


Теперь при обновлении странички не перекидывает на главную, да и можно поделиться ссылкой сразу на документ или любую другую страничку в админке.

Темный режим
У новой темы есть Dark mode — изменяем вид админки на лету.

Контекстное меню для елементов в CodeMirror
Очень сильно упрощает работу в админке не нужно теперь искать к примеру чанк просто кликаем на него и сразу переходим в него в новом окне, ну или создаем его если его нет, вот тут можно глянуть видео как это работает modx.im/blog/docs/5258.html

3 Уровень в меню
Все элементы доступны через меню так же там же сразу можно и создать новый елемент, упрощает навигацию + как по мне удобней чем плагин ElementsTree который делает вид дерева как в REVO. Элементы отсортированы по Алфавиту.

Drag&Drop документов в Дереве, помойму вот тут в видео можно глянуть: modx.im/blog/dmi3yy/5254.html

Переписал еще раз Dashboard, хотя он теперь статичный но зато можно настроить как нужно для разных пользователей + не нужно теперь в плагин вставлять разметку его, что дает возможность написать 1 раз плагин и даже если поменяется разметка в дашбоарде, виджет уже не пострадает и будет на разных версиях отображаться коректно. Так же можно легко отключать базовые виджеты если они не нужны. Логика плагина такая же как у плагина для изменения Верхнего меню или для изменения пунктов в дереве документов.

$e = &$modx->Event;
switch($e->name){
        case 'OnManagerWelcomeHome':
				//if($_SESSION['mgrRole']!=='2') return;

                                //unset($widgets['welcome']);
				//unset($widgets['onlineinfo']);
				//unset($widgets['recentinfo']);
				//unset($widgets['news']);
				//unset($widgets['security']);
				
				$widgets['test'] = array(
					'menuindex' =>'1',
					'id' => 'test',
					'cols' => 'col-sm-6',
					'icon' => 'fa-rss',
					'title' => 'test',
					'body' => '<div style="max-height:200px;overflow-y: scroll;">[+modx_news_content+]</div>'
				);
                $e->output(serialize($widgets));
        break;
}


Так же исправили косяк с фоном PNG в KCFinder ну и поправили отваливание ТВ привязанных к шаблону.

Список изменений:
- refactor MODxRE_dropdownmenu theme.  x4 faster works (http://take.ms/Wwgbq)
- refactor wait.static - now save documents, setting faster more then 1sec (only in new theme)
- remember url for work in manager now with reload not redirect to welcom page (only in new theme)
- Dark mode for new theme, swith by button in tree  (http://take.ms/99K0D)
- new Dashboard, now all change with plugin, and no more style in code inside plugin (https://gist.github.com/dmi3yy/d065729c3c37eb3f17eab247ae1dd10d) (only in new theme)
- delete alterTitle (Preparations for merging into Evolution CMS)
- delete .htaccess (autocreate if not, when save settings) (Preparations for merging into Evolution CMS)
- rename robots.txt to sample_robots.txt (Preparations for merging into Evolution CMS)
- rename some fields into ENG (Preparations for merging into Evolution CMS)
- contextMenu for elements in Codemirror (http://take.ms/opW8t) (only in new theme)
- Drag&Drop documents in Tree (only in new theme)
- fix for normal work: [*placeholder[(system_variabnle)]*]
- DropDown 3 Level in Top menu (http://take.ms/Dm9qZ)
- [F] fix save assignedTv in Template
- KcFinder. png background fix
- Update TinyMce to 4.6.3
- phpthumb: fix default quality of image to 85 for best in googlepagespeed
- update Doclister (редирект с doc.html?page=1 на doc.html)


Большое вернее очень большое спасибо и респект за проделанную работу 64j Так как мы с ним вместе это все пилили, и боюсь без него не получилось бы все на столько круто.

Скачать как всегда можно тут:
modx.com.ua
github.com/dmi3yy/modx.evo.custom/releases/

p.s. Если после обновления у вас дерево занимает весь экран то необходимо почистить куки браузера

85 комментариев

avatar
Скоро будет еще быстрее работать как со всех страничек выпилим лишние скрипты.
Но главную уже практически не куда ускорять:
avatar
Если после обновления у вас дерево занимает весь экран то необходимо почистить куки браузера
avatar
64j просто монстр! Спасибо ему огромное!

Ну и тебе, Дмитрий, естественно.
avatar
P.S. Дмитрий, когда будешь сливать сборки, постарайся, чтобы в общую сборку из офверсии не перекочевал этот, как его… lock plugin ну и так далее (то что ты в 9.1.6 уже закомментил) :)
Комментарий отредактирован 2017-06-18 09:30:15 пользователем Aharito
avatar
ElemetsTree? Да он не нужен с новым меню по логике:)
avatar
Не-не, про ElementsInTree понятно сразу.
А я имел в виду чтобы вот это в раскомментированном виде не перешло из оф сборки. Или там тоже уже закомментили?
avatar
там тоже уже закоментил так и не понял нахрен оно :)
avatar
сюда прошу обратить внимание на новой сборке:
http://modx.im/blog/questions/5151.html
файл protect.inc.php
// Unregister globals
if (@ ini_get('register_globals')) {
    die('Please disable register_globals!');
}

эта штука не дает запускать скрипты через API по крону на некоторых хостингах
avatar
Уж что-что, а это точно нужно оставить.
avatar
дело в том что на некоторых хостингах данная функция отдает не FALSE а 'off', что интерпретируется как TRUE.
я не написал что надо вырезать, но надо заставить корректно работать.
у меня проблема возникла на сервере с php7 где вообще нет register_globals, однако die('Please disable register_globals!'); упорно вылазит!
avatar
avatar
принял пул )
avatar
Есть еще фокус чтобы не подключать свои внесистемные php-файлы. Большинство задач можно решить через кастомные event-ы, как в уроке про Ajax modx.im/blog/triks/2096.html. Такая вот вещь в себе получается. Ничего не мешает же нам через cron + curl обращаться.
avatar
yadi.sk/d/CbENHS2x3KExEA
TV type date — выбор даты проваливается за экран, возможности прокрутить нет
avatar
yadi.sk/d/whmSiYeP3KExLW
$settings['fields'] = array(
   'date' => array(
        'caption' => 'Дата',
        'type' => 'unixtime'
    ),
...

type date в multiTV не показывает календарик с выбором даты, и сам инпут немного не совпадает по стилю
avatar
Дмитрий знает о проблеме с календарем, да и собственно стилями. Никто multitv ещё не правил, надеюсь скоро будет :)))
avatar
При входе в панель управления уходит в бесконечную загрузку. Идут GET запросы на /manager/includes/session_keepalive.php?tok=5f7883. Подскажите в чем может быть причина?
avatar
поправили уже
avatar
Здравствуйте. Только что поставил эту версию и ошибка эта присутствует.
Где вы её поправили, как исправить это самому или где скачать фикс?
avatar
Скачайте по вот этой ссылке
github.com/dmi3yy/modx.evo.custom/archive/master.zip
avatar
Не помогло, та же проблема.
avatar
А кешь браузера чистили? а то там же через js проблема
avatar
Да точно, спасибо, забыл про кешь, заработало.
Спасибо.
avatar
Спасибо Дмитрий!
avatar
yadi.sk/d/IOMemrOa3KF5KN
при создании пользователя немного уезжают поля ввода
avatar
+1, есть такая проблема

prntscr.com/flftz8
avatar
После обновления на 1.9.6 вылезла такая проблема: у меня есть на сайте контент со вставленными кусками кода, где присутствуют строки вида:
option option_name 'value'

При попытке отредактировать такие ресурсы получаю ошибку вроде этой:
« MODX Parse Error »
Execution of a query to the database failed — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'global'
option anon_swap '0'
option anon_mount '0'
option auto' at line 1
Видимо, кавычки как-то неправильно обрабатываются?
Комментарий отредактирован 2017-06-20 22:28:49 пользователем OSBoy
avatar
Отдельным топиком не делал просто обновил этот
новая версия 1.2.1-d9.1.7 — работа над ошибками 9.1.6
— Add search in 3 level menu (http://take.ms/nQaUK)
— remove mutools from login page.
— fix for iOS (now normail work)
— fix some nitices for php 7.2
— fix errors founded in 1.2.1-d9.1.7(bugs in Firefox, bugs with size tree, bug with keepalive and more)
avatar
Несмотря на поставленную галочку, папка install не удаляется.

OpenServer на Win7
avatar
Заметил еще такую штуку — в новом dropdown меню не появляютя свежесозданные чанки/шаблоны и т.д
avatar
Это было в версии 9.1.6. Исправили там теперь обновление по ховеру на меню
avatar
Раз выпиливаем mootools из ветки предлагаю обратить внимания на datepicker, на данный момент их вроде как 3 (в папке media/calendar, media/style/common/moo-datepicker и media/script/air-datepicker) первые 2 это один и тот же скрипт с небольшими изменениями, последний по моему мнению более функциональный и симпатичный, но почему-то переопределен в style.php в папке с темой.
avatar
Ага как раз решили заменить на простой и легкий а то их реально 3 и помойму в multiTV 4 тый )
avatar
Пара вещей которые пока не удалось победить
1. в хроме не работает меню. В консоле
Failed to execute 'setItem' on 'Storage': Setting the value of 'MODX_lastPositionSideBar' exceeded the quota. Что поправить? в фоксе работает.
2. При редактировании чанка/шаблона/модуля появляется сообщение с текстом «History could not be written. Error: QuotaExceededError: Failed to set the 'history_bb00952e24f4b3e0459c1b7f07d27d6d' property on 'Storage': Setting the value of 'history_bb00952e24f4b3e0459c1b7f07d27d6d' exceeded the quota.» тоже в хроме. в фоксе работает.
avatar
Я далёк от происходящего, но знаю точно что хром лучше кеширует у себя файлы.
Вы точно сбили кеш? Я сбиваю для 100% открывая DevTool (F12) а потом левой кн. мышки зажимая кнопку обновить, и там третий вариант выбираю —
Не гарантирую что поможет, но гарантирую что вопросов про кеш уже не будет))
______
p.s. если установка была чистая, то странно, по скринам и скринкастам Дмитрий чаще пользуется Сафари, а он намного ближе к Хрому, чем к Лису.
Комментарий отредактирован 2017-06-21 17:58:32 пользователем jeka
avatar
Установка чистая. Кеш пытался чистить, в тч описанным Вами способом, да и смысла чистить не много…
avatar
У вас место на диске закончилось :)
avatar
На локальном — нет
на хосте тоже есть место
avatar
А тьфу нето гляну место в локалстораже закончилось
это в браузере попробуйте с другого зайти
avatar
На скрине просто плохо видно )
avatar
Вы правы, достаточно перейти по chrome://settings/cookies#cont и очистить локальное хранилище.
Однако при этом разлогиниваются все аккаунты. Менюшка, кстати тоже заработала. Спасибо :)
Комментарий отредактирован 2017-06-21 20:06:35 пользователем sperevoznuk
avatar
Секции, свёрнутые при помощи mm_minimizablesections в ManagerManager, в 9.1.5 выглядели хорошо: take.ms/W8oxz

Теперь в 9.1.7 выглядят так: take.ms/ylfOT

Ну и вообще, читабельность информации при заполнении значений ТВ серьезно ухудшилась. Заголовки секций никак не выделяются на фоне ТВ, а split вместо «точечного» стал сплошной линией, и «давит» на визуальное восприятие.

Предлагаю сделать хотя бы так:
1) Выделить заголовки секций.
Для этого строку 206 поменять на
.sectionHeader { padding: 7px 10px; background: #FAFAFA; } /* FIX */
.dark .sectionHeader { background: #FFF; } /* FIX */

2) Сплошной сплит поменять на dotted
Для этого строку 68 поменять на
.split { height: 0; font-size: 0; clear: both; padding: 0; border-bottom: 1px dotted #bbb; }

и строку 722 убрать или поменять цвет на другой.

Тогда станет так на светлом: take.ms/WX8i1
И так на темном: take.ms/tw1at

Уже что-то.
avatar
Записываю сюда, чтобы не забыть.

9.1.7 при попытке сохранения документа с шаблоном blank ведет себя странно — сначала всё сохраняется, при втором нажатии Сохранить выдает ошибку:
Error : Invalid argument supplied for foreach()
Warning: Invalid argument supplied for foreach() in C:\OpenServer\domains\...\manager\includes\document.parser.class.inc.php(1364) : eval()'d code on line 27

Уровень обнаружения ошибок — Игнорировать предупреждения о незначительных ошибках.

9.1.5 при том же уровне обнаружения ничего не выдает.

Поставил на 9.1.7 «Игнорировать все ошибки», стало работать. Но ведь это не гуд, «Игнорировать все ошибки».
avatar
аналогично в mamagermanager, при if в mm_rules — ошибки валятся в error.log
avatar
Комментарий отредактирован 2017-06-22 22:13:37 пользователем OSBoy
avatar
Подставил костыль:
В save_content.processor.php заменил 512 строку:
. "content='{$content}', "

на:
. "content='{$modx->db->escape($content)}', "

Заработало, вроде бы, как надо. Но почему Не хотели экранироваться одиночные кавычки именно в поле контента, я так и не понял!
avatar
После обновления у себя вижу 2 сранности:
1)Использую firefox последний, и если пользуюсь кнопкой «На предыдущую страницу», то пропадает верхнее меню. Лечится обновление страницы.


2)Модуль TvTable не подхватывает иконки Добавить/Удалить. Невидимые кнопки
Комментарий отредактирован 2017-06-23 08:20:49 пользователем murashkin
avatar
yadi.sk/d/x5lDCw6E3KPAyz
пропадает верхнее меню при очистке корзины
лечится через принудительное обновление страницы [ctrl]+[f5]
avatar
yadi.sk/d/kn5OjGq03KPBep
двойная полоса прокрутки справа
avatar
спасибо за минус, было бы еще хорошо аргументировать его.
браузер firefox, специально проверил на сайте где нет плагинов дополняющих приветственную заставку
avatar
yadi.sk/d/6t7W4eXL3KS7a4
для элемента c id #main жестко задан стиль overflow:scroll (всегда показывать полосы прокрутки) от этого и появляется горизонтальный скролл и двойной вертикальный скролл, скорее всего поможет замена значения параметра overflow на auto.
avatar
С simple gallery вообще засада :(


Комментарий отредактирован 2017-06-24 14:01:35 пользователем gumoviy
avatar
Такая же фигня, похоже. Но если переключиться на другую вкладку, а потом опять на вкладку Симпл галери, то интерфейс «растормаживается»
avatar
Я ставил на 9.1.7 и ничего такого не наблюдал. Может нужно очистить кэш браузера.
avatar
Чистка кэша браузера и удаление куки не помогало. Но спустя некоторое время всё заработало как следует. Подозреваю, что дело может быть в Клаудфлэир (не смотря на то, что включал Девелопмент мод).
avatar
можно решить добавлением небольшого таймаута на «автоклик» этой вкладки в шаблоне вывода sg.
вот эту строку надо заменить на

setTimeout(function() {
    $('#sg-tab.selected')[0].click();  
}, 500);
avatar
При сохранении после любого действия в конфигурации, «пожалуйста, подождите»
( monosnap.com/file/Ie3y7HUHka0e3Mgge2KTH7IrBdBBv5 ) зависает навечно.

Ещё при редактировании multiTV кнопки «добавить» и «удалить» пересекаются. take.ms/bytTN
avatar
Первая проблема ушла сама собой (по неизвестной причине, предполагаю, что когда в Клаудфлэир всё перекэшировалось).
avatar
надеюсь все понимают, что все дыры этой темы админки доступны любому с правом доступа обычного юзера?
Поясню: имея логин и пароль обычного юзера, сайт можно превратить в что угодно.,. например изменить сниппеты, чанки, а ещё проще в выписках счетов поменять банковские реквизиты…

поэтому я был всегда против иных тем, кроме дефолтной, где всё учтено.
А если рыть, то можно нарыть дохуа-хуа и больше в этой теме, а если учесть, что ещё и ядро под неё меняют… МАТЬ МОЯ ЖЕНЩИНА ОТЕЦ МОЙ МУЖЧИНА СОБАКА МОЁ ЖИВОТНОЕ!

ВАМ ЧТО, ПРИНЦИПИАЛЬНО ОБЫЧНАЯ ТЕМА (проверенная и работающая ГОДАМИ!) МЕШАЕТ? Я понимаю такой вопрос в конце 90х, когда У БРАУЗЕРОВ ВКЛАДОК НЕ БЫЛО, но сейчас-то!
Комментарий отредактирован 2017-06-27 12:53:56 пользователем zabudkin
avatar
Какие дыры? вы о чем?
Имея доступ в админку само собой можно все менять если не разделили права доступа
avatar
С дубу упал?
avatar
Добрый вечер!
Обновился с 9.1.5
Пытаюсь сохранить чанк, но ничего не происходит.

В консоли ошибка onclick — index.php:279 TypeError: undefined is not an object (evaluating 'document.mutate.save.click')
avatar
отбой тревоги. Переустановка TinyMCE все вернула на свои места.
avatar
Так как же все-таки правильно обновить версию, чтоб без проблем?) С какой-нибудь недавней 1.2.1-d9.1.2 — 1.2.1-d9.1.4 на 1.2.1-d9.1.7 (ладно уж про 0.9 или 1.0.6 вспоминать не будем)))) Нигде в уроках/доках/обсуждениях конкретного пошагового мануала найти не удалось.
avatar
Добрый вечер. На Опере последней, при сохранении ресурсов, удалении ресурсов, открытии чанков, сворачивается дерево ресурсов, приходится заново открывать. И так при каждой процедуре.
avatar
С недавних пор, после обновлений, не работает плагин TreeTabs ни с одним шаблоном админки. А ведь он даже в сборку входил! У меня большое дерево и деление на закладки было очень удобным. Что теперь делать, подскажите, плиз?
avatar
В сборку в базу он не входил никогда
по логике его надо починить там ошибка с jquery
avatar
Дмитрий, со слов автора (о вхождении в сборку):
«Плагин добавления закладок к дереву документов. Доступен в сборке Dmi3yy»
modx.im/blog/addons/178.html

Удобный плагин! Пользуюсь им во всех проектах.
avatar
Добрый день, обновил все сайты, до новой текущей версии, перестали работать в чанках PHx при этом, я не из дито запускаю а вот так.

{{PHx_uslovie}}

Внутри чанка

[*id:is=`1`:then=`Главная`:else=`Не главная`*]

Если просто в ставить в шаблон это условие, оно работает, а вот вызвать чанк с условием в шаблоне, ничего не выдает!
avatar
обновите phx
avatar
Обновлял, удалял ставил по новой, ни какого результата!
avatar
Вот что в свойствах

{
  "phxdebug": [
    {
      "label": "Log events",
      "type": "int",
      "value": "0",
      "default": "0",
      "desc": ""
    }
  ],
  "phxmaxpass": [
    {
      "label": "Max. Passes",
      "type": "int",
      "value": "50",
      "default": "50",
      "desc": ""
    }
  ],
  "{\n  \"phxdebug\": [\n    {\n      \"label\": \"Log events\",\n      \"type\": \"int\",\n      \"value\": \"1\",\n      \"default\": \"0\",\n      \"desc\": \"\"\n    }\n  ],\n  \"phxmaxpass\": [\n    {\n      \"label\": \"Max. Passes\",\n      \"type\": \"int\",\n      \"value\": \"50\",\n      \"default\": \"50\",\n      \"desc\": \"\"\n    }\n  ]\n}": [
    {
      "label": "undefined",
      "value": "",
      "default": "undefined",
      "desc": ""
    }
  ]
}
avatar
настройки кривые, вот плагин и не работает.
удалите лишнее, чтобы получилось


{
  "phxdebug": [
    {
      "label": "Log events",
      "type": "int",
      "value": "0",
      "default": "0",
      "desc": ""
    }
  ],
  "phxmaxpass": [
    {
      "label": "Max. Passes",
      "type": "int",
      "value": "50",
      "default": "50",
      "desc": ""
    }
  ]
}


так же посмотрите в плагины codeMirror и tinyMCE4
avatar
Вариантов решения нету? Оо Скажите что делать тогда :-(
avatar
проще всего просто переписать на сниппет if

[[if? &is=`[*id*]:=:1` &then=`Главная` &else=`Не главная`]]
avatar
Да много таких мелких, что бы переделывать, думал решить как то, ну ладно, буду переделывать!
avatar
Щас обновил другой сайт, на другом серваке, та же проблема!
avatar
Исправил проблему когда отрабатывался только 1 плагин первый на события:
OnManagerNodePrerender
OnManagerMenuPrerender
OnManagerWelcomeHome
avatar
Так, а откуда можно скачать решение проблемы?
avatar
hoshost, при предыдущем обновлении я тоже писал про плагин TreeTabs. Тоже им пользуюсь, вернее, раньше пользовался (до обновлений) постоянно. Классная вещь, при большом объеме страниц просто незаменима. Дмитрий, а что там с jquery? Долго разбираться?
avatar
TreeTabs плагин многими использовался. Жалко разработчик его давно не появляется здесь.
avatar
Я им не пользую потому и не правлю если нужно могу поправить но баксов за 30
avatar
Можно, наверное, сделать при помощи плагина, который был описан по изменению дерева в топике к версии 9.1.15. Дмитрий, а нет возможности расширено получить информацию по настройке меню и дерева (значения ph и т.п.)? Что откуда брать?
avatar
Проще всего на событие это повесить функцию modx->logEvent
и передать туда

$modx->logEvent(123, 1, '<pre>'.print_r($ph,true).'</pre>', 'параметры документов в дереве');

таким образом в логе MODX получим лог всех параметров :)

А по меню вот тут можно глянуть:

$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;
}
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.