Всего 125 701 комментарий

Николай Савин
4 часа назад
+1
Немного нетипичный пост на этом форуме. Будем считать это экспериментом. Кратко вводную информацию я выложил у нас в телеграм-сообществе — получил много положительных реакций. Подумал, почему бы не добавить и сюда. В отличии от поста в телеге — я прошерстил большую часть блога и выбрал интересные рекомендации, краткие обобщенные выводы. Возможно кому-то будет полезно хотя бы знать о существовании такого ресурса.
Иван Бочкарев
7 часов назад
0
Один компонент — одно решение конкретной задачи.
Иван Бочкарев
Вчера в 13:01
0
Не за что! Благое дело делаем.
Артур Шевченко
03 марта 2026, 22:25
+1
Он тоже молодец. Он ещё и развитие ядра решил расшевелить, откуда только столько энтузиазма)))
Николай Савин
03 марта 2026, 22:23
+1
Да в этом месяце больше Ваня старался, львиная доля работы — его заслуга.
Артур Шевченко
03 марта 2026, 22:23
0
Ты решил на каждую акцию отдельный компонент делать?)))
Артур Шевченко
03 марта 2026, 22:20
+1
Приятно, что я вдохновил тебя использовать data-атрибуты вместо классов)))

А если серьезно, ты молодец! И твоя продуктивность восхищает!
Иван Бочкарев
03 марта 2026, 11:59
0
Так как уже выложил — оставлю так, далее будем сокращать названия.
Иван Бочкарев
03 марта 2026, 11:50
0
Я старался, но можно сделать сокращенно ms3FTBDiscount.

Что будет, когда выпущу ms3BOGOGenerator =) — BOGO-акции для MiniShop3.

Применяет акции «Купи N — получи M»: правила задаются в системной настройке (JSON), скидка учитывается в стоимости корзины через события msOnBeforeGetCartCost и msOnGetCartCost.
Николай Савин
03 марта 2026, 11:38
0
Ох и названия у тебя — прям одно длинее другого
SYAN
03 марта 2026, 09:49
+2
А теперь все эту красоту оформляем в виде сниппета. Параметры по-умолчанию редактируем в самом сниппете
elements/snippets/bgImage.php
<?php
/**
 * Сниппет bgImage — обработка изображений через phpThumbOn
 *
 * Параметры:
 * - image (обязательный) — путь к исходному изображению
 * - width (опционально) — ширина итогового изображения (по умолчанию 600)
 * - height (опционально) — высота итогового изображения (по умолчанию 300)
 * - quality (опционально) — качество сжатия (по умолчанию 100)
 * - blur_strength (опционально) — сила размытия для фона (по умолчанию 9)
 * - brightness (опционально) — яркость для фона (по умолчанию 15)
 * - watermark_opacity (опционально) — прозрачность водяного знака (по умолчанию 100)
 */

// Получаем параметры
$image = $modx->getOption('image', $scriptProperties, '');
$width = $modx->getOption('width', $scriptProperties, 600);
$height = $modx->getOption('height', $scriptProperties, 300);
$quality = $modx->getOption('quality', $scriptProperties, 100);
$blur = $modx->getOption('blur_strength', $scriptProperties, 9);
$brightness = $modx->getOption('brightness', $scriptProperties, 15);
$watermarkOpacity = $modx->getOption('watermark_opacity', $scriptProperties, 100);

// Проверяем, что изображение передано
if (empty($image)) {
    $modx->log(modX::LOG_LEVEL_ERROR, 'ProcessImage: не передан параметр image');
    return '';
}

// Шаг 1. Уменьшение основного изображения без обрезки
$mainImageParams = "w={$width}&h={$height}&zc=0&q={$quality}&aoe=1";
$processedImage = $modx->runSnippet('phpthumbon', [
    'input' => $image,
    'options' => $mainImageParams
]);

// Шаг 2. Создание фонового изображения с размытием и яркостью
// Применяем 9 фильтров размытия для усиления эффекта
$blurFilters = '';
for ($i = 0; $i < 9; $i++) {
    $blurFilters .= "fltr[]=blur|{$blurStrength}&";
}
$bgImageParams = "w={$width}&h={$height}&zc=1&{$blurFilters}fltr[]=brit|{$brightness}";
$bgImage = $modx->runSnippet('phpthumbon', [
    'input' => $image,
    'options' => $bgImageParams
]);

// Шаг 3. Создание водяного знака из основного изображения
// Используем обработанное основное изображение как водяной знак
$filter = "fltr[]=wmi|{$processedImage}|C|{$watermarkOpacity}";

// Шаг 4. Генерация финального изображения с фоном и водяным знаком
$finalImage = $modx->runSnippet('phpthumbon', [
    'input' => $bgImage,
    'options' => $filter
]);

return $finalImage;
?>

Вывод изображения на странице. Параметры можно опустить или указать под разные задачи

{set $image = $_modx->runSnippet('@FILE snippets/bgImage.php', [
  'image' => $image, 
  'width' => 1200, 
  'height' => 675,
  'brightness' => 5,
  'blurStrength' => 20
])}

<img src="{$image}">
Иван Бочкарев
02 марта 2026, 17:14
0
Это не ошибка, а warning — посмотрим, спасибо!

UPD github.com/modx-pro/MiniShop3/pull/127
Иван Бочкарев
02 марта 2026, 17:12
0
Добрый день!

Это исправлено в github.com/modx-pro/MiniShop3/pull/107, в ближайшее время выйдет новая версия. @Николай Савин fyi
Дмитрий
02 марта 2026, 15:48
0
так же при обновлении minishop3 до версии 1.5.0-beta1 ошибка
[MiniShop3] System routes are in: core/components/minishop3/config/routes/
[MiniShop3] Scheduler not installed, skipping task registration. Install Scheduler component to enable background task processing.
PHP warning: Undefined array key "desc"
PHP warning: Undefined array key "desc"
Успешно установлен пакет minishop3-1.5.0-beta1
Дмитрий
02 марта 2026, 15:37
0
Добрый день! При обновлении modx 3.1.2 до 3.2.0 появились ошибки
Fatal error: Uncaught TypeError: array_diff_key(): Argument #1 ($array) must be of type array, string given in /home/setup/includes/upgrade.install.php:254 Stack trace: #0 /home/setup/includes/upgrade.install.php(254): array_diff_key('{"mscategory_sa...', Array) #1 /home/setup/includes/runner/modinstallrunnerweb.class.php(78): include('/home/hostcweb/...') #2 /home/setup/includes/runner/modinstallrunner.class.php(49): modInstallRunnerWeb->execute(1) #3 /home/setup/controllers/install.php(34): modInstallRunner->run(1) #4 /home/setup/includes/request/modinstallrequest.class.php(81): include('/home/hostcweb/...') #5 /home/setup/index.php(30): modInstallRequest->handle() #6 {main} thrown in /home/setup/includes/upgrade.install.php on line 254
, оказалось, что в modx_access_policies у modx_access_policies стоял 0 template, а в data
"{\"mscategory_save\":true,\"msproduct_save\":true,\"msproduct_publish\":true,\"msproduct_delete\":true,\"msorder_save\":true,\"msorder_view\":true,\"msorder_list\":true,\"msorder_remove\":true,\"mssetting_save\":true,\"mssetting_view\":true,\"mssetting_list\":true,\"msproductfile_save\":true,\"msproductfile_generate\":true,\"msproductfile_list\":true}"
, убрал лишние кавычки и /, поставил 8 шаблон руками, после этого modx обновился. Это баг minishop3 или я где-то напортачил?
Иван Бочкарев
01 марта 2026, 14:45
+1
Добавил сиcтемную настройку ms3recentlyviewed.block_bots_detector и интегрировал jaybizzle/crawler-detect
Ivan K.
01 марта 2026, 14:38
0
В следующий раз сделаю как положено)