Приветствую на страницах нашего сайта.
Очень часто клиенты которые используют на своем сайте несколько валют, задаются вопросом о том как отобразить цену товара сразу в нескольких валютах в карточке товара.
По умолчанию opencart дает возможность смены валюты только в шапке по всему сайту, но очень многие пользователи не догадываются выбрать нужную валюту и переключить сайт на нее, по этому сегодня мы поговорим как же все таки визуально отобразить цены в нескольких валютах сразу возле основной цены.
Пример того что в итоге получится вы можете посмотреть на фото ниже:
Как я уже писал ранее opencart по умолчанию не предусматривает отображение разных валют в карточке товара , но функция convert присутствует в классе currency:
1 |
public function convert($value, $from, $to) |
Данная функция используется движком когда вы меняете валюту из шапки магазина, конвертация из гривни к примеру в доллар происходит следующим образом:
1 |
$this->currency->convert($product_info['price'], 'UAH', 'USD') |
Ну что же с основными принципами разобрались теперь давайте приступим к практике и выведем разные валюты возле цены.
В первую очередь хочу отметить что все действия мы будем производить на дефолтном шаблоне , и по умолчанию у нас стоит валюта Гривна, а дополнительные валюты это рубль и доллар, вот их мы и будем показывать.
1. Выводим разные валюты в карточку товара:
Изменения будем вносить в два файла:
1 2 |
catalog/view/theme/default/template/product/product.tpl catalog/controller/product/product.php |
и так открываем файл product.tpl и в нем ищем код который отвечает за отображение цены а именно:
1 |
<?php echo $price; ?> |
И после него добавляем код:
1 2 3 4 |
//Для доллара: <span id="price_2"><?php echo $price_2; ?></span> //Для Рубля: <span id="price_3"><?php echo $price_3; ?></span> |
Если вам нужно выводить только что то одно то просто указываем нужную стоку.
Таким образом мы добавили вывод цены для стандартной цены в которой нет акций.
Теперь нам нужно еще добавить вывод для цен в которых указанна аукционная цена, в том же файле находим код:
1 |
<span class="price-old"><?php echo $price; ?></span> <span class="price-new"><?php echo $special; ?></span> |
И после него добавляем:
1 2 3 4 |
//Для доллара: <span class="price-old"><?php echo $price_2; ?></span> <span class="price-new"><?php echo $special_2; ?></span> //Для рубля: <span class="price-old"><?php echo $price_3; ?></span> <span class="price-new"><?php echo $special_3; ?></span> |
Все с файлом product.tpl мы закончили, тем самым мы добавили вывод цены в двух дополнительных валютах.
Теперь нам нужно еще откорректировать файл product.php.
и так открываем его и ищем код:
1 |
$this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); |
который отвечает за нашу цену по умолчанию и после него добавляем:
1 2 |
$this->data['price_2'] = "($".round($this->currency->convert($product_info['price'], 'UAH', 'USD'), '2').")"; $this->data['price_3'] = "(".round($this->currency->convert($product_info['price'], 'UAH', 'RUB'), '0')." руб.)"; |
Таким образом мы указали что нам нужно отобразить дополнительную цену, но это только опять же касается только цены которая без акции, а чтобы дополнительные валюты показывались еще и в товарах с акцией находим код:
1 |
$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax'))); |
И после него добавляем:
1 2 |
$this->data['special_2'] = "($".round($this->currency->convert($product_info['special'], 'UAH', 'USD'), '2').")"; $this->data['special_3'] = "(".round($this->currency->convert($product_info['special'], 'UAH', 'RUB'), '2')." руб.)"; |
В данных строчках кода функция round(...) позволяет округлить цены до значения 2, вы же можете указать 0 если не хотите после запятой показывать копейки.
Вот в принципе и все , теперь у нас в карточке товара будет отображаться стоимость товара как в цене по умолчанию ( гривне) так и в дополнительных валютах доллар и рубль пример на фото выше.
и так с карточкой товара мы закончили, но у нас есть еще много других мест где отображается цена, давайте рассмотрим другие места вывода валюты цен.
Давайте отобразим несколько наших валют в модулях к примеру новинки, рекомендуемые, хити продаж и т. д... для всех них принцип одинаков, по этому возмем за основу модуль новинки, для всех остальных действия аналогичные.
2. Показываем разные валюты цены в модулях( Новинки)
Изменения будем вносить в два файла:
1 2 |
catalog/view/theme/default/template/module/latest.tpl catalog/controller/module/latest.php |
Первым делом открываем файл latest.tpl и в нем укажем место где мы будем выводить нашу цену, находим первый код:
1 |
<?php echo $product['price']; ?> |
и после него добавляем следующее:
1 2 |
<span id="price_2"><?php echo $price_2; ?></span> <span id="price_3"><?php echo $price_3; ?></span> |
Таким образом вы вывели отображение дополнительной цены валюты в нужном нам месте модуля, для цены которая не имеет акции, теперь находим кусок кода который отвечает за аукционную цену:
1 |
<span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> |
И после него добавим нужные нам валюты:
1 2 |
<span id="price_2"><?php echo $price_2_special; ?></span> <span id="price_3"><?php echo $price_3_special; ?></span> |
Все теперь можно приступить и к самому контролеру, то есть открываем файл latest.php, и в нем ищем вывод цены, после которого и нам нужно добавить кусок нужного нам кода:
И так находим:
1 2 |
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))); |
И после добавляем код:
1 2 |
$this->data['price_2'] = "($".round($this->currency->convert($result['price'], 'UAH', 'USD'), '2').")"; $this->data['price_3'] = "(".round($this->currency->convert($result['price'], 'UAH', 'RUB'), '2')."руб.)"; |
Теперь нам нужно сделать все то же самое и для аукционной цены, находим код:
1 2 |
if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); |
И после него добавляем:
1 2 |
$this->data['price_2_special'] = "($".round($this->currency->convert($product_info['special'], 'UAH', 'USD'), '2').")"; $this->data['price_3_special'] = "(".round($this->currency->convert($product_info['special'], 'UAH', 'RUB'), '2')."руб.)"; |
Ну вот в принципе и все, теперь у вас в модуле новинки будет отображаться цена в разных валютах, другие модули делаете по аналогии.
ВАЖНО: в некоторых других модулях используйте $product_info вместо $result все остальное по аналогии.
Теперь нам нужно сделать еще возможность отображения валют в категориях, поиске, странице акций, производителях и т.д...
За пример мы берем именно страницу категорий товара, остальное делаем так же.
И так давайте сделаем отображение валюты в категории товаров.
3. Показываем разные валюты цены в категории товаров
В категории мы будем использовать немного другой код для отображения дополнительной валюты, но тоже ничего нет сложного.
Изменения будем вносить в два файла а именно в:
1 2 |
catalog/view/theme/default/template/product/category.tpl catalog/controller/product/category.php |
Ну что же приступим.
Открываем файл category.tpl и ищем вывод цены товара без акции:
1 |
<?php echo $product['price']; ?> |
после данного кода добавляем:
1 2 |
<br>( <span id="price_2"><?php echo $product['price_2']; ?></span> / <span id="price_3"><?php echo $product['price_3']; ?></span> ) |
Для отображения валюты к товарам с акцией ищем код:
1 |
<span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> |
И после него добавляем:
1 2 |
<br>( <span id="price_2"><?php echo $product['price_2_special']; ?></span> / <span id="price_3"><?php echo $product['price_3_special']; ?></span> ) |
Все с файлом category.tpl закончили, теперь приступим к контролеру, и так открываем файл category.php и ищем код:
1 |
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))); |
и после него добавляем:
1 2 3 |
// Дополнительная валюта $price_2 = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), 'USD'); $price_3 = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), 'RUB'); |
Там же немного ниже после кода:
1 |
$price = false; |
Добавляем:
1 2 |
$price_2 = false; $price_3 = false; |
Теперь все тоже самое нам нужно добавить и для товара с акционной ценой, ищем чуть ниже код:
1 |
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); |
и после него добавляем:
1 2 3 |
// Дополнительная валюта для акций $price_2_special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), 'USD'); $price_3_special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), 'RUB'); |
И немного ниже после кода:
1 |
$special = false; |
Добавляем следующее:
1 2 |
$price_2_special = false; $price_3_special = false; |
Далее опускаемся ниже и ищем код:
1 |
'price' => $price, |
и сразу после него добавляем:
1 2 3 4 5 |
// Дополнительная валюта 'price_2' => $price_2, 'price_3' => $price_3, 'price_2_special' => $price_2_special, 'price_3_special' => $price_3_special, |
Ну вот в принцыпе и все, теперь у нас в категории в списке товаров рядом с ценой будет отображатся дополнительная валюта, с страницами поиска , производителей, акций и.т.д... делаем все по аналогии.
Общим пробуйте , тестируйте и все у вас получится, а если что не получается спрашивайте в комментариях.
5 комментариев
Я извиняюсь, а как это будет в корзине отображаться?
В корзине будет отображена та валюта, которая выбрана в самом магазине, данный пример только выводит для отображения цены в других валютах!
А есть какое-либо решение что -бы в корзине отображать 2 цены. Будь то 2 валюты, или «акционная» ценна и оригинальная.
Только делать отдельно. Там больше правок нужно делать , так как проверок больше чем в отображении самой карточки! Хотя если поискать в сети то возможно и какой то готовый модуль найти можно, мне такой кажись не встречался!
Добрый день, в Open Cart 3.0.2 в файлах twig нет этих строк, которые указаны в примерах, как настраивать?