Андрей Шевяков
С нами с 28 сентября 2016; Место в рейтинге пользователей: #45resComments — многоуровневые комментарии с пагинацией для ресурсов MODX3
Всем привет!
Представляю вниманию компонент для реализации комментариев/отзывов и т. д. к любым ресурсам MODX3.
Отличие от ticketsComments — возможность пагинации. Отличие от easyComm — многоуровневость.
Представляю вниманию компонент для реализации комментариев/отзывов и т. д. к любым ресурсам MODX3.
Отличие от ticketsComments — возможность пагинации. Отличие от easyComm — многоуровневость.
Основные свойства
- Неограниченная вложенность
- Несколько вызовов на странице
- Оценка публикации / ресурса
- Оценки и рейтинг ответов
- WYSIWYG-редактор Pell
- Разметка Schema.org
- Аватары пользователей с поддержкой Gravatar
- Возможность удаления собственных комментариев
- Email-уведомления менеджеру сайта, автору публикации, автору комментария об ответах
- Пагинация (с pdoPage)
- Работает без jQuery (за исключением связки с pdoPage)
- Настраиваемые всплывающие уведомления (Notyf из коробки, по остальным см. системные настройки)
- Приложение в админке с поиском, фильтрацией и возможностью создания / удаления / редактирования (включая ответы разных уровней)
- Вкладка «Комментарии» у ресурсов с указанными шаблонами
- Вкладка «Комментарии» у ресурсов с указанными ID
- Системные события перед созданием комментария и после.
msVK (уведомление о новом заказе в ВК для minishop, готовое решение)
В связи с тем, что идет не хорошая тенденция с отключением мессенджеров, я решил переходить на отечественные решения, а именно в ВК.
На просторах интернета я натыкался на плагин, который делает уведомление в ТГ, имя этому дополнению msTelegram, спасибо большое человеку за его творение.
На его базе сделал свое, но для ВК, поэтому оставлю это здесь больше для себя, но да и вдруг кому будет полезно.
На просторах интернета я натыкался на плагин, который делает уведомление в ТГ, имя этому дополнению msTelegram, спасибо большое человеку за его творение.
На его базе сделал свое, но для ВК, поэтому оставлю это здесь больше для себя, но да и вдруг кому будет полезно.
PdoPage без jQuery
Давно делал костылями пагинацию без jQuery
недавно дошли руки поковырять PdoPage
Скажу сразу в скрипте могут быть баги
У меня с ресурсами работает отлично
недавно дошли руки поковырять PdoPage
Скажу сразу в скрипте могут быть баги
У меня с ресурсами работает отлично
MODX HTML Cache Plugin
Плагин для MODX, который сохраняет сгенерированные страницы в HTML-файлы и отдает их напрямую без парсинга MODX.
Это позволяет значительно ускорить работу сайта на фронтенде.
ЗЫ: Делался плагин в основном для статики и лендингов!!! (Если в шаблоне есть динамические данные (например, корзина, личный кабинет), лучше исключить его из кэширования.)
Файлы сохраняются в директории:
Это позволяет значительно ускорить работу сайта на фронтенде.
ЗЫ: Делался плагин в основном для статики и лендингов!!! (Если в шаблоне есть динамические данные (например, корзина, личный кабинет), лучше исключить его из кэширования.)
Файлы сохраняются в директории:
core/cache/html_pages/{template_id}/Имя файла формируется так: {resource_id}_{md5(uri)}.html Compare - сравнение товаров miniShop2
Привет!
UPD 09.02.2026: для MODX 3 и MiniShop3 выпущена платная обновленная версия дополнения: Compare. У платной версии для miniShop3 больше возможностей, есть техническая поддержка и выпуск новых версий с улучшениями. Бесплатная версия для miniShop2 выложена как есть и развиваться, я думаю, дальше не будет.
Весь текст ниже относится к связке MODX 2 + miniShop2.
Сегодня выложил в github свою наработку с одного из сайтов — дополнение под названием Compare, которое умеет сравнивать товары.

UPD 09.02.2026: для MODX 3 и MiniShop3 выпущена платная обновленная версия дополнения: Compare. У платной версии для miniShop3 больше возможностей, есть техническая поддержка и выпуск новых версий с улучшениями. Бесплатная версия для miniShop2 выложена как есть и развиваться, я думаю, дальше не будет.
Весь текст ниже относится к связке MODX 2 + miniShop2.
Сегодня выложил в github свою наработку с одного из сайтов — дополнение под названием Compare, которое умеет сравнивать товары.

[MIGX] Исправляем "сжатые" таблицы
eCommSender - отправка данных электронной коммерции
Приветствую! Представляю вашему вниманию компонент для отправки событий электронной коммерции в Яндекс Метрику и не только.
Авто обновление индекса mSeach2 через cron
Может кому пригодится крон для массового обновления индексов #msearch2 #cron
Инструкция:
— создаем фай в корне msearch2_cron.php содержимое кода ниже.
— запуск к примеру curl www.ru/msearch2_cron.php
Инструкция:
— создаем фай в корне msearch2_cron.php содержимое кода ниже.
— запуск к примеру curl www.ru/msearch2_cron.php
<?php
// Отключение буферизации
ignore_user_abort(true);
set_time_limit(0);
ob_implicit_flush(true);
ob_end_flush();
header('Content-Type: text/html; charset=utf-8');
echo '<pre>';
ob_flush();
flush();
define('MODX_API_MODE', true);
require 'index.php';
/** @var modX $modx */
$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_FATAL);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
/** @var modUser $adminObj */
$adminObj = $modx->getObject('modUser', ['sudo' => 1]);
$modx->user = $adminObj;
$offset = 0;
while (true) {
/** @var modProcessorResponse $response */
$response = $modx->runProcessor('mgr/index/create', [
'limit' => 1000,
'offset' => $offset,
], [
'processors_path' => MODX_CORE_PATH . 'components/msearch2/processors/'
]);
if ($response->isError()) {
echo "Ошибка: " . $response->getMessage() . "\n";
ob_flush();
flush();
break;
}
$data = $response->getObject();
if ($data['offset'] >= 1) {
echo "Индексировано: {$data['offset']}\n";
ob_flush();
flush();
}
// Если offset == 0 → завершаем
if ($data['offset'] === 0) {
echo "Получен нулевой сдвиг. Индексация остановлена.\n";
ob_flush();
flush();
break;
}
// Обновляем offset для следующего шага
$offset = $data['offset'];
// Если достигли конца
if ($offset == 0) {
echo "Индексация успешно завершена.\n";
ob_flush();
flush();
break;
}
//sleep(1); // пауза между порциями (можно убрать)
} [Внимание] SQL-инъекция через miniShop2 (msPayment) в MODX — разбор и поиск причины
Хочу поделиться реальным кейсом: вчера на два сайта обнаружилась массовая SQL-инъекция через компонент miniShop2, которая загружала MySQL и выводила из строя сайт (я бы сказал нагружает сервер под 100%).
Версия minishop2 (2.8.3)
Что происходило
Началась высокая нагрузка на MySQL: десятки зависших SELECT COUNT(DISTINCT msPayment.id) с вложенными INFORMATION_SCHEMA, ORD(MID(...)), CAST(...), XOR() — т.е. типичный blind SQL injection.
Все вредоносные запросы шли от пользователя, к базе.
Сайт работал через miniShop2, и инъекции шли через msPayment и msDeliveryMember в JOIN-запросах.
Пример вредоносного запроса:
Версия minishop2 (2.8.3)
Что происходило
Началась высокая нагрузка на MySQL: десятки зависших SELECT COUNT(DISTINCT msPayment.id) с вложенными INFORMATION_SCHEMA, ORD(MID(...)), CAST(...), XOR() — т.е. типичный blind SQL injection.
Все вредоносные запросы шли от пользователя, к базе.
Сайт работал через miniShop2, и инъекции шли через msPayment и msDeliveryMember в JOIN-запросах.
Пример вредоносного запроса:
SELECT COUNT(DISTINCT msPayment.id)
FROM modx_ms2_payments AS msPayment
JOIN modx_ms2_delivery_payments Member ON Member.payment_id = msPayment.id AND 7574=IF((SESSION_USER() LIKE USER()), (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS A, INFORMATION_SCHEMA.COLUMNS B, INFORMATION_SCHEMA.COLUMNS C WHERE 0 XOR 1), 7574)
WHERE msPayment.id = 1 AND msPayment.active = 1 Пакет СДЭК — услуги курьерской службы для Minishop2
В MiniShop2 долгое время отсутствовал подходящий модуль для интеграции с СДЭК. После многочисленных запросов от клиентов было принято решение доработать существующий модуль. Поскольку времени на создание с нуля не было, за основу взял текущий вариант и переписал его, добавив необходимые функции.
В результате: виджет стал на 90% локальным, что положительно сказалось на скорости загрузки. Добавлена возможность отправки трек-кода клиенту напрямую из заказа, а также отправки самого заказа в СДЭК.
Реализованы новые хотелки:
В результате: виджет стал на 90% локальным, что положительно сказалось на скорости загрузки. Добавлена возможность отправки трек-кода клиенту напрямую из заказа, а также отправки самого заказа в СДЭК.
Реализованы новые хотелки:
- Добавлена возможность интеграции с сервисом dadata.ru.
- Добавлен фиксированный тариф для ПВЗ и доставки до двери.
- Добавлена страховка к тарифу ПВЗ.
- Обновлены иконки ПВЗ на Яндекс.Карте.
- Кнопки выбора ПВЗ теперь наглядно отображают выбранный пункт выдачи.
- На Яндекс.Карте показывает выбранный ВПЗ другим цветом (скрин прилагаю)
- Отправка заказа в СДЭК
- Обмен статусами доставки СДЭК => Minishop2
