Fi1osof

Fi1osof

С нами с 05 мая 2014; Место в рейтинге пользователей: #4
Fi1osof
14 января 2019, 13:43
+1
Потому что ценность гитхаба больше не в хранилище, а во взаимодействии с другими разработчиками. Я довольно активно там запросы пишу, иногда PR отправляю и ответы на вопросы ищу. И проще это все делать в одном месте.
Fi1osof
14 января 2019, 13:14
0
Можно и вовсе свой сервер развернуть. Но в этом-то и соль, чтобы не плодить сервисы, а получать все в одном месте.
Fi1osof
14 января 2019, 11:55
+2
Замечательная новость!
А то неудобно прыгать с гитхаба на битбакет.
Fi1osof
13 января 2019, 17:35
+1
Судя по всему бага в Jevix здесь. В УРЛы не запрещено вставлять символы @, и здесь ссылка распозналась как почтовая. В исходнике чисто. joxi.ru/Q2KeDqyh4x1Yjr

P.S. Спасибо за бдительность.

P.P.S. зашортил ссылку, сейчас ОК.
Fi1osof
13 января 2019, 13:12
0
Действительно. Что-то подозрительно синхронная регистрация вот этих трех ребят modx.pro/users/6248 modx.pro/users/6249 modx.pro/users/6250 и этих двух modx.pro/users/4334 modx.pro/users/4341.
Либо фейки, либо члены одной команды.
Fi1osof
12 января 2019, 15:18
0
Да, я с тобой тут во всем согласен. В своем тексте я под объектами подразумевал любые передаваемые нескалярные переменные, конкретно в этом случае массив $items. Просто за два года работы с JS я перестал между ними делать особые отличия, потому что в JS массив — это производная от объекта, и по сути тоже объект.
([]) instanceof Object
true
Array instanceof Object
true
Поэтому для себя давно уже опускаю разделение одних на других. В данном случае мне правильней было говорить именно про массивы.
Fi1osof
12 января 2019, 13:50
0
Нет, я говорю именно про ссылки на объекты PHP.
modPlugin расширяет класс modElement. При выполнении там выполняется extract($scriptProperties, EXTR_SKIP); То есть все переданные параметры из общего массива экстрактятся в отдельные переменные. Это и позволяет в плагинах работать с переменными без объявления их, типа как в коде выше с переменной $items, которая нигде не объявлялась.
Но проблема в том, что при экспорте используется параметр EXTR_SKIP. При таком экспорте переменных создаются именно новые сущности, а не просто передается ссылки на существующие переменные. В этом и проблема.
Чтобы было понятней, вот пример:
MODX создал переменную $items=[$item1, $item2] и отправляет в ивент параметром. Ивент нашел 3 плагина и начинает по порядку их выполнять с передачей в них этой переменной.
В первый плагин переменная пришла с двумя элементами. Вы добавляете туда еще элемент $items[] = $item; и у вас тут 3 элемента. ОК, выполняется второй плагин. Как вы думаете, сколько там будет элементов в $items? Если думаете, что 3, то думаете неправильно. Для первого плагина $items — локальная переменная, никак не связанная с исходным элементов $itesm. То есть в первом плагине стало 3 элемента, а во втором (и далее) все те же 2.
Чтобы такого не произошло, надо или добавлять так: $scriptProperties['items'][] = $item; или создать свою связанную переменную $items = & $scriptProperties['items']; и работать уже с ней, как со ссылкой. Вот тогда можно выполнять несколько плагинов.

P.S. если бы они использовали EXTR_REFS вместо EXTR_SKIP, то экспортировались бы сразу ссылки и проблемы не было бы. Я даже где-то писал об этом давно (может даже тикет создавал или PR), но результата не было.
Fi1osof
11 января 2019, 21:29
0
Я не могу сказать наверняка, так как давно уже в админке не лазил, но пара мыслей есть:

1. Вы делаете неправильно. Вот пример: forums.modx.com/thread/87107/adding-icon-to-the-resource-toolbar
Там возвращают через return $this->modx->error->success('',$items);
Посмотрите в эту сторону.
2. Не вижу у вас где именно вы объявляете переменную $items. Полагаю нигде. В этом тоже может быть засада. MODX не всегда корректно использует ссылки на объекты. В результате передается не объект, а его копия, и теряется связь с оригиналом.
Попробуйте вот так: $items = & $scriptProperties['items']; и добавляйте уже в него.

А exit в вашем случае для того, чтобы отдать контент. Плагины просто так контент не отдают, простые print и print_r в них просто записываются в логи MODX и все.
Fi1osof
10 января 2019, 15:12
0
Да я сейчас не про плагин. В 2.7.0 я не работал еще, но как я понял из последних публикаций, появился новый механизм удаления ресурсов в замен старой кнопки. Вот я и говорю, что если и было желание новое сто-то сделать, то надо было старое не удалять. То есть я про ядро, а не сторонние решения.
Fi1osof
10 января 2019, 14:44
0
По-моему, так себе причина. ExtJS там хоть и старый, но и в нем есть инструменты чтобы подписаться на результаты выполнения запросов. Наверняка тот же Ajax.listeners решает. А подход «Я могу сделать лучше, но удалю ка я то, что до этого работало» — не очень круто.

UPD: То есть если два компонента зависят от какого-то состояния, то не надо для них отдельные запросы делать, а сделать один и подписать их оба на него.
Fi1osof
10 января 2019, 14:23
0
А зачем удалять старое, чтобы добавить новое? Нельзя к старому добавить новое? А пользователи решат чем пользоваться.
Fi1osof
09 января 2019, 15:45
+1
Таких странностей полно, когда не знаешь как искать.
Fi1osof
09 января 2019, 14:51
+1
Точно не скажу, но может с этим связано: modxclub.ru/comments/comment-9741.html
Fi1osof
09 января 2019, 14:09
0
Речь об этом?
Перепроверьте у себя в настройках MODX config_cache_maxage, config_cache_maxsize и config_cache_maxfiles. По умолчанию они не нулевые и это создает большую нагрузку при работе phpthumb, потому что тот при записи считает общее кол-во файлов и занимаемое место. Я писал про это здесь.

То есть плагин срабатывает на загруженный файл и пытается сразу сгенерить самбы, а phpthumb пытается посчитать файлы. Установите настройки по нулям и попробуйте опять плагин включить, просто проверить. Вероятно будет работать ОК.
Fi1osof
09 января 2019, 12:55
0
Когда в админке открывается какой-либо файловый менеджер с превью картинок, запросы на эти картинки через вышеупомянутый phpthumb идет на все картинки в списке, а не только на ту, какую вы загружаете. Эти запросы встают в очередь. Потом по мере очереди отваливаются с записью в логи. У вас определенно есть серверные проблемы. 98% хостинг не справляется с нагрузкой.
Fi1osof
09 января 2019, 12:36
0
Говорю, читайте логи. У вас написано
PHP Fatal error: Maximum execution time of 30 seconds exceeded in
То есть запрос не выполняется за 30 секунд и обрываются. В админке MODX запрашивает картинки не напрямую, а через phpthumb. У вас скорее всего большие картинки и хостинг не справляется с их обработкой. Если картинку не получилось пережать, отдается ее оригинал. Вот для вас как бы и работает.
Fi1osof
09 января 2019, 06:03
0
Гадать нет никакого смысла, это может быть все что угодно. Смотрите серверный логи (практически любой хостер дает логи прям в панели управления). Без этого просто никак. Логи наше все.
Fi1osof
08 января 2019, 23:01
+1
Совсем решить ее не получится. Но надо об этом как минимум думать. Я выше описал варианты. В данной ситуации достаточно было компонент собрать правильно через тот же вебпак или галп (гульп/gulp, кому как больше нравится). В зависимостях сослаться на публичные компоненты и оставить только свой код. Было бы меньше что проверять.
Fi1osof
08 января 2019, 22:58
+1
Насколько я знаю, в админке у компонента нет своей страницы и в админку эти скрипты не подключаются. Только на фронтенде при вызове сниппета.
Вот я в этой ситуации вообще не уверен. Объясню. Здесь используется Service Worker. Ты знаешь что это за зверь? Даже я еще с этим на Вы. Вот небольшая выдержка из одной публикации:
Для тех, кто вообще не в курсе о чем речь, то очень вкратце — service worker это скрипт, который выполняется браузером в фоне, отдельно от веб-страницы и способен выполнять функции для которых не требуется взаимодействие со страницей или пользователем.

На практике Service Worker API позволяет делать такую магическую вещь, как кеширование файлов онлайн веб-приложения на локальное устройство пользователя и затем работать полностью в оффлайне, если нужно.

В будущем планируется добавить такие классные вещи как синхронизация кеша в фоне, то есть даже если пользователь не находится сейчас на вашем сайте, сервис-воркер все равно сможет запуститься и скачать обновления например. А также доступ к PushApi из фона опять же (то есть при получении обновления отправить вам пуш-уведомление).

Service worker устанавливается, активируется и начинает в фоне что-то делать. Например “слушать” события ‘fetch’ и при необходимости их изменять или отменять совсем
Звучит интригующе, не правда ли? Хотелось бы, чтобы с фронта шел запрос на какой-нибудь MODX-процессор и запрос «немного изменился в фоне»? Например.

Этот зверь вообще дикий. Вот смотри какой ответ от сервера приходит:


То есть документ (обрати внимание, не JS, не CSS, а именно HTML-документ) взят даже не из кеша, а из какого-то там ServiceWorker.

А вот смотри как одна и да же страница в исходниках выглядит в обычной вкладке и приватной (в приватной просто воркер еще не зарегистрирован).


И это даже на тех страницах, на которые я ранее не заходил.

Как тебе такая магия? Уверен, что хочешь себе на страничке что-то подобное регистрировать?