Вітаю на сторінках нашого сайту.
Дуже часто клієнти які використовують на своєму сайті кілька валют, задаються питанням про те як відобразити ціну товару відразу в декількох валютах в картці товару.
За замовчуванням opencart дає можливість зміни валюти тільки в шапці по всьому сайту, але дуже багато користувачів не здогадуються вибрати потрібну валюту і перемкнути сайт на неї, тому сьогодні ми поговоримо як же все таки візуально відобразити ціни в декількох валютах відразу біля основної ціни.
Приклад того що в підсумку вийде ви можете подивитися на фото нижче:
Як я вже писав раніше opencart за замовчуванням не передбачає відображення різних валют в картці товару, але функція convert присутня в класі currency:
1 |
public function convert($value, $from, $to) |
Дана функція використовуется сайтом коли ви міняєте валюту з шапки магазину, конвертація з гривні наприклад в долар відбувається наступним чином:
1 |
$this->currency->convert($product_info['price'], 'UAH', 'USD') |
Ну що ж з основними принципами розібралися тепер давайте приступимо до практики і виведемо різні валюти біля ціни.
В першу чергу хочу відзначити що всі дії ми будемо проводити на шаблоні Default, і за замовчуванням у нас стоїть валюта Гривня, а додаткові валюти це рубль і долар, ось їх ми і будемо показувати.
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, |
Ну ось в прінцип і все, тепер у нас в категорії в списку товарів поруч з ціною буде відображатися додаткова валюта, з сторінками пошуку, виробників, акцій і т.д ... робимо все по аналогії.
Загалом пробуйте, тестуйте і все у вас вийде, а якщо щось не виходить питайте в коментарях.
Немає коментарів
Ви можете залишити коментар першим.