Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 113 комментариев

Максим
Максим
Оказалось что в updateToken пропустил один this, теперь ошибок нет вообще, но корзина не обновляется, что бы показать увеличение количества товаров, после добавления… Содержимое страницы обновляется только после перезагрузки страницы. Буду искать причину. Но если что знает от чего так, то подскажите, буду признателен.
Максим
Максим
Максим
Максим
Максим
Максим
Спасибо что откликнулись.

Пока была надежда что кто-то прям с такой же проблемой столкнулся кто-то, поэтому не прикреплял скриншоты. Сейчас будут подробности. Вот тут указаны эти методы, в самом репозитории модуля —
https://github.com/modx-pro/MiniShop3/issues/15

Вот скриншот из консоли браузера


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

В каталоге ошибка в консоли вылазит сразу при загрузке страницы, так же и в карточке товара.

Вот скриншот блока кода из файла:
Максим
Максим
У меня сайт на MODx 3.1.1, требуется настроить на нём магазин. Я поставил MiniShop3. Я в курсе что это альфа-версия и могут быть какие-то проблемы в работе, просто не хочется самим писать какой-то примитивный функционал магазина (займусь этим если ничего не решу с ошибками), что бы закрыть все потребности на сайте. Тем более что когда-то давным давно писалось что основной функционал с MiniShop2 перенесён. Может кто-то ставил уже этот модуль и решал возникнувшие проблемы? В частности, у меня проблема с асинхронной функцией ms3.setToken() в файле customer.js (возможно дальше тоже появятся ошибки, но это пока в числе первых), возвращается ошибка «ms3.setToken is not a function». Знает кто-то как её исправить? В поиске не нашёл что бы у кого-то подобная проблема была…

На гите есть упоминание этой функции и пометка что «Метод setToken является асинхронной, но вызывается как синхронный. Возможны ошибки в будущем.». Может кто-то знает как убраь эту ошибку?
Василий Наумкин
Василий Наумкин
Да для всех, какие есть в дистрибутиве — лишнего-то там быть ничего не должно, по идее.

В идеале вообще автоматизировать и качать всё новое бесплатное из репозитория MODX / modstore, распаковывать и забивать в БД:
— название: MODX или дополнение
— версия дистрибутива
— путь к файлу
— sha1 хэш файла
Артур Шевченко
Артур Шевченко
создать онлайн базу для проверки хэшей файлов MODX и дополнений через API
Интересная идея, я бы занялся на досуге. Ты мог бы в общих чертах описать для каких файлов делать хэш у ядра и у компонентов?
Василий Наумкин
Василий Наумкин
Насколько я вижу из кода, скрипт в первый раз сохраняет хэши файлов, а потом их проверяет. Но если сайт уже заражён — то это никак не поможет.

Подкидываю альтернативную идею, если интересно — проверять версию MODX (или брать из настроек), скачивать соответствующий дистрибутив, и проверять хэши файлов сайта по файлам дистрибутива.

То есть, берём оригинальные файлы index.php в connectors, manager и корне, а так же файлы из core — и проверяем, чтобы все они присутствовали на сайте с оригинальным хэшем.

Если все основные файлы не изменены, то сайт не заражён и должен работать корректно.

Правда, есть еще возможность заражения только файлов дополнений, без ядра. Наверное, можно и их сверять с дистрибутивами из репозитория по той же логике — скачать нужную версию и сравнить хэши…

Кстати, вот вам еще идея — создать онлайн базу для проверки хэшей файлов MODX и дополнений через API. Чтобы простые GET запросы, типа /api/hash/modx/2.8.1/core/model/modx.class.php возвращали sha1 хэш запрошенного файла или 404.

Конечно, это не спасёт от уже залитых шеллов и вредоносов, но они не будут запускаться через сайт. А если запустятся и что-то изменят, то следующая проверка это покажет. И если раз за разом файлы будут меняться — то можно уже более внимательно искать, что там такое у вас залито.
Артур Шевченко
Артур Шевченко
Обычно для компонентов не требуется указывать префикс таблиц в методе addPackage().
И кажется ты не понимаешь что это за магические письмена
$q->leftJoin('goodStarVoteCount', 'countaverage', 'modResource.id = countaverage.thread');
Первым аргументом в метод leftJoin передаётся имя класса ('goodStarVoteCount'); вторым псевдоним для таблицы ( 'countaverage'), если не передать будет взято имя класса; третьим аргументом передаётся условие соединение таблиц как в операторе ON в SQL ( 'modResource.id = countaverage.thread').
На чистом SQL запрос будет примерно таким
SELCET `modResource`.`id` as `id`, `countaverage`.`countaverage` as `count` FROM `modx_site_content` as `modResource`
LEFT JOIN `modx_good_stars_vote_count` as  `countaverage` ON `modResource`.`id` = `countaverage`.`thread`
WHERE `modResource`.`published` = 1 AND  `modResource`.`deleted` = 0
Как видишь в секциях SELECT и ON используется псевдоним таблицы, в xPDO тоже надо использовать псевдонимы, если они указаны в leftJoin или setTableAlias. Поэтому вот это всё
'modTemplateVarResource.preview.value as preview',
'modTemplateVarResource.event_date.value as event_date',
'modTemplateVarResource.event_date_end.value as event_date_end',
'modTemplateVarResource.event_city.value as event_city',
'goodStarVoteCount.countaverage as countaverage'
неверно, должно быть так
'preview.value as preview',
'event_date.value as event_date',
'event_date_end.value as event_date_end',
'event_city.value as event_city',
'countaverage as countaverage'
И наконец, чтобы проверить какой же запрос будет выполнен можно сделать так
$q->prepare();
echo $q->toSQL();
Илья Павлов
Илья Павлов
Добрый день!
Установил, настроил, капча выводится, но если не чекнуть её и отправить форму получаю ошибку:
Failed to load resource: the server responded with a status of 500 ()
Журнал ошибок ModX пуст.
Modx 3.1.2-pl, YaSmartCaptcha 1.0.2-pl, Formit 5.1.1-pl.

В логе сервера такая ошибка:
[Tue May 20 17:49:57 2025] [error] [pid 78865] sapi_apache2.c(358): [client] PHP Fatal error: Uncaught Error: Object of class Sterc\\FormIt could not be converted to string in /public_html/core/components/yasmartcaptcha/model/yasmartcaptcha.class.php:58\nStack trace:\n#0 /public_html/core/components/yasmartcaptcha/model/yasmartcaptcha.class.php(58): str_replace(Array, Array, 'https://smartca...')\n#1 /public_html/core/cache/includes/elements/modx/revolution/modsnippet/52.include.cache.php(42): YaSmartCaptcha->initialize('web', Array)\n#2
/public_html/core/src/Revolution/modScript.php(88): include('/home/p...')\n#3 /public_html/core/src/Revolution/modParser.php(508): MODX\\Revolution\\modScript->process(NULL)\n#4 /public_html/core/components/pdotools/src/Parsing/Parser.php(276): MODX\\Revolution\\modParser->processTag(Array, true)\n#5 /public_html/core/src/Revolution/modParser.php(221): ModxPro\\PdoTools\\Parsing\\Parser->processTag(Array, true)\n#6 /public_html/core/components/pdotools/src/Parsing/Parser.php(73): MODX\\Revolution\\modParser->processElementTags('', '<!doctype html>...', true, false, '[[', ']]', Array, 9)\n#7 /public_html/core/src/Revolution/modResource.php(520): ModxPro\\PdoTools\\Parsing\\Parser->processElementTags('', '<!doctype html>...', true, false, '[[', ']]', Array, 10)\n#8 /public_html/core/src/Revolution/modResource.php(468): MODX\\Revolution\\modResource->parseContent()\n#9 /public_html/core/src/Revolution/modResponse.php(72): MODX\\Revolution\\modResource->prepare()\n#10 /public_html/core/src/Revolution/modRequest.php(154): MODX\\Revolution\\modResponse->outputContent(Array)\n#11 /public
Подскажите, пожалуйста, может я что-то не так настроил?