Вітаю на сторінках нашого сайту.
Дуже часто клієнти які використовують на своєму сайті кілька валют, задаються питанням про те як відобразити ціну товару відразу в декількох валютах в картці товару.
За замовчуванням 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,
|
Ну ось в прінцип і все, тепер у нас в категорії в списку товарів поруч з ціною буде відображатися додаткова валюта, з сторінками пошуку, виробників, акцій і т.д ... робимо все по аналогії.
Загалом пробуйте, тестуйте і все у вас вийде, а якщо щось не виходить питайте в коментарях.
Немає коментарів
Ви можете залишити коментар першим.