msMultiCurrency

Мультивалютность для miniShop2
Автор дополнения
Prihod
Пакетов
12
Закачек
2 231
Обычно отвечает в течение нескольких дней
Автор дополнения
Пакетов
12
Закачек
2 231
Обычно отвечает в течение нескольких дней
Версия 1.0.2-beta
Дата выпуска 01.06.2018
Загрузки 24
Просмотры 570
Внимание, этот компонент требует версию PHP 5.5 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.

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


Из коробки доступны следующие поставщики котировок валют:

  • Центральный банк Российской Федерации (по умолчанию );
  • Центральный банк Украины;
  • Национальный банк Республики Беларусь;
  • Национальный банк Республики Казахстан.


Для каждой котировки можно указать свой коэффициент, на которую она будет умножаться. Есть возможность обновления
котировок через крон.


Видео-обзор




Использование



После установки компонента в меню miniShop2 появится подменю “Валюты”.



В данном разделе вы можете выбрать/добавить своего поставщика котировок валют, а также настроить или добавить свои валюты.

В списке валют нужно указать основную валюту (валюта в которой указаны цены товаров), по умолчанию это российский рубль.


Для того, чтобы привязать цену конкретного товара к другой валюте, необходимо в карточки товара выбрать ее из выпадающего списка “Валюта” и указать стоимость товара в выбранной валюте.



Цена в заказе всегда сохраняется в базовой валюте.


Для того чтобы цена в корзине после оформления заказа и в письме выводилась в выбранной валюте пользователя, необходимо в чанках соответствующих сниппетов преобразовывать цену с помощью сниппета msMultiCurrencyPrice (параметр pid указывать не нужно, даже если есть товар с привязанной валютой), а также в системных настройках /manager/index.php?a=system/settings дополнения включить опцию “Цена в корзине в валюте пользователя”


Информация, о выбранной валюте пользователем, хранится в следующих плейсхолдерах:

  • [[!+msmc.name]] — название валюты
  • [[!+msmc.code]] — код валюты
  • [[!+msmc.symbol_left]] -символ слева
  • [[!+msmc.symbol_right]] — символ справа
  • [[!+msmc.val]] — конечное значение котировки валюты ( котировка умноженная на коэффициент).


Сниппеты



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

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

[[!msMultiCurrency?
    tpl=``
    ]]



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

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

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

Классический вариант

[[!msMultiCurrencyPrice? &price=`Цена товара`]]  [[!+msmc.symbol_right]]

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

{'!msMultiCurrencyPrice' | snippet : [
    'price' => `Цена товара,
    ]}

    {$_modx->getPlaceholder('msmc.symbol_right')}



msMultiCurrencyCart — сниппет для вывода корзины покупателя. Данный сниппет по параметрам полностью идентичен сниппету msCart и всего лишь обеспечивает корректный вывод цены товара, которая привязана к одной из валют, и поэтому его целесообразно использовать вместо msCart только в том случаи, если у вас есть такой товар.


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


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



Для обновления котировок по крон необходимо в него добавить задание на выполнения скрипта core/components/msmulticurrency/cron/course.php
Очень часто в день дергать этот скрипт не стоит, т.к. некоторые поставщики котировок лимитируют количество обращений к API в сутки да и котировка, как правило, обновляется 1-2 раза в сутки.


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

[[!mFilter2?
    &class=`msProduct`
    &element=`msProducts`
    &parents=`0`
    &filters=`ms|price:price`
    &tplFilter.outer.ms|price=`tpl.mFilter2.filter.slider`
    &tplFilter.row.ms|price=`tpl.mFilter2.filter.number`
    ]]


Важно! Т.к на данный момент mFilter2 не позволяет управлять своим кэшем то он будет отключен.


Разработка


Создание своего поставщика валют


Для создания своего поставщика валют необходимо поместить в директорию core/components/msmulticurrency/providers php файл с вашим классом, являющимся наследников базового класса поставщика MsMCProvider и определить его методы getCodes, getCourse и run по аналогии с уже имеющимися поставщиками. После всего этого добавьте информацию о вашем поставщике в разделе поставщиков



Системные события


msmcOnToggleCurrency — изменение пользователем валюты, содержит следующие переменные:

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


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

  1. $price — цена
  2. $newPrice — цена после конвертации
  3. $currencyId — ID валюты
  4. $course — коэффициент, на который может делиться цена


Полезные функции


getPrice — конвертация цены

/**
        * @param float $price  - Цена
        * @param int $productId   - ID товара (проверяется, привязан ли товар к одной из валют). По умолчанию  0
        * @param int $currencyId  -  ID Валюты, в которой нужно вернуть цену.  По умолчанию  0
        * @param float $course  - Коэффициент, на который  следует  поделить цену (если его указать, то функция сразу вернет результат деления).  По умолчанию  0
        * @param bool $isFormat - Выводить цену отформатированной согласно параметру miniShop2 ms2_price_format. По умолчанию true
        */
        public function getPrice($price = 0, $productId = 0, $currencyId = 0, $course = 0.0, $isFormat = true);


Пример использования функции getPrice в своем скрипте

/** @var MsMC $msmc */
        $msmc = $modx->getService('msmulticurrency', 'MsMC');
        $msmc->getPrice($price, $pid, $cid, $course, $isFormat);

msMultiCurrency 1.0.2

  • Изменено: привязка валюты к продукту

msMultiCurrency 1.0.1

  • Исправлено: Расчет общей стоимости в корзине. Требуется минимальная версия miniShop2 >= 2.4.13 pl

Последние обсуждения в сообществе MODX.pro