Главная » Opencart » Выставляем нужную валюту на сайте, не изменяя ее значение по умолчанию в админке Opencart

Выставляем нужную валюту на сайте, не изменяя ее значение по умолчанию в админке Opencart

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

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

Зачем это делается? Все просто. В последнее время, как в России, так и в Украине, мы замечаем значительные изменения курса доллара относительно рубля или гривны. И каждый день корректировать цены в магазине, например с 1000 товаров становиться просто огромной рутиной, да и заниматься этим клиенты точно не будут, они сразу же прибегут к Вам и скажут, делай все так, чтобы я одним кликом мог все изменять.

Именно в таких случаях и может пригодиться данная фишка.

Сразу оговорюсь.

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

Что же нам нужно сделать?

Мы будем редактировать файл system/library/currency.php

Находим в нем строчку:

public function format($number, $currency = '', $value = '', $format = TRUE)

и заменяем ее на:

public function format($number, $currency = 'RUB', $value = '', $format = TRUE)

Если Вам нужно выставить гривны то вместо «RUB» пишите «UAH».

Все, после того как вы перезальете данный файл на сервер на сайте вы увидите нужную вам валюту, при этом в админке вы будете указывать цены в долларах или евро и одним кликом в настройках «Система» — «Локализация» — «Валюты» вы сможете изменять курс каждый день и тратить на это все несколько секунд.

Небольшая ремарка. Если вы используете фильтр товаров, то из своей практики могу сказать, что при этом решении желательно использовать FIlterPro, так как SimonFilterработает некорректно.

Надеюсь, кому-то это будет полезным.

На этом все, ждите новых уроков и подписывайтесь на обновления.

24 комментария

  1. Спасибо! выручил!

  2. Всё работает но есть недостаток в этом методе нельзя переключать валюту если сделать всё как вы написали. Хорошо бы если при выборе пользователем валюту всё же можно было менять. А так это только удобно при одной используемой валюте во фронтенде.

  3. Я сразу в статье указал этот недостаток. Но как показывает практика наши интернет предприниматели работают в большинстве случаев только с одной валютой. У меня, например, только процентов 15 заказчиков, устанавливают выбор валют. Так что метод вполне рабочий. А в Вашем случае выгоднее всего устанавливать например доллар по умолчанию, и от него уже «плясать» по различным валютам.

  4. Не пойму, зачем лезть в код? У меня тоже товары в админке в долларах, а отображаются в рублях по нужному курсу.
    Для этого нужно: 1.Поставить валюту по умолчанию Рубль (система/настройки/изменить/локализация)
    2. Система/локализация/валюты — выбрать доллар по умолчанию, указать в рублях нужный курс.
    Этим способом можно делать несколько валют, при этом если покупатель зайдет в магазин, то сразу будет отображаться цена в рублях (хотя в админке будет в долларах)

  5. Сергей, спасибо за полезную подсказку, нужно будет попробовать.

  6. появился один неудобный момент
    (валюта по умолчанию долар, на сайте гривы настроены по Ваших подсказках)
    неудобно обрабатывать заказы, они все в доларах, можно като ещё тут настроить чтобы заказы были в гривнах?

  7. Спасибо за статью! Помогла решить аналогичную проблему, без нюанса с выбором валют на сайте.
    У меня все расчеты ведутся в валюте по умолчанию, а на сайте всегда должен быть рубль. При этом у пользователя остается возможность выбрать другую валюту. Правил функцию set в том же файле:
    Было:
    public function set($currency) {
    $this->code = $currency;

    if (!isset($this->session->data[‘currency’]) || ($this->session->data[‘currency’] != $currency)) {
    $this->session->data[‘currency’] = $currency;
    }

    if (!isset($this->request->cookie[‘currency’]) || ($this->request->cookie[‘currency’] != $currency)) {
    setcookie(‘currency’, $currency, time() + 60 * 60 * 24 * 30, ‘/’, $this->request->server[‘HTTP_HOST’]);
    }
    }

    Стало:
    public function set($currency) {
    $this->code = isset($this->session->data[‘currency’]) || isset($this->request->cookie[‘currency’]) ? $currency : ‘RUB’;

    if (!isset($this->session->data[‘currency’]) || ($this->session->data[‘currency’] != $this->code)) {
    $this->session->data[‘currency’] = $this->code;
    }

    if (!isset($this->request->cookie[‘currency’]) || ($this->request->cookie[‘currency’] != $this->code)) {
    setcookie(‘currency’, $this->code, time() + 60 * 60 * 24 * 30, ‘/’, $this->request->server[‘HTTP_HOST’]);
    }
    }

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

  9. А если не на все товары необходимо в аминке указывать в долларах например только на некоторые а на остальные в рублях …. а выводилось все на сайте для пользователей только в рублях …..как быть???? подскажите …… 1 поставщик в долларах предоставляет прайс другие же в рублях …..

  10. Спасибо

  11. Artmag, в опенкарт только одна валюта может идти по-умолчанию.

  12. А есть какие-то варианты по расширению?
    Ситуация следующая. Есть несколько поставщиков.
    Часть работает по текущему курсу евро, часть по доллару, еще кто-то по «своему» курсу.
    Получается, что прайсы у всех в «у.е.», но по разным позициям это у.е. может быть разным.
    Спасибо.

  13. Спасибо всё получилось — но возникла проблема при выписке счёта — колво 1 … и цена в ДОЛЛАРЕ а итого — в гривне

    Чехол Rock Elegant Series для Samsung Galaxy Tab S 8.4 1 16.00 16.00
    Сумма: 411 грн.
    Итого: 411 грн

    И как сделать что бы были гривны и тут?
    И при изменении заказа в админке меняется на доллар — при оформлении в гривне — заходиш изменить … сохрать пересчитывает в доллар

  14. oleg, этот метод не идеальный. Как решить Вашу проблему пока не знаю. Как вариант пишите в грн. А в поле наличие, пишите фразу «Уточняйте наличие и цену», или же как делают большинство моих клиентов пишут фразу «В связи с нестабильным курсом цены могут изменяться….»

  15. Евгений, в таком формате использовать это решение не удаться. разве Вы будете выставлять коэффициент на цены с помощью Batch Edithor ну это уже ручная работа.

  16. Спасибо огромное. Сейчас валюта прыгает(( Устал свои (всего-то 300 товаров) обновлять ежедневно. Все работает корректно.

  17. Спасибо! Ваш метод действительно помог! С этим скачущим курсом одна морока…

    Но возник такой нюанс: в некоторых браузерах в карточке товара стала опять появляться цена в долларах. Хотя везде на сайте отображается гривна (и в корзине, и в категориях и т.д.). В чем причина?

  18. Ненадо ничего менять в коде Сергей прав.

    Сергей Июль 31, 2014
    Не пойму, зачем лезть в код? У меня тоже товары в админке в долларах, а отображаются в рублях по нужному курсу.
    Для этого нужно: 1.Поставить валюту по умолчанию Рубль (система/настройки/изменить/локализация)
    2. Система/локализация/валюты — выбрать доллар по умолчанию, указать в рублях нужный курс. Тут нужно разжевать доллар делаем 1.00000 а рубль например 50,00000
    Этим способом можно делать несколько валют, при этом если покупатель зайдет в магазин, то сразу будет отображаться цена в рублях (хотя в админке будет в долларах)

  19. В файле «system/library/currency.php»
    Нходим код
    if (isset($this->request->get[‘currency’]) && (array_key_exists($this->request->get[‘currency’], $this->currencies))) {
    $this->set($this->request->get[‘currency’]);
    } elseif ((isset($this->session->data[‘currency’])) && (array_key_exists($this->session->data[‘currency’], $this->currencies))) {
    $this->set($this->session->data[‘currency’]);
    } elseif ((isset($this->request->cookie[‘currency’])) && (array_key_exists($this->request->cookie[‘currency’], $this->currencies))) {
    $this->set($this->request->cookie[‘currency’]);
    } else {
    //$this->set($this->config->get(‘config_currency’)); //закрываем
    $this->set(‘UAH’); //указываем валюту по умолчанию, при этом работает выбор валюты на сайте и

    }

  20. А если клиент хочет в админке указывать одну из двух валют, но выводить в одной, можете подсказать что делать?

  21. То что надо. Большое спасибо

  22. Павел, внимательно прочитайте статью, она как раз решает Вашу задачу.

  23. Спасибо Помог мне очень, а ты можешь поделиться FIlterPro Пожалуйста?

  24. Все модули покупают клиенты, сейчас работаю исключительно с лицензией.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *