Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

контроллер

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 .

 

...\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 months later...

 

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

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.