Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

отображение двух валют в opencart


 Поделиться

Рекомендованные сообщения

вам вот такое надо?

64a00-clip-121kb.jpg?nocache=1

отображается в модулях, каталоге, карточке товара, сравнении, производители

Ссылка на комментарий
Поделиться на других сайтах

контроллер

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_'] = $product_info['price'];
} else {
$this->data['price'] = false;
$this->data['price_usd'] = false;
}

и в таком же стиле остальные цены

карточка товара

     <?php if ($price) { ?>
      <div class="price"><?php echo $text_price; ?> 
      
        <?php if (!$special) { ?>
        
        <?php echo $price; ?><?php echo ' ($'. round($price_usd,0) . ') '; ?>
        
        <?php } else { ?>
        <span class="price-old"><?php echo $price; ?><?php echo ' ($'. round($price_usd,0) . ') '; ?></span> <span class="price-new"><?php echo $special; ?><?php echo ' ($'. round($special_usd,0) . ') '; ?></span>
        <?php } ?>
        <br />
        <?php if ($points) { ?>
        <span class="reward"><small><?php echo $text_points; ?> <?php echo $points; ?></small></span><br />
        <?php } ?>
        <?php if ($discounts) { ?>
        <br />
        <div class="discount">
          <?php foreach ($discounts as $discount) { ?>
          <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><?php echo ' ($'. round($discount['price_usd'],0) . ') '; ?><br />
          <?php } ?>
        </div>
        <?php } ?>
      </div>
      <?php } ?>

результат

04905-clip-84kb.jpg?nocache=1

Ссылка на комментарий
Поделиться на других сайтах

Блин, проделал всё как написано: /public_html/catalog/view/theme/default/template/product/product.tpl

<div class="price"><?php echo $text_price; ?>
        <?php if (!$special) { ?>
        <?php echo $price; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $price; ?><?php echo ' ($'. round($price_byr,0) . ') '; ?></span> <span class="price-new"><?php echo $special; ?><?php echo ' ($'. round($special_byr,0) . ') '; ?></span>
        <?php } ?>
        <br />
        <?php if ($tax) { ?>
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $tax; ?></span><br />
        <?php } ?>
        <?php if ($points) { ?>
        <span class="reward"><small><?php echo $text_points; ?> <?php echo $points; ?></small></span><br />
        <?php } ?>
        <?php if ($discounts) { ?>
        <br />
        <div class="discount">
          <?php foreach ($discounts as $discount) { ?>
          <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><?php echo ' ($'. round($discount['price_byr'],0) . ') '; ?><br />
          <?php } ?>
        </div>

/public_html/catalog/controller/product/product.php

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_'] = $product_info['price'];
			} else {
				$this->data['price'] = false;
                                $this->data['price_byr'] = false;
			}
						
			if ((float)$product_info['special']) {
				$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
			} else {
				$this->data['special'] = false;
			}
			
			if ($this->config->get('config_tax')) {
				$this->data['tax'] = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']);
			} else {
				$this->data['tax'] = false;
			}
			
			$discounts = $this->model_catalog_product->getProductDiscounts($this->request->get['product_id']);
                        $this->data['price_'] = $this->currency->convert($product_info['price'], 'EUR', 'BYR'); 
			
			$this->data['discounts'] = array(); 
			
			foreach ($discounts as $discount) {
				$this->data['discounts'][] = array(
					'quantity' => $discount['quantity'],
					'price'    => $this->currency->format($this->tax->calculate($discount['price'], $product_info['tax_class_id'], $this->config->get('config_tax')))
				);
			}

Цена как было в евро, так и осталась :| . Блин не врубаюсь почему.

Может когда я удалял из шаблона смену валюты нечаянно удалил функцию конвертации? И ещё вопросик:

 

$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_'] = $product_info['price'];
            } else {
                $this->data['price'] = false;
                $this->data['price_byr] = false;

Переменные должны быть разными?

Ссылка на комментарий
Поделиться на других сайтах


Переменные должны быть разными?

не, там usd потерялся)) правильно вот так 

$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_byr'] = $product_info['price'];
} else {
$this->data['price'] = false;
$this->data['price_byr'] = false;

в библиотеке валюты изменения вносили? я как то упустил этот момент

if ($currency == 'BYR')

по настройке: в параметрах локализации поставить EUR, переключатель валют можно удалить, он все равно не будет работать

Ссылка на комментарий
Поделиться на других сайтах

Переменную изменил. Всё равно одна цена в евро((

if ($currency == 'BYR')

А вот тут если можно поподробней)) Это в файле /public_html/system/library/currency.php ?

Что туда добавить?

 

 

по настройке: в параметрах локализации поставить EUR, переключатель валют можно удалить, он все равно не будет работать

 

В настройках евро стоит по умолчанию, BYR включен, конвертация в админке правильная. Переключатель валют давно уже удалил.

Ссылка на комментарий
Поделиться на других сайтах


делал давно, вот что нашел у себя в склерознике:

 
Дано: магазин в Белоруси, цены в админке в USD.
Необходимо: в магазине отображать цены в белорусских рублях с округлением до 1 тысячи, а рядом ,в скобках, цены в USD.
Реализация:
1. …\system\library\currency.php устанавливаем валюту по умолчанию BYR
$this->set($this->config->get('config_currency'));

меняем на

$this->set('BYR');

2. в этом же файле ,…\system\library\currency.php, делаем округление до 1 тысячи

$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

меняем на

if ($currency == 'BYR')
$string .= number_format(round($value, -3), (int)$decimal_place, $decimal_point, $thousand_point);
else
{
$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

После этих изменений цена в магазине будет отображаться только в BYR, округление будет до 1 тысячи, выбор валют перестанет работать, так что его можно удалить в шаблоне. Сделанные изменения могут работать независимо друг от друга.

 

 

Ссылка на комментарий
Поделиться на других сайтах

Всё, удалось вывести 2 цену. А проблема была в том, что в файле product.tpl

<div class="price"><?php echo $text_price; ?>
        <?php if (!$special) { ?>
        <?php echo $price; ?> ВОТ ТУТ Я ЗАБЫЛ ДОБАВИТЬ <?php echo $price_byr; ?>
        <?php } else { ?>
        <span class="price-old"><?php echo $price; ?><?php echo ' ($'. round($price_byr,0) . ') '; ?></span> <span class="price-new"><?php echo $special; ?><?php echo ' ($'. round($special_byr,0) . ') '; ?></span>
        <?php } ?>
        <br />
        <?php if ($tax) { ?>
        <span class="price-tax"><?php echo $text_tax; ?> <?php echo $tax; ?></span><br />
        <?php } ?>
        <?php if ($points) { ?>
        <span class="reward"><small><?php echo $text_points; ?> <?php echo $points; ?></small></span><br />
        <?php } ?>
        <?php if ($discounts) { ?>
        <br />
        <div class="discount">
          <?php foreach ($discounts as $discount) { ?>
          <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><?php echo ' ($'. round($discount['price_byr'],0) . ') '; ?><br />
          <?php } ?>
        </div>

Теперь вылезла другая проблема. Как у тебя реализованы пробелы в стоимости с б. рублях?

Ссылка на комментарий
Поделиться на других сайтах


а где в настройке валют руб. ? Может я не правильно выразился. Я имел в виду, что у меня к примеру цена выглядит 12345000, а хотелось бы 12 345 000 .

Ссылка на комментарий
Поделиться на других сайтах


а где в настройке валют руб. ? Может я не правильно выразился. Я имел в виду, что у меня к примеру цена выглядит 12345000, а хотелось бы 12 345 000 .

 

...\catalog\language\russian\russian.php

$_['thousand_point']        = ' ';
Ссылка на комментарий
Поделиться на других сайтах

 

...\catalog\language\russian\russian.php

$_['thousand_point']        = ' ';

 

Поставил

 

$_['thousand_point']        = 'ВОТ ТУТ ПРОБЕЛ ';

 

Ничего не поменялось.. Видимо срабатывет только для первой цены. Почему не распространяется на вторую?

Ссылка на комментарий
Поделиться на других сайтах


потому что не установлен формат второй цены, используется просто число, символ валюты установлен вручную

Ссылка на комментарий
Поделиться на других сайтах

Не выходит.. Цена сразу 0. Подытожим. Если в конфиге прописывать

$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_byr'] = $product_info['price'];
} else {
$this->data['price'] = false;
$this->data['price_byr'] = false;

То второй цене присваивается значение первой цены, т.е. , отображаются 2 одинаковые цены.

 

Поэтому в конфиге прописал

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'], 'EUR', 'BYR'), '0')." руб.)";
			} else {
				$this->data['price'] = false;
			}

В шаблоне

<?php echo $price_2; ?>

Если пишу в шаблоне

<?php echo number_format((double)$price_2 , 0 , '.' , ' '); ?>

То price_2 вообще не отображается, а отображается 0.

 

Не могу въехать..

Ссылка на комментарий
Поделиться на других сайтах


В том то и дело, что делал. Но вторая цена почему то принимает значение первой цены.

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_usd'] = $product_info['price'];
} else {
$this->data['price'] = false;
$this->data['price_usd'] = false;
}

Может Вы где нибудь в другом месте прописывали конвертацию? Потому как судя по коду price_usd принимает обычную цену.

Ссылка на комментарий
Поделиться на других сайтах


Всё, спасибо за помощь, разобрался.В product.tpl

<?php if (($this->currency->getCode())!='BYR') { echo ' / '. number_format($price_by, 0, '.', ' ') . ' rub';}  ?>

В product.php функция конвертации.

Осталось округлить до тысяч. Не подскажите что прописать в number_format для округления до 1 000.

 

В currency.php прописано

if ($currency == 'BYR')
{
$string .= number_format(round($value, -3), (int)$decimal_place, $decimal_point, $thousand_point);
}
else
{
$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

 цена всё равно 4 493 600 (к примеру)

Ссылка на комментарий
Поделиться на других сайтах


ваш код отличается от моего
округление до 1000 я делал так:
в файле …\system\library\currency.php, делаем округление до 1 тысячи

$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);

меняем на

if ($currency == 'BYR')
$string .= number_format(round($value, -3), (int)$decimal_place, $decimal_point, $thousand_point);
}
else
{
$string .= number_format(round($value, (int)$decimal_place), (int)$decimal_place, $decimal_point, $thousand_point);
}

вы попробуйте так

number_format(round($price_by, -3), 0, '.', ' ')
Ссылка на комментарий
Поделиться на других сайтах

Может суть запроса была такая чтобы напротив каждой цены была кнопка "Купить" т.е. нажимаешь "Купить" в USD и в корзину идет товар и валюта переключается на USD?

Потому что, отображение довольно тривиальная задача, можно прямо в шаблоне "конвертировать" и НЕ лезть в контроллер

Ссылка на комментарий
Поделиться на других сайтах

  • 4 месяца спустя...

Может кто в курсе почему вторая цена одинакова на все товары и конвертируется с последнего товара? Касается всех модулей кроме product.

Ссылка на комментарий
Поделиться на других сайтах


 

Потому что, отображение довольно тривиальная задача, можно прямо в шаблоне "конвертировать" и НЕ лезть в контроллер

Подскажите пожалуйста код для конвертации прямо в шаблоне без контроллера. Интересно конкретно для модуля latest.

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.