Антон А.

Антон А.

Был в сети 11 января 2026, 19:20
Заказы не принимаю
По поводу сообщения для капчи. Тоже если вернуть старый код на jQuery, то работает.
Старый код:
jQuery(form).find('[name="' + error.field + '"]').closest('.form-group').addClass('has-error');
Новый код, не работает для Капчи:
var inputGroup = form.querySelector('[name="' + error.field + '"]').closest(easyComm.selectors.inputParent);
if (inputGroup) {
    inputGroup.classList.add(easyComm.classes.hasError);
}
У меня на Modx 3.0.6 (версия easyComm 3.6.0-pl) не хотела появляться GoogleRecaptcha на форме. А точнее скрипт Рекапчи не видел callback-функцию easyCommReCaptchaCallback. Но если вручную запустить эту функцию в консоли браузера после загрузки страницы, то все запускается и капча появляется.
Решил проблему так:
В новом ec.js easyCommReCaptchaCallback объявляется с помощью let. Хотя в предыдущих версиях скрипта было var easyCommReCaptchaCallback. Поменял let на var и все стало работать как надо.

И еще в стандартной форме, если не пройти Рекапчу (не поставить галочку) и попробовать отправить форму, то никакой ошибки не выходит, а в консоли ошибка
Uncaught TypeError: Cannot read properties of null (reading 'closest')
    at xmlHttpRequest.onreadystatechange (ec.js:74:104)
Может надо выдавать предупреждение, что капча не пройдена.
Я до релиза версии 4.1 сам подправил у себя этот кусок кода, сейчас протестил ваш, кажется он также перегружает корзину пустой без вывода чанка об успешном заказе.
Было до 4.0:
callbacks.submit.response.success = function (response) {
                if (response.data['redirect']) {
                    document.location.href = response.data['redirect'];
                } else if (response.data['msorder']) {
                    document.location.href = document.location.origin + document.location.pathname
                        + (document.location.search ? document.location.search + '&' : '?')
                        + 'msorder=' + response.data['msorder'];
                } else {
                    location.reload();
                }
            };
стало в 4.0:
this.callbacks.submit.response.success = response => {
            switch (true) {
                case response.data.redirect:
                    document.location.href = response.data.redirect;
                    break;
                case response.data.msorder:
                    document.location.href = document.location.origin + document.location.pathname
                    + (document.location.search ? document.location.search + '&' : '?')
                    + 'msorder=' + response.data.msorder;
                    break;
                default:
                    location.reload();
            }
        };

стало в 4.1:
this.callbacks.submit.response.success = response => {
            if (response.data.redirect) {
                document.location.href = response.data.redirect;
            }
            if (response.data.msorder) {
                document.location.href = document.location.origin + document.location.pathname
                    + (document.location.search ? document.location.search + '&' : '?')
                    + 'msorder=' + response.data.msorder;
            }
            location.reload();
        };
Мой вариант:
this.callbacks.submit.response.success = response => {
            if (response.data.redirect) {
                document.location.href = response.data.redirect;
            }
            else if (response.data.msorder) {
                document.location.href = document.location.origin + document.location.pathname
                    + (document.location.search ? document.location.search + '&' : '?')
                    + 'msorder=' + response.data.msorder;
            } else {
                location.reload();
            }
        };
Нижний вариант бы работал, если бы response.data.redirect и response.data.msorder были boolean, тогда можно было бы заменить исходную конструкцию с if на эту. Но response.data.msorder это id.
Может, при рефакторинге заменили на switch, предположив что response.data.redirect и response.data.msorder булевы, ну чисто на автомате раз они проверяются в if.
Ну от замены конструкции логика работы кода не поменялась же.
было
callbacks.submit.response.success = function (response) {
                if (response.data['redirect']) {
                    document.location.href = response.data['redirect'];
                } else if (response.data['msorder']) {
                    document.location.href = document.location.origin + document.location.pathname
                        + (document.location.search ? document.location.search + '&' : '?')
                        + 'msorder=' + response.data['msorder'];
                } else {
                    location.reload();
                }
            };
стало
this.callbacks.submit.response.success = response => {
            switch (true) {
                case response.data.redirect:
                    document.location.href = response.data.redirect;
                    break;
                case response.data.msorder:
                    document.location.href = document.location.origin + document.location.pathname
                    + (document.location.search ? document.location.search + '&' : '?')
                    + 'msorder=' + response.data.msorder;
                    break;
                default:
                    location.reload();
            }
        };
Для проверки установил чистый MODX Revolution 2.8.4-pl и только pdoTools и minishop2.
Товар
redstudio.tmweb.ru/index.php?id=3
Корзина redstudio.tmweb.ru/index.php?id=4

Включаешь новые скрипты вот так как сейчас, выключаешь все ок. Могу дать доступ в админку.
Тоже столкнулся с проблемой редиректа на текущую страницу после аутентификации.
Как я понял, если указан loginResourceId, то все хорошо и вы перенаправляетесь на нужную страницу.
Но если этот параметр не указан или 0, то url для редиректа будет формироваться из $_SERVER['REQUEST_URI'].
Но в тот момент когда в HybridAuth генерируетя url для редиректа, в $_SERVER['REQUEST_URI'] уже нет того первоначального адреса, возможно потому что провайдер после аутентификации перенаправляет нас на
https://domen.site/?hauth.done=Yandex
из параметра Callback URL. Я прав? Кто подскажет?
Это я допустил опечатку тут в посте, проверил в базе по умолчанию значние — 0, как в мапе.
Вот моя таблица сейчас:
CREATE TABLE IF NOT EXISTS `modx_ms2_products` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `article` varchar(50) DEFAULT NULL,
  `price` decimal(12,2) DEFAULT '0.00',
  `old_price` decimal(12,2) DEFAULT '0.00',
  `weight` decimal(13,3) DEFAULT '0.000',
  `image` varchar(255) DEFAULT NULL,
  `thumb` varchar(255) DEFAULT NULL,
  `vendor` int(10) UNSIGNED DEFAULT '0',
  `made_in` varchar(100) DEFAULT '',
  `new` tinyint(1) UNSIGNED DEFAULT '0',
  `popular` tinyint(1) UNSIGNED DEFAULT '0',
  `favorite` tinyint(1) UNSIGNED DEFAULT '0',
  `tags` text,
  `color` text,
  `size` text,
  `source` int(10) UNSIGNED DEFAULT '1',
  `volume` int(10) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `article` (`article`),
  KEY `price` (`price`),
  KEY `old_price` (`old_price`),
  KEY `vendor` (`vendor`),
  KEY `new` (`new`),
  KEY `favorite` (`favorite`),
  KEY `popular` (`popular`),
  KEY `made_in` (`made_in`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;