OpenCart: отображать несколько валют для цены на карточке продукта (товара)
Это не реализовано в стандартной сборке, но в классе currency есть встроенная функция convert:
public function convert($value, $from, $to)
Она используется, когда вы выбираете сменить валюту в шапке сайта на Opencart. Конвертация из рублей в доллары происходит так:
$this->currency->convert($product_info['price'], 'RUS', 'USD')
1. Реализуем вывод цены в евро (аналогично для долларов) на странице карточки товара.
(по умолчанию используем валюту рубли). Не забудьте, что в backend'е Opencart надо добавить и включить валюту доллара.
catalog/view/theme/default/template/product/product.tpl
(около 38-й строки):<span><?php echo $price; ?></span> <span id="price_2"><?php echo $price_2; ?></span>
catalog/controller/product/product.php
(строка 227):if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $this->data['price'] = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); $this->data['price_2'] = "(€ ".round($this->currency->convert($product_info['price'], 'RUB', 'EUR'), '2').")"; } else { $this->data['price'] = false; }
2. Реализуем вывод цены в евро в модуле рекомендуемых товаров (featured).
Нисколько не сложнее.
1)catalog/view/theme/default/template/module/featured.tpl
(после 14-й строки в двух местах добавить):
<div class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <span id="price_2"><?php echo $price_2; ?></span> <?php } else { ?> <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> <span id="price_2"><?php echo $price_2_special; ?></span> <?php } ?> </div>
2) Дальше в catalog/controller/module/featured.php
(строка 29):
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax'))); $this->data['price_2'] = "(€ ".round($this->currency->convert($product_info['price'], 'RUB', 'EUR'), '2').")"; } else { $price = false; }
if ((float)$product_info['special']) { $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax'))); $this->data['price_2_special'] = "(€ ".round($this->currency->convert($product_info['special'], 'RUB', 'EUR'), '2').")"; } else { $special = false; }
3. Реализуем вывод цены в евро в модуле последних добавленных товаров (latest)
Аналогично как и для рекомендованных товаров.
1)catalog/view/theme/default/template/module/latest.tpl
(после 12-й строки в двух местах добавить):
<div class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <span id="price_2"><?php echo $price_2; ?></span> <?php } else { ?> <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> <span id="price_2"><?php echo $price_2_special; ?></span> <?php } ?> </div>
2) Дальше в catalog/controller/module/latest.php
Здесь только название переменной принято $result, поэтому подстраиваемся (и в районе 32 строки заменяем на ):
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'))); $this->data['price_2'] = "(€ ".round($this->currency->convert($result['price'], 'RUB', 'EUR'), '2').")"; } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); $this->data['price_2_special'] = "(€ ".round($this->currency->convert($result['special'], 'RUB', 'EUR'), '2').")"; } else { $special = false; }
4. Выводим цену в евро для страницы категории с товарами.
catalog/view/theme/default/template/product/category.tpl
(район 78-88 строк)<div class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <span id="price_2"><?php echo $price_2; ?></span> <?php } else { ?> <span class="price-old"><?php echo $product['price']; ?></span> <span class="price-new"><?php echo $product['special']; ?></span> <span id="price_2"><?php echo $price_2_special; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <br />
catalog/controller/product/category.php
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'))); $this->data['price_2'] = "(€ ".round($this->currency->convert($result['price'], 'RUB', 'EUR'), '2').")"; } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); $this->data['price_2_special'] = "(€ ".round($this->currency->convert($result['special'], 'RUB', 'EUR'), '2').")"; } else { $special = false; }
(район 67-70 строк)
$category_id = array_pop($parts); } else { $category_id = 0; } $product_info = $this->model_catalog_product->getProduct($product_id); $this->data['product_info'] = $product_info; $category_info = $this->model_catalog_category->getCategory($category_id);
almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.
Вы можете почитать все статьи от almix'а.
- 0 Opencart: Скидки для пользователей, надо указывать в колонке "количество" значение, отличное от нуля! (02.07.2014)
- 0 Как оперативно создать интернет-магазин на основе шаблона OpenCart? (05.06.2014)
- 0 Opencart: Установка мета тега Keywords для главной страницы через админку (05.12.2013)
- 0 Opencart: война модулей FilterPro mega, Intelligent Product Labels, AStickers - Ajax стикеры (24.10.2013)
- 0 Opencart: Модуль Filter Product OpenCart_v1.5.x: Как скрывать недоступные опции в фильтре (23.10.2013)
- 0 Ошибка xml файла Opencart для Яндекс Маркета: <b>Notice</b>: iconv(): Detected an illegal character in input string... (04.09.2013)
- 0 Opencart: Выводить изображения подкатегорий на странице категории. (11.07.2013)
- 0 Opencart: Вывод атрибутов вместо описания в категориях. (23.10.2013)
- 0 Opencart: Обновление движка с версии 1.4.9 до 1.5.1.3! (05.02.2015)
- 0 Opencart: Вставляем имя покупателя в модуле JV_QuickOrder - быстрый заказ товара (22.04.2013)
- 0 OpenCart: Fancybox (или colorbox)+"cloud-zoom" одновременно. Значок-ссылка поверх изображения товара на просмотр в полный вид (03.06.2013)
- 0 OpenCart: Делаем шаблон растягиваемым и добавляем отступы. (10.01.2014)
- Как включить SSL и сделать редирект на HTTPS. На примере Opencart 2 (03.12.2017)
- Opencart 2: Цена за квадратный метр, за штуку и др. (05.10.2017)
- Opencart 2: Cлайдер Owl Carousel в OcStore 2.1.0.2. Что делать, если слайдер не работает? (10.05.2017)
- Opencart 2: Добавляем новую позицию в макет для вывода модуля (27.04.2017)
- SEO оптимизация хлебных крошек breadcrumbs в Opencart 2 (27.04.2017)
- Opencart 2: Закладки без регистрации (Wishlist without registration) (26.04.2017)
- Opencart 2: сделать разные валюты в админке и на сайте (24.04.2017)
- Opencart 2: OCMOD замена нескольких строк (12.04.2017)
- Как установить расширение в Opencart 2 (27.04.2017)
- Загрузка файлов (картинок) по ajax через форму для Opencart (04.09.2016)
- Opencart: Как не показывать какой-либо товар в списке на странице производителей? (29.07.2015)
- Порядок баннеров в Opencart (15.05.2015)
- Устанавливаем ionCube Loader на MAMP за пару минут. (06.02.2015)
15 комментариев
Все работает отлично!
А подскажите еще как это сделать для категории товаров? Заранее благодарю!
@Антон, то же самое добавляйте в код для категорий.
catalog/view/theme/default/template/product/category.tpl (около 89-й строки):
catalog/controller/product/category.php (около 173-й строки):
добавил объяснение в статью.Пишет
Undefined variable: product_info
Подскажите как вывести в категориях. Вы писали что вводить тоже самое что и в product.php
$this->data['price_2'] = "(€ ".round($this->currency->convert($product_info['price'], 'RUB', 'EUR'), '2').")";
но выдает ошибку так как там нет данных $product_info['price'], . Вопрос актуален как вывести тоже самое в категориях. Спасибо
Игорь и Антон, воткните в catalog/controller/product/category.php куда-н. около 70 строки:
$product_info = $this->model_catalog_product->getProduct($product_id);
$this->data['product_info'] = $product_info;
Посмотрите это из catalog/controller/product/product.php (строка 94).
добавил объяснение в статью.
Простите almix, а можно инструкцию полностью, а то я уже запутался говорите вводите тоже самое и ниже даете вообще другой код (я попробовал только его вставить и ничего не выводится)
заранее спасибо за ответ
Макс, в статье жирным указаны строки. price_2 это то же что price, только конвертируется. Я дал код, В КОТОРЫЙ НАДО ДОБАВЛЯТЬ "то же самое"!!! Примерные места в коде, а добавлять то, что в статье для продуктов, теперь вам то же самое для категорий надо проделать. Комментарий #598 не забудьте.
добавил объяснение в статью.
Подскажите пожалуйста, а как сделать так чтобы вторая валюта между тысячами пробел имела?
Сделал в {admin,catalog}/language/russian/russian.php
decimal_point, thousand_point
поставил пробел. Но в стандартной цене тысячи разделяются а в вашем коде нет.