Максим

Максим

Был в сети 10 декабря 2023, 17:27
Заказы принимаю
Тогда получается, что проблема на стороне компонента mspSberbank. Так как он платный, то рекомендую обратиться в поддержку. Но лично я бы перед обращением сам бы продебажил. Ведь вам известен файл, кудадолжен стучать сбер для ответа после проведения транзакции, и так же есть мнтод
$modx->log(1, print_r(array(1,2,3), 1))
, который позволяет логировать данные. Возможно выяснится, сто в настройках сбера ссылка указана некорректная!)))
Ругается, что не может загрузить контекст web и вы пытаетесь отправить пустое письмо. У вас сайт содержит несколько контекстов? Если да, то из какого контекста происходит оформление заказа и попытка оплатить?
VirtualPage не доступен с прошлого года. И на данный момент его нет в репозиториях. Читаем последние комментарии.
Да и нужно ли устанавливать компонент, если можно обойтись одним плагином на событии OnHandleRequest примерно с такой логикой:
1) Проверяем наличие get-параметра. Если нет, то ничего не делаем иначе редирект на нужный url (данные для формирования все есть).
2) Дальше (предположим, что значение get-параметра genre равно uri нужного ресурса) ищем нужный нам ресурс и если находим, то делаем sendForvard, иначе ничего не делаем и получаем 404.
К сожалению пример есть только кода вынесенного в отдельный класс и в плагине вызывается только метод события. Да и в самих методах куча другой логики. Поэтому без примера…
Вот старенький пример от Василия со всеми пояснениями.
Предполагаю, что такую логику и не закладывали в функционал, так как не факт, что во все одноместные номера можно с животными и во всех есть кондиционер и т.д. Думаю для этого есть поле описание… Ну а если его не достаточно, то нужно тщательно продумывать доп функционал и реализовывать. А дополнение предоставит отличную базу и основную логику бронирования.
Я так понимаю что такая же проблема?
Если да, то пока придумал только костыльное решение в виде создания плагина и в нем устанавливаю значение.
<?php
/** @var modX $modx */
switch ($modx->event->name) {
        
    case 'OnDocFormPrerender':
        if ($mode == 'upd') {
            $inshop = implode(',', $resource->get('inshop'));
            $modx->controller->addHtml('<script type="text/javascript">
                Ext.onReady(function() {
                    Ext.getCmp("modx-panel-resource").getForm().setValues({"inshop[]":[' . $inshop . ']});
                });
                </script>');
        }
}
Но у вас в окно нужно подставлять… Можно попробовать в этом плагине ловить открытие окна и подставлять.
Другое решение пока не нашел, да и не искал, честно говоря.
Все зависит от задачи. Если стандартные notification (jGrowl) совсем не нужны, то корректнее будет скопировать файл /assets/minishop2/js/web/default.js, изменить в нем объект miniShop2.Message (не забываем про метод initialize — там подключается либа) и указываем в настройках minishop2 новый js файл.
Ну а если они не нужны только в определенных случаях, то можно в своем js файле, в участке который начинает выполняться после загрузки DOM, просто переопределить, как показал Василий по первой ссылке в комментарии выше.
Ну если tpl_N уже не работает или он не подходит, так как эти блоки должны повторяться, то можно включить феном, от сниппета получать только список id, а потом уже разбить по разделителю и в форыче заложить ту логику, которая нужна. Хотя я бы предпочел скопировать и подправить сниппет под нужную мне логику.
А что пример даст? Ну вот пример: junior35.nabami.ru/kostyum-little-maven-/-art.-lm-1525.html (это дев версия сайта)
Есть возможность заказать размерами и весь размерный ряд. Размерный ряд — это товары размером от 2 до 7 в количестве по 1 штуке. Иными словами — при добавлении размерного ряда, в плагине происходит чтение размеров и добавляется в корзину как один товар. Но цена пересчитывается как за 6 товаров. Вот только в коде плагина много всего лишнего и в данном проекте пришлось переписывать класс корзины.
Так что для решения вашей проблемы совсем не нужно переопределять класс корзины (менять основную логику работы корзины) и достаточно просто написать несколько строк кода JS и написать доп логику в плагине.
Если, что мой скайп max-gopher. Можно голосом обсудить.
Почему минусанули? Вопрос был про кол-во и предложенный мной метод прекрасно работает. Если вы не увидели в ответе решения с ценой, так и в вопросе про цену ничего не сказано. Да и сложного ничего нет в создании плагина на событии «msOnBeforeAddToCart». Все данные для формирования корректной цены есть…
Что не так?
Все исхдит от потребностей, если на одной странице выводится например 10 результатов, то можно написать свой сниппет, которы будет получать 50 записей и возврящать список id для параметра resources сниппета pdoPage.Либо указать этот сниппет в параметре element.
Ну самое первое, что приходит в голову — это значение поля count формировать по формуле, где одна из переменных будет поле для ввода количества пользователем. Шаг добавления можно определить атрибутом тега input type=«number» (Стилизовать его можно как угодно).
Например поле для ввода пользовательского кол-ва будет таким:
<input name="user_count" type="number" step="100" min="100">
Тогда, count = user_count / 100
Ну а уж как получать значение из поля и записывать значени в поле, думаю что знаете.
Уверен на 90%, что такого компонента нет!) Но и проблем не вижу. Есть же Tickets, для которого можно написать «Коннектор», который будет возвращать json. Ну часть логики придется вынести из сниппета в «коннектор», но ведь основная логика уже реализована в классах и для админки все предучмотрено.
По Fenom:
'tvFilters' => ('category==%' ~ $_modx->resource.id~'%')
— Скобки гарантируют, что сначала произойдет конкантенация, и только потом установится значение.
tvFilters не использую, но судя по сторке выше и описанию, из-за % в условие подставляется LIKE и в результате вы получаете и будете получать результаты, где есть совпадение в любом месте (44,444,144,244,443 и т.д.).
Попробуйте убрать знак процента или использовать where вместо tvFilters.