Ubercart — ввод цен в валюте, вывод — в рублях

Задача распространенная для бизнеса на территории РФ, где многие перепродают товары из-за рубежа. Получается, что отпускные цены зависят от колебания валют, т.к. продавать надо за рубли. День менеджера может начинаться с актуализации цен в прайсах.

Популярный модуль интернет-магазина Ubercart позволяет настроить валюту общую для всех товаров магазина. В этой валюте цены вводятся в базу и в ней же выводятся для пользователя. А хотелось бы вводить цены в экспортной валюте (своей для каждого случая), а выводить в местной, в той что товар отпускается для потребителя.

Начал поиск готового решения. Народ что то делал для решения этой задачи, но почему то пишут, что пришлось перелопатить кучу родных модулей уберкарта. Это закономерно приводит к невозможности штатного обновления Ubercart, превращая его в отдельно стоящую модификацию модуля. Мне такой вариант не нужен, придется делать что то самому :)

Тезисно сформулируем задачу.

  • Загрузка курсов валют с cbr.ru
  • Возможность задания цены как в рублях, так и в одной из валют (пусть это будут -EUR и USD).
  • Пересчет цен товаров при актуализации курса, где задана цена в валюте.
  • (бонус) Вывод блока с курсами валют на сайте.

Надо заметить, что Ubercart в моём случае имеет версию 2.12, а Drupal — 6. Возможно, для Ubercart версии 3 задача вообще не стоит, это надо отдельно смотреть, не знаю так ли это. :) Потому, если у вас сайт в стадии проектирования, и вы решили использовать Ubercart — посмотрите, что можно или нельзя делать посредством 3-й версии. Мне же надо было внести изменения в существующий проект.

Как обычно, все функции пишем в рамках какого то модуля — у нас это будет shra_contribution (складываю всё доп. программирование в Drupal в модуль «Вклад Шра»). Вы, естественно, переименуете функции так как вам нужно, если вдруг захотите использовать.

Загрузка курсов с cbr.ru

Пример, как можно читать курсы с cbr.ru, я уже приводил, сейчас используем это код в программе. Нам понадобятся две функции — одна возвращает полный список курсов, другая — курс только указанной валюты (все курсы идут по отношению к рублю).

Дополняем поля для типа публикации Product

Чтобы задавать цены в валюте, нужно добавить пару полей в тип публикации product. Одно поле — цена в валюте, второе — тип валюты. У меня в списке будет — USD и EUR. Вы можете расширить список, используя обозначения валют, используемых центробанком.

Дополнительные поля для задания цены в валюте

Дополнительные поля для задания цены в валюте

Я сгруппировал поля с помощью модуля Fieldgroup, это дань эстетике, для работы значения не имеет. Как видно — цена в валюте, это поле для задания числа с плавающей запятой, простое текстовое поле. Поле для выбора типа валют — список (select), где надо будет задать список значений :

Список значений валют

Список значений валют

После этих манипуляций получим блок значений в форме редакторе публикаций типа product вроде того, что на картинке:

Блок с параметрами цены в валюте в редакторе товара

Блок с параметрами цены в валюте в редакторе товара

Дальше нам нужно, чтобы при вводе цены в валюте рассчитывалась цена в рублях в штатном поле ubercart. Не буду делать это «на лету», запрограммирую хук drupal, чтобы значение вычислялось при сохранении публикации.

Обновление цен при смене курса

Также нам понадобится обновление цены при получении данных о новом курсе. Она вызывается каждый раз из _shra_contribution_courses() при обновлении курсов.

Бонус — блок с курсами валют

Ну и как бонус — запрограммируем блок с выводом курсов валют, раз уж все возможности для реализации такого блока у нас имеются. Я приведу и кусочек каскадных стилей, чтобы вам было от чего отталкиваться при настройке в вашем окружении.

Внешний вид блока с валютами

Внешний вид блока с валютами



А вот каскадные стили. Обратите внимание на объявление — #block-shra_contribution-7. ID нужно прописать для вашего случая (имя модуля, номер блока).

Остались ещё вопросы? — Айда в комменты.

Написать комментарий

Мало букафф? Читайте есчо !

Ошибка запуска Cron

Сентябрь 23, 2016 г.

Что делать, если запуск Cron в Drupal 6 постоянно выдаёт такую ошибку -  "Cron run failed."? Смотрим, как возникает данная ситуация в библиотеке /includes/common.inc . Функция drupal_cron_run() использует флаг для блокировки одновременного запуска: [crayon-66061c6af13b7880950393/] ...

Читать

Drupal Commerce - расчет доставки для выбранного района

Август 26, 2021 г.

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

Читать

 

Комментарии к «Ubercart — ввод цен в валюте, вывод — в рублях»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Ubercart — ввод цен в валюте, вывод — в рублях”

  1. Мила:

    А как всю эту фигню отключить, она постоянно ошибку выдает?

  2. Shah:

    Здравтсвуйте, Вы это сделали в виде модуля? Нельзя ли скачать готовый? Для ubercert 3 не реализовывали?

  3. Этот код был реализован как часть модуля (у меня он назывался shra_contribution). Отдельного модуля не делал.
    Скопируйте кусочки кода в свой модуль или создайте отдельный модуль, переименуйте функции. Отдельно подключите css или в тему или в модуль.
    Должно работать :)

  4. Shah:

    Спасибо, попробую :) Еще кое-что для 3 нашла. Буду смотреть.

  5. Shah:

    Юрий, снова здравствуйте. Вас интересует работа с интернет-магазином на ubercart 2? Если да, давате по е-майл обсудим?