msMultiCurrency

Мультивалютность для miniShop2
Автор дополнения
Prihod
Пакетов
13
Закачек
2 831
Обычно отвечает в течение 4 часов
Автор дополнения
Пакетов
13
Закачек
2 831
Обычно отвечает в течение 4 часов
Версия 1.0.3-beta
Дата выпуска 02.11.2018
Загрузки 42
Просмотры 1 074
Внимание, этот компонент требует версию 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.3

  • Добавлено: Наборы значений валюты ВАЖНО! Перед обновлением не забывайте сделать бэкап базы данных. После обновления необходимо очистить кэш браузера

msMultiCurrency 1.0.2

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

msMultiCurrency 1.0.1

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

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