Денис Усачев

Денис Усачев

Был в сети 08 сентября 2025, 16:16
Заказы не принимаю
Недавно Chrome начал показывать предупреждение:
[Deprecation] Listener added for a synchronous 'DOMNodeInserted' DOM Mutation Event. This event type is deprecated (https://w3c.github.io/uievents/#legacy-event-types) and work is underway to remove it from this browser. Usage of this event listener will cause performance issues today, and represents a risk of future incompatibility. Consider using MutationObserver instead.
Всему причина msfavorites assets/components/msfavorites/js/default.js

а имеено DOMNodeInserted

$(window).on('load', function () {
        $('body').msfavorites('loadFavorites', true);
        $($.fn.msfavorites.selectors.main).msfavorites();

        $('body').on('DOMNodeInserted', function (event) {
            var html;
            if (event.target && (html = event.target.innerHTML) && typeof html === 'string' && html.match(new RegExp($.fn.msfavorites.defaults))) {
                $(document).trigger($.fn.msfavorites.CONTENT_CHANGE, jQuery.merge([html], arguments));
            }
        });
    });
заменить на

$(window).on('load', function () {
    $('body').msfavorites('loadFavorites', true);
    $($.fn.msfavorites.selectors.main).msfavorites();
    var observer = new MutationObserver(function (mutationsList) {
        for (var i = 0; i < mutationsList.length; i++) {
            var mutation = mutationsList[i];
            var target = mutation.target;
            if (mutation.type === 'childList' && target && target.innerHTML) {
                var html = target.innerHTML;
                if (typeof html === 'string' && html.match(new RegExp($.fn.msfavorites.defaults))) {
                    $(document).trigger($.fn.msfavorites.CONTENT_CHANGE, jQuery.merge([html], arguments));
                }
            }
        }
    });
    observer.observe($('body')[0], { childList: true, subtree: true });
});
пробелема решена
Как ограничить/ отключить скидку для применения в N-количестве до товара.
Скажем скидка действует только два раза для товара в количестве макс 2 шт. либо два заказа по 1 шт
Помогите разобраться с ieMsOptionsPrice2. Питаюсь экспортировать исключительно опубликованные товары и модификации но в результате экпортирует все товари включая не опубликованные. Настройки 1 и 2 не помагают.
1. Опции — Документ Modx — Только опубликованные: Да
2. Опции — Общие: — where: {«published:=»:1}
У меня работает так
<div class="cookie-message js-cookie-message">
    <div class="container">
        <div class="cookie-message-inner">
            <div class="cookie-message-text">
                We use cookies to enhance your experience. 
            </div>
            <button class="button js-cookie-message-confirm">OK</button>
        </div>
    </div>
</div>
<script>
const el = document.querySelector('.js-cookie-message');
    if (!localStorage.getItem('cookieAccept') || localStorage.getItem('cookieAccept') == 0) {
        el.style.display = 'block';
        el.querySelector('.js-cookie-message-confirm').addEventListener('click', (e) => {
            localStorage.setItem('cookieAccept', 1);
            el.style.display = 'none';
        }, true);
    } else {
        el.style.display = 'none';
          
    }
</script>
msFavorites.ids
<?php
/** @var array $scriptProperties */
/** @var msFavorites $msFavorites */
if (!$msFavorites = $modx->getService('msfavorites.msFavorites', '', MODX_CORE_PATH . 'components/msfavorites/model/')) {
    return 'Could not load msFavorites class!';
}
/** @var pdoFetch $pdoFetch */
if (!$modx->loadClass('pdofetch', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true)) {
    return false;
}

if (!empty($returnIds)) {
    $return = 'ids';
}
if ($return === 'ids') {
    $returnIds = 1;
}

if (!isset($list) OR $list == '') {
    $list = 'default';
}
if (!isset($type) OR $type == '') {
    $type = 'resource';
}

$list = is_array($list) ? $list : array_map('trim', explode(',', $list));
$rows = $modx->runSnippet('msFavorites.objects', array_merge($scriptProperties, ['return' => 'data', 'list' => $list, 'type' => $type, 'groupKey' => 'list']));
$pls = [
    'list'  => [],
    'total' => [],
];
foreach ($list as $l) {
    $keys = !empty($rows[$l]) ? array_column($rows[$l], 'key') : [];
    $pls['list'][$l] = !empty($keys) ? implode(',', $keys) : '-0';
    $pls['total'][$l] = count($keys);
}
$msFavorites->setPlaceholders($pls);

$log = '';
if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
    $log .= '<pre class="msFavoritesLog">' . print_r($pdoFetch->getTime(), 1) . '</pre>';
}
$modx->setPlaceholder('msFavorites.log', $log);

$output = [];
switch ($return) {
    case 'data':
        $output = $pls;
        break;
    case 'json':
        $output = json_encode($pls, true);
        break;
    case 'ids':
    default:
        $output = reset($pls['list']);
        if (!empty($toPlaceholder)) {
            $modx->setPlaceholder($toPlaceholder, $output);
            $output = '';
        }
        break;
}

return $output;
Здравствуйте.
Подскажите, как заставить корректно работать сортировку по цене ?sort=ms|price:asc mFilter2 + Discontrol
Дело в том что mFilter сортирует без учета цен скидки Discontrol

Обновление версии mFilter -miniShop2 -Discontrol не помогло.
На тестовом сервере modx host та же ситуация. Подозреваю, что такой баг у всех кто использует mFilter2 + Discontrol
решение довольно простое
1. добавляем в чанк шаблон tpl.msEmail конструкцию из
Получение и вывод pagetitle от другого ресурса с условием проверки локализации
{if $_modx->config.cultureKey == 'ru'}         
 {set $tTitle =  $product.name}
    {else}
{set $tTitle = 'pdoResources' | snippet : [
    'tpl' => '@INLINE {$pagetitle}',
    'class' => 'localizatorContent',
    'sortby' => 'id',
    'limit' => 1,
    'where' => [
        'key' => ('localizator_key' | option),
        'resource_id' =>  $product.id
    ],
]}
{/if}
и {$product.name} заменяем на наш {$tTitle}

проверяем наш шаблон письма через
{'!msGetOrder' | snippet : [
            'id' => 460, //номер заказа
            'tpl' => 'tpl.msEmail.new.user',
        ]}