Меню

Minishop2 как изменить валюту



[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 — сниппет для вывода списка валют.
Параметры:

  1. tpl — Чанк оформления для вывода результата работы сниппета.
  2. frontendCss — Стиль фронтенда. По умолчанию [[+assetsUrl]]css/web/default.min.css
  3. frontendJs — Скрипт фронтенда. По умолчанию [[+assetsUrl]]js/web/default.min.js

Вы можете увидеть все доступные плейсхолдеры валют просто не указывая чанк оформления:

msMultiCurrencyPrice — сниппет для вывода цены в определенной валюте.
Параметры:

  1. price — цена
  2. cid — ID валюты в которой нужно вернуть цену. По умолчанию используется валюта, выбранная пользователем.

Пример использования:

Для шаблонизатора Fenom

msMultiCurrencyPrices — сниппет для вывода цены товара во всех валютах.
Параметры:

  1. price — цена товара в базовой валюте (не обязательный).
  2. old_price — старая цена товара в базовой валюте (не обязательный).
  3. pid — id товара цену которого необзодимо вывести. Параметр игнорируется если задан парамтер price. Если не задан pid и price то будет использован id страницы на которой вызван данный сниппет.
  4. symbol — название колонки из которой следует взять символ валюты. Может принимать два значения right и left. По умолчанию right.
  5. tpl — чанк оформления результата. По умолчанию msMultiCurrencyPrices.

Важно! Если вы используете дополнения, которые каким-то образом манипулируют ценой, то убедитесь, что они корректно работают с msMultiCurrency, особенно если у вас будет товар, привязанный к одной из валют.

Обновление котировок по крон

Работа с контекстами

mFilter2

Для отображение в слайдере цены в выбранной валюте следует выполнить следующие действия:

  1. скопировать файл в директорию /core/components/msearch2/custom/filters/ (данный шаг можно пропустить если mSearch2 был установлен до msMultiCurrency)
  2. в системных настройках /manager/?a=system/settings для ключа mse2_filters_handler_class указать msmcFiltersHandler
  3. заменить для слайдера цены фильтр number на price
  4. очистить кэш 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 — изменение пользователем валюты, содержит следующие переменные:

  1. $currency — массив данных выбранной валюты

msmcOnGetPrice — конвертация цены, содержит следующие переменные:

  1. $price — цена
  2. $newPrice — цена после конвертации
  3. $currencyId — ID валюты
  4. $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’]));

Для сохранения изменений надо:

  1. переписать значение в поле $currentProduct[‘price’]
  2. передать ms2 корзину, с которой мы работали в нашей локальной переменной, а именно: $cart->set($products);

Метод 2: Ипользование сниппета

Для переопределения цены товара при добавлении в корзину модуль ms2 использует специальный сниппет. Указать имя которого нужно в системных параметрах приложения. А именно создать параметр по имени ms2_price_snippet . Сниппет должен возвращать цену товара. В нём доступны все параметры, которые были переданы в форме. Допустим, мы указали, что новая цена будет в параметре «price», создав в форме поле . Тогда код сниппета, который обрабатывает добавление новой цены, будет следующим:

Важно

Сниппет модификатора цены применяется не только перед добавлением в корзину. Он также применяется при отображении товаров через сниппет msProduct. Так что надо быть осторожнее с использованием одноименных параметров. А лучше повесить дополнительный флаг в плагине перед добавлением в корзину.

Количество просмотров: 3 546

Автор статьи: Екатерина Шушкевич.

Руководитель проектов, технический директор, практикующий разработчик, преподаватель. Опыт в WEB-разработке — более 10 лет.

Источник

Читайте также:  Кассовые операции в иностранной валюте документ