Дмитрий
С нами с 05 ноября 2018; Место в рейтинге пользователей: #363Перезапуск скрипта процессора из админки автоматически
Здравствуйте.
Разрабатываю дополнение по импорту большого кол-ва товаров в минишоп2. Импорт запускается из админки. За импорт отвечает файл процессора synch.class.php.
Столкнулся с проблемой времени выполнения скрипта. Нужно грузить картинки со стороннего сайта, а это по примерным подсчётам на первый импорт всех товаров уйдёт около 2 часа работы. Ясное дело, что php не позволит так долго работать скрипту из браузера. Через консоль сервера запускать скрипт не получится, т.к. клиенту этого не объяснишь.
Думаю может получится как-то организовать автоматический перезапуск скрипта процессора с того места, на котором остановился, через, например, 20-50 товаров, либо через 20 секунд работы скрипта.
В связи с этим вопрос разработчикам дополнений: возможно ли отправлять в админку из процессора такой запрос, который автоматически в админке будет обрабатываться и перезапускать скрипт с нужного места, на котором остановились?
Решение под катом
Разрабатываю дополнение по импорту большого кол-ва товаров в минишоп2. Импорт запускается из админки. За импорт отвечает файл процессора synch.class.php.
Столкнулся с проблемой времени выполнения скрипта. Нужно грузить картинки со стороннего сайта, а это по примерным подсчётам на первый импорт всех товаров уйдёт около 2 часа работы. Ясное дело, что php не позволит так долго работать скрипту из браузера. Через консоль сервера запускать скрипт не получится, т.к. клиенту этого не объяснишь.
Думаю может получится как-то организовать автоматический перезапуск скрипта процессора с того места, на котором остановился, через, например, 20-50 товаров, либо через 20 секунд работы скрипта.
В связи с этим вопрос разработчикам дополнений: возможно ли отправлять в админку из процессора такой запрос, который автоматически в админке будет обрабатываться и перезапускать скрипт с нужного места, на котором остановились?
Решение под катом
Сниппет Declension для склонения слов
Предлагаю вашему вниманию небольшой сниппет для вывода склонения. Работает как фильтр вывода, использовать нужно примерно так:
Как видите, он применяется к любым тегам с числами, а в options нужно указать три формы слова (1 яблоко, 2 яблока и 10 яблок) для русского, или 2 (1 ticket, 2 tickets) для английского.
Для экспериментов можно повызывать сниппет с произвольными числами:
[[+balls]] [[+balls:declension=`балл,балла,баллов`]]
Как видите, он применяется к любым тегам с числами, а в options нужно указать три формы слова (1 яблоко, 2 яблока и 10 яблок) для русского, или 2 (1 ticket, 2 tickets) для английского.
Для экспериментов можно повызывать сниппет с произвольными числами:
15 [[*id:input=`15`:declension=`яблоко,яблока,яблок`]]
Полный код под катом. Полный путь к изображению в pdoMenu
Здравствуйте!
Проблема с дополнительным полем типа «Изображение». В параметрах поля источником файлов указан мною созданный источник «Icons», который ссылается на папку assets/img/ico/. Как мне получить полный путь к файлу из чанка? Сейчас вызов [[+Имя_дополнительного_поля]] выдает просто имя файла.
Проблема с дополнительным полем типа «Изображение». В параметрах поля источником файлов указан мною созданный источник «Icons», который ссылается на папку assets/img/ico/. Как мне получить полный путь к файлу из чанка? Сейчас вызов [[+Имя_дополнительного_поля]] выдает просто имя файла.
Как узнать, какие переменные передаются в плагин
Доброго времени суток. Понадобилось сделать свое определенное действие при активации пользователя на сайте, и вот уже достаточно долгое время пытаюсь понять, как работать с данными которые передаются в плагин. Например узнать id того же пользователя что был активирован. Спасибо.
Перезагрузить страницу при сохр. ресурса в админке
Добрый день!
Подскажите, как можно перезагрузить страницу при сохранении ее в админке, также как это происходит при первом сохранении ресурса.
Т.е. при первом сохранении ресурса MODx перегружает страницу, а при последующих — только лишь отправляет ajax запрос на ее обновление. Вот тут мне и нужно при определенных условиях заставить MODx перезагрузить страницу, так как я в плагине в этот момент изменяю поля ресурса и эти изменения не видны.
Подскажите, как можно перезагрузить страницу при сохранении ее в админке, также как это происходит при первом сохранении ресурса.
Т.е. при первом сохранении ресурса MODx перегружает страницу, а при последующих — только лишь отправляет ajax запрос на ее обновление. Вот тут мне и нужно при определенных условиях заставить MODx перезагрузить страницу, так как я в плагине в этот момент изменяю поля ресурса и эти изменения не видны.
Как не хакать сторонние классы
Бывает, что вы используете какой-то сниппет или компонент, и он немного вас не устраивает. Вам нужно поправить буквально пару строк, но вы понимаете, что при обновлении эти измения пропадут.
Что же делать?
Все просто — нужно расширить сторонний класс своими методами. По сути, это очень похоже на «классные процессоры», только без процессоров и использовать можно везде — это стандартная возможность ООП.
Что же делать?
Все просто — нужно расширить сторонний класс своими методами. По сути, это очень похоже на «классные процессоры», только без процессоров и использовать можно везде — это стандартная возможность ООП.
Процессоры в MODX
В MODX есть файлы-процессоры, это php скрипты, которые выполняют определенные функции. Загляните в /core/model/modx/processors, и вы увидите, как их много.
Работать с процессорами можно из любого сниппета или плагина при помощи метода runProcessor:
Работать с процессорами можно из любого сниппета или плагина при помощи метода runProcessor:
$response = $modx->runProcessor('action/path/to/processor',$arrayOfProperties,$otherOptions);
В ответ мы получаем объект modProcessorResponse, со всеми его методами.