[MODX] Подсказки по работе и заготовки для MiniShop2
Пример вывода msProducts
Добавить превьюшки
Медиа — Управление медия — MS2 Images — thumbnails (Чтобы не было обрезки надо указать zc : 0 )
[[+image]] — плейсхолдер для большого изображения при выводе в msProducts .
Если нужно сделать несколько вариантов изображения, то вот примерно такой код нужно разместить в thumbnails :
Показать товары в древе ресурсов
Файл, который отвечает за обработку событий по Ajax, отправляемых на /assets/components/minishop2/action.php , в частности cart/add cart/change cart/remove cart/clean cart/get order/add order/submit order/getcost order/getrequired order/clean order/get оказывается плагином, который называется miniShop2 .
Пара фильтров для вывода msProducts
- &where=`<"Data.old_price:!=":"0">` — Вывести товары с особой ценой
- &where=`<"Data.new":"1">` — Вывести товары с отметкой Новый
- &where=`<"Data.popular":"1">` — Вывести товары с отметкой Популярный
- &where=`<"Data.favorite":"1">` — Вывести товары с отметкой Особый
Добавить в корзину несколько товаров
В моем случае попытка запустить цикл скриптом увенчалась неудачей. Решил не писать костыли вроде СетТаймаут, и закрыть вопрос чуть более правильно.
Вносим изменения в палагин miniShop2: внутри case OnLoadWebDocument добавляем что вроде:
По-хорошему следовало бы внедриться в файл assets/components/minishop2/js/web/default.js И там настроить правильную запаковку, отсылку и обработку данных, но заморачиваться с этим сейчас нет времени и желания, поэтому закроем костылем. Костыль не страшный. Просто мы сами сделаем все операции с данными:
Изменить цену товаров в корзине minishop2 при добавлении определенного товара
В частности в моем случае задача была такая:
О тот как добавить несколько товаров в корзину 1 кликом пожно почитать тут.
Открываем код сниппета msCart и начинаем ваять костыль!
Фильтрация mFilter
Изменение цены при добавлении в корзину minishop2
Цена в minishop2 по курсу валюты
- Создаем TV usd_price :
Тип: чекбокс ;
возможные значения: Да==1||Нет==0 ;
Значение по умолчанию: Нет==0 . - Создаем системную настройку: ms2_usd_value , значение — 80 (нынешний курс валюты)
- Создаем плагин на событие msOnBeforeAddToCart
Код плагина (не забыть установить системное событие):
Поместить параметр вывода в плейсхолдер
Речь идет о том, чтобы в санке бала возможность вывести какой-то параметр, который был передан при вызове сниппета. К примеру параметр tpl будет доступен в [[+property.tpl]] . И так со всеми параметрами.
Эта штука реализована в MIGX и иногда бывает крайне полезна. К примеру в проекте у меня есть шаблон вывода товаров, он одинаковый везде, но кое-где нужно использовать класс col-xs-3 , а где-то col-xs-4 . Делать под это условие с привязкой за шаблон, или тем более создавать отдельный чанк не хочется. Куда проще — передать класс при вызове сниппета.
Но такого функционала в msProducts не предусмотрено. Ок, добавим — нужно просто скопировать часть кода ниже в код сниппета msProducts:
Разная цена в зависимости от кол-ва товара в корзине
Стоит отметить, что поля price500/price5/price4/price3/price2 были созданы предварительно.
Расширение свойств классов MiniShop2
Переходим в папку core/components/minishop2/custom/ и выбираем подходящее место для файлика — в зависимости от того, что мы саобираемся расширять. Допустим это будет order . Создаем файл с любым названием, которое оканчивается на .class.php .
Внутри этого файлика пишем
После этого переходим в системные настройки MiniShop2, и там указываем имя вашего класса (мой пример msOrderHandlerMy ) в настройке ms2_order_handler_class , или ms2_cart_handler_class для нового msCartHandler
Родные методы храняться в файлах:
core/components/minishop2/model/minishop2/msorderhandler.class.php
core/components/minishop2/model/minishop2/mscarthandler.class.php
core/components/minishop2/model/minishop2/msdeliveryhandler.class.php
core/components/minishop2/model/minishop2/mspaymenthandler.class.php
Динамически обновлять цены при изменении кол-ва в корзине
Эта задача наиболее актуальна при разных ценах на товары в зависимости от кол-ва. (см. пункт выше)
Нам надо будет подправить JS файлик assest/components/minishop2/js/web/default.js , а также расширить класс msCartHandler (см. выше)
Создаем файлик по инструкции:
И теперь в этом методе уже куда угодно сортируем полученные данные. Например так:
Источник
msMultiCurrency
plAlert
Уведомления на сайте с датой публикации
msImportExport
Импорт и экспорт для miniShop2
msFieldsManager
Компонент позволяет расширять свойства товара в miniShop2
Компонент добавляет мультивалютность в miniShop2, а также позволяет привязывать цену отдельного товара к одной из
валют.
Из коробки доступны следующие поставщики котировок валют:
- Центральный банк Российской Федерации (по умолчанию );
- Центральный банк Украины;
- Национальный банк Республики Беларусь;
- Национальный банк Республики Казахстан.
Для каждой котировки можно указать свой коэффициент, на которую она будет умножаться. Есть возможность обновления
котировок через крон.
Видео-обзор
Использование
После установки компонента в меню miniShop2 появится подменю “Валюты”.
В данном разделе вы можете выбрать/добавить своего поставщика котировок валют, а также настроить или добавить свои валюты.
В списке валют нужно указать основную валюту (валюта в которой указаны цены товаров), по умолчанию это российский рубль.
Для того, чтобы привязать цену конкретного товара к другой валюте, необходимо в карточки товара выбрать ее из выпадающего списка “Валюта” и указать стоимость товара в выбранной валюте.
Если не включена опция «Цена в корзине в валюте пользователя» то цена в заказе всегда сохраняется в базовой валюте, иначе в валюте которая была выбрана пользователем. В чанке сниппета msGetOrder вся информация о выбранной валюте хранится в свойстве <$order.properties.msmc>. Например символ валюты можно получить так:
левый — <$order.properties.msmc.symbol_left>
правый — <$order.properties.msmc.symbol_right>
Информация, о выбранной валюте пользователем, хранится в следующих плейсхолдерах:
- [[!+msmc.name]] — название валюты
- [[!+msmc.code]] — код валюты
- [[!+msmc.symbol_left]] -символ слева
- [[!+msmc.symbol_right]] — символ справа
- [[!+msmc.val]] — конечное значение котировки валюты ( котировка умноженная на коэффициент).
Для корректного вывода информации о заказе в письмах, необходимо в системной настройке miniShop2 (ключ ms2_order_handler_class) установить msmcOrder
Сниппеты
msMultiCurrencyCart — сниппет для вывода корзины покупателя. Данный сниппет по параметрам полностью идентичен сниппету msCart и всего лишь обеспечивает корректный вывод цены товара. В чанках данного сниппета нет необходимость в использовании сниппета msMultiCurrencyPrice. Название валюты в чанке доступно через плейсхолдер [[+currency]]
msMultiCurrencyGetOrder — сниппет для вывода заказа. Данный сниппет по параметрам полностью идентичен сниппету msGetOrder и всего лишь обеспечивает корректный вывод цены товара. В чанках данного сниппета нет необходимость в использовании сниппета msMultiCurrencyPrice. Название валюты в чанке доступно через плейсхолдер [[+currency]]
msMultiCurrency — сниппет для вывода списка валют.
Параметры:
- tpl — Чанк оформления для вывода результата работы сниппета.
- frontendCss — Стиль фронтенда. По умолчанию [[+assetsUrl]]css/web/default.min.css
- frontendJs — Скрипт фронтенда. По умолчанию [[+assetsUrl]]js/web/default.min.js
Вы можете увидеть все доступные плейсхолдеры валют просто не указывая чанк оформления:
msMultiCurrencyPrice — сниппет для вывода цены в определенной валюте.
Параметры:
- price — цена
- cid — ID валюты в которой нужно вернуть цену. По умолчанию используется валюта, выбранная пользователем.
Пример использования:
Для шаблонизатора Fenom
msMultiCurrencyPrices — сниппет для вывода цены товара во всех валютах.
Параметры:
- price — цена товара в базовой валюте (не обязательный).
- old_price — старая цена товара в базовой валюте (не обязательный).
- pid — id товара цену которого необзодимо вывести. Параметр игнорируется если задан парамтер price. Если не задан pid и price то будет использован id страницы на которой вызван данный сниппет.
- symbol — название колонки из которой следует взять символ валюты. Может принимать два значения right и left. По умолчанию right.
- tpl — чанк оформления результата. По умолчанию msMultiCurrencyPrices.
Важно! Если вы используете дополнения, которые каким-то образом манипулируют ценой, то убедитесь, что они корректно работают с msMultiCurrency, особенно если у вас будет товар, привязанный к одной из валют.
Обновление котировок по крон
Работа с контекстами
mFilter2
Для отображение в слайдере цены в выбранной валюте следует выполнить следующие действия:
- скопировать файл в директорию /core/components/msearch2/custom/filters/ (данный шаг можно пропустить если mSearch2 был установлен до msMultiCurrency)
- в системных настройках /manager/?a=system/settings для ключа mse2_filters_handler_class указать msmcFiltersHandler
- заменить для слайдера цены фильтр number на price
- очистить кэш modx.
Пример вызова сниппета mFilter2
Вывод цен и валюты в категории товаров
Для того что бы поля “Валюта”, “Цена в выбранной валюте” или “Старая цена в выбранной валюте” вывести в категории товара, необходимо в системных настройках minishop2 для опцию “Поля таблицы товаров” (ключ ms2_category_grid_fields) добавить название нужных полей.
- currency_id — название валюты
- msmc_price — цена в выбранной валюте
- msmc_old_price — старая цена в выбранной валюте
Пример
Передача кода валюты в платежную систему
Для передачи кода валюты в платежную систему можно написать плагин который будет изменять ее параметр в котором храниться код валюты.
Ниже приведен код плагина для события msOnChangeOrderStatus который устанавливает для дополнения mspUP в его параметр ms2_payment_unitpay_currency код выбранной валюты.
Разработка
Создание своего поставщика валют
Для создания своего поставщика валют необходимо поместить в директорию core/components/msmulticurrency/providers php файл с вашим классом, являющимся наследников базового класса поставщика MsMCProvider и определить его методы getCodes, getCourse и run по аналогии с уже имеющимися поставщиками. После всего этого добавьте информацию о вашем поставщике в разделе поставщиков
Системные события
msmcOnToggleCurrency — изменение пользователем валюты, содержит следующие переменные:
- $currency — массив данных выбранной валюты
msmcOnGetPrice — конвертация цены, содержит следующие переменные:
- $price — цена
- $newPrice — цена после конвертации
- $currencyId — ID валюты
- $course — коэффициент, на который может делиться цена
Полезные функции
getPrice — конвертация цены
Пример использования функции getPrice в своем скрипте
Источник
Цена в рублях по курсу доллара в miniShop2
Как выводить в miniShop2 сумму товара в рублях, если цена указана в долларах? Есть плагин парсера курса валют.
Найдено на просторах интернета, изменено под свои нужды
Сниппет cbrEuro (про запас)
Как использовать полученный курс для конвертирования цены товара в рубли?
Комментарии: 57
У меня получение курсов идёт в плагине. В сниппет получаю готовые данные. Зачем лишние действия, если «до тех пор, пока не изменится дата, информация будет браться из кэша, а обращение к сайту ЦБ и разбор повторно выполняться не будут»
Системная настройка правильно сделана?
настройка в параметрах, позволяющая указать свой сниппет для обработки товара
Ох…
1. Система-Настройки системы: ключ ms2_price_snippet, указываем значение modifyPrice
2. Делаем сниппет modifyPrice:
ну у меня тут несколько другая ситуация, цены на товары вбиты в поля price — в евро, в old_price — в долларах.
3. Создаем ресурс, публикуем его, скрываем из меню, добавляем ему в контент:
и этот ресурс на хостинге вешаем по его url на кронтаб раз в сутки.
4. Создаем сниппет updateRates:
Я в этом сниппете еще кеш чищу в конце всего сайта, мне так нужно.
5. Создаем файл components/cbrf/ExchangeRatesCBRF.class.php:
6. Создаем 2 системные настройки:
rate_euro
rate_usd
7. Открываем первый раз ресурс с шага 3 и проверяем, что он сработал и в настройках курсы обновились.
Это мое решение с одного из сайтов, успешно работающее.
Источник
Изменение цены в minishop2 при добавлении в корзину
Часто при разработке интернет-магазина возникает ситуация, когда некоторые товары надо положить в корзину с отличной от первоначальной цене. Давайте рассмотрим, как это сделать, используя для организации магазина на MODX Revo модуль minishop2 (ms2). Добавление товаров в корзину при использовании этого приложения происходит аяксом при указании у формы класса ms2_form . Внутри которой указываются параметры id товара и его количество (count). Изменить цену за счет поля формы, к примеру, input name=»price» не удастся.
Настройка ms2 для использования произвольной цены при добавлении в корзину.
Есть два пути для изменнеия цены: создание плагина и сниппета. Опишем оба из них.
Метод 1: Использование плагина
Создаем плагин и вешаем его на событие msOnAddToCart (На вкладке «Системные события» чекаем нужное событие). В обработку мы получим два параметра:
- $cart — корзина с товарами,
- $key — ключ нашего текущего товара в этой корзине.
Берем в переменную все товары из таблицы и достаем нужный нам товар:
В $currentProduct будет находиться ассоциативный массив. Узнать, что там лежит, можно выведя его содержимое в Журнал Ошибок MODX: $modx->log(1, ‘current product: ‘.print_r($currentProduct,1));
Взять всю инфомрацию о товаре можно, прочитав его из базы: $productData = $modx->getObject(‘msProduct’, $currentProduct[‘id’]));
Для сохранения изменений надо:
- переписать значение в поле $currentProduct[‘price’]
- передать ms2 корзину, с которой мы работали в нашей локальной переменной, а именно: $cart->set($products);
Метод 2: Ипользование сниппета
Для переопределения цены товара при добавлении в корзину модуль ms2 использует специальный сниппет. Указать имя которого нужно в системных параметрах приложения. А именно создать параметр по имени ms2_price_snippet . Сниппет должен возвращать цену товара. В нём доступны все параметры, которые были переданы в форме. Допустим, мы указали, что новая цена будет в параметре «price», создав в форме поле . Тогда код сниппета, который обрабатывает добавление новой цены, будет следующим:
Важно
Сниппет модификатора цены применяется не только перед добавлением в корзину. Он также применяется при отображении товаров через сниппет msProduct. Так что надо быть осторожнее с использованием одноименных параметров. А лучше повесить дополнительный флаг в плагине перед добавлением в корзину.
Количество просмотров: 3 546
Автор статьи: Екатерина Шушкевич.
Руководитель проектов, технический директор, практикующий разработчик, преподаватель. Опыт в WEB-разработке — более 10 лет.
Источник