Opencart - Отображать Несколько Валют Для Цены На Карточке Продукта (товара)

Тема в разделе "Модули и дополнения", создана пользователем admin, 24 июн 2016.

  1. TopicStarter Overlay
    Offline

    admin Команда форума Администратор

    Сообщения:
    2.317
    Симпатии:
    75.813
    Репутация:
    170
    Иногда хочется вывести пользователю цену на продукт в разных валютах. На ровне с рублём, показать рядышком ещё и автоматически конвертированную цену в евро или долларах.

    Это не реализовано в стандартной сборке, но в классе currency есть встроенная функция convert:

    Код:
    public function convert($value, $from, $to)
    Она используется, когда вы выбираете сменить валюту в шапке сайта на Opencart. Конвертация из рублей в доллары происходит так:

    Код:
    $this->currency->convert($product_info['price'], 'RUS', 'USD')
    1. Реализуем вывод цены в евро (аналогично для долларов) на странице карточки товара.
    (по умолчанию используем валюту рубли). Не забудьте, что в backend'е Opencart надо добавить и включить валюту доллара.

    1)catalog/view/theme/default/template/product/product.tpl (около 38-й строки):

    Код:
    <span><?php echo $price; ?></span>
    <span id="price_2"><?php echo $price_2; ?></span>
    2) Дальше в 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'] = "(&euro; ".round($this->currency->convert($product_info['price'], 'RUB', 'EUR'), '2').")";
    } else {
    $this->data['price'] = false;
    }
    Функция round(...) округляет цену до значения '2' (2 цифры после запятой).

    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'] = "(&euro; ".round($this->currency->convert($product_info['price'], 'RUB', 'EUR'), '2').")";
    } else {
    $price = false;
    }
    (35 строка):
    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'] = "(&euro; ".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'] = "(&euro; ".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'] = "(&euro; ".round($this->currency->convert($result['special'], 'RUB', 'EUR'), '2').")";
    } else {
    $special = false;
    }
    4. Выводим цену в евро для страницы категории с товарами.
    То, о чём обсуждали в комментариях, пишу по порядку (потому что было 3 похожих вопроса уже).

    1)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 />
    2) catalog/controller/product/category.php

    (примерно 163-173 строки)
    Код:
    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'] = "(&euro; ".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'] = "(&euro; ".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);
     
  2. Offline

    Coskun Пользователь

    Сообщения:
    3
    Симпатии:
    0
    Репутация:
    0
    this modification not working 2.3.x
    pls upgrade for 2.3.x ?