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

[Решено] Отображение цены со скидкой на страницах категории и в модулях


 Поделиться

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

Добрый день. Задача вроде бы простая, но ни как не могу её решить. Необходимо чтобы на страницах каталога и в модулях (рекомендуемые и лидеры продаж) на ряду с обычной ценой выводилась цена со скидкой (оптовая цена при покупке от N товаров).

 

в controller/product.php используется

$discounts = $this->model_catalog_product->getProductDiscounts($this->request->get['product_id']);

$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')))
	);
}

но я не могу понять как это вставить в category.php потому, что там вообще нет 

if ($product_info) {

а в feature.php ругается на 

$discounts = $this->model_catalog_product->getProductDiscounts($this->request->get['product_id']);

потому, что не знает что такое product_id и я не пойму как надо написать чтобы он понял

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


Разобрался. Если кому надо:

 

в feature.php после

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')));
} else {
$special = false;
}

пишем

$discounts = $this->model_catalog_product->getProductDiscounts($product_info['product_id']);

$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')))
);
}
 

В category.php после

if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;} 

пишем

$discounts = $this->model_catalog_product->getProductDiscounts($result['product_id']);

$this->data['discounts'] = array(); 


foreach ($discounts as $discount) {
$this->data['discounts'][] = array(
'quantity' => $discount['quantity'],
'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
);
}

И в соответствующих .tpl где надо

<div class="discount">
  <?php foreach ($discounts as $discount) { ?>
    <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><br />
  <?php } ?>
</div>
Ссылка на комментарий
Поделиться на других сайтах


  • 5 месяцев спустя...

 

Разобрался. Если кому надо:

 

в feature.php после

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')));
} else {
$special = false;
}

пишем

$discounts = $this->model_catalog_product->getProductDiscounts($product_info['product_id']);

$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')))
);
}
 

В category.php после

if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;} 

пишем

$discounts = $this->model_catalog_product->getProductDiscounts($result['product_id']);

$this->data['discounts'] = array(); 


foreach ($discounts as $discount) {
$this->data['discounts'][] = array(
'quantity' => $discount['quantity'],
'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
);
}

И в соответствующих .tpl где надо

<div class="discount">
  <?php foreach ($discounts as $discount) { ?>
    <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><br />
  <?php } ?>
</div>

 

 

Подскажи пожалуйста, как у тебя выводятся скидки в категориях? У каждого товара соответствуют скидки? Сделал вроде все так как ты написал. Добавил в языках. Все выводится...но, у всех товаров в скидках выводятся одинаковые цены, взятые у одного из товаров. Что я упустил?

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


ничего.

ошибки в приведенном коде.

А не подскажите какие именно ошибки? Или принципиально не помогаете?

Если подскажите, буду очень благодарен.

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


для категорий

[=== category.php ===]

1) забить на то, что написано в том сообщении.

2) сделать так

...
				$this->data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
					'price'       => $price,
					'special'     => $special,
...
>>

...
				$discounts = $this->model_catalog_product->getProductDiscounts($result['product_id']);
				$product_discounts = array();
				foreach ($discounts as $discount) {
					$product_discounts[] = array(
						'quantity' => $discount['quantity'],
						'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
					);
				}
				
				$this->data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
					'price'       => $price,
					'special'     => $special,
					'discounts'   => $product_discounts,
...

[=== category.tpl ===]

1) забить на то, что написано в том сообщении.

2)

...
    <?php foreach ($products as $product) { ?>
    <div>
...
>>

...
    <?php foreach ($products as $product) { ?>
    <div>
		<?php if ($product['discounts']) { ?>
			<div class="discount">
				<?php foreach ($product['discounts'] as $discount) { ?>
					<?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><br />
				<?php } ?>
			</div>
		<?php } ?>
...
Ссылка на комментарий
Поделиться на других сайтах

Спасибо большое за помощь. Сделал все как написали. К сожалению, при переходе в категории только белый экран. Это только если переходить по категориям, в остальном сайт работает. Ошибки тоже не выдает. Вроде в контроллере и в языках все добавил. Может я что пропустил. В чем может быть проблема? Я в этом мало разбираюсь, только познаю так сказать.

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


  • 7 месяцев спустя...

Здравствуйте!

а не подскажете как вывести значения конкретных цен со скидками от количества?

т.е. не все вместе через такой код:

<?php if ($product['discount']) { ?>
<ul>
<?php foreach ($product['discount'] as $discount) { ?>
<li>
<?php echo $text_discount; ?>
(<?php echo $discount['quantity']; ?>
<?php echo $text_piece ?>)
<span><?php echo $discount['price']; ?></span> /
<?php echo $text_piece ?>
</li>
<?php } ?>
</ul>

а именно по отдельности.

т.е. при покупке 10, например, цену (указанную в карточке товара в админке) как вывести отдельно от остальных?

наверняка же можно это сделать как-то, но решения в интернете пока не нашёл.

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


  • 1 год спустя...

Подниму тему. Версия ocStore 2.3.0.2.3. Третий день курю форумы и перепробовал все расписанные варианты, толку нет. Есть ли варианты вывести 2 цены (основная и со скидкой) для все пользователей для моей версии движка. Если есть у кого-то готовое простое решение, буду крайне признателен за помощь. Если есть решение в виде модуля или дополнения, готов рассмотреть платный вариант. Пишите в личку. Заранее благодарен за помощь.

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


Цитата

Есть ли варианты вывести 2 цены (основная и со скидкой) для все пользователей для моей версии движка.

Делал как то.

9017067913.jpg

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

Вам нужно расписать что и куда сделать?Потому как в данном случае ,все правки сделаны в файлах.

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

Только что, Tom сказал:

Вам нужно расписать что и куда сделать?Потому как в данном случае ,все правки сделаны в файлах.

Если Вам не сложно, то было бы замечательно. 

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


Попробую,когда появится свободное время.

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

  • 7 месяцев спустя...

Решение в виде чего ? Написать что и куда -  сразу нет.

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

  • 2 месяца спустя...
В 22.09.2015 в 23:37, Curant сказал:

 

Подскажи пожалуйста, как у тебя выводятся скидки в категориях? У каждого товара соответствуют скидки? Сделал вроде все так как ты написал. Добавил в языках. Все выводится...но, у всех товаров в скидках выводятся одинаковые цены, взятые у одного из товаров. Что я упустил?

Добрый день! Пытался реализовать все это на opencart 2.3.0.2, неполучается. Может кто то подсказать как это сделать? Помогите пож.

Разобрался. 

 

в feature.php после

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')));
} else {
$special = false;
}

пишем

$discounts = $this->model_catalog_product->getProductDiscounts($product_info['product_id']);

$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')))
);
}
 

В category.php после

if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;} 

пишем

$discounts = $this->model_catalog_product->getProductDiscounts($result['product_id']);

$this->data['discounts'] = array(); 


foreach ($discounts as $discount) {
$this->data['discounts'][] = array(
'quantity' => $discount['quantity'],
'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))
);
}

И в соответствующих .tpl где надо

<div class="discount">
  <?php foreach ($discounts as $discount) { ?>
    <?php echo sprintf($text_discount, $discount['quantity'], $discount['price']); ?><br />
  <?php } ?>
</div>
Изменено пользователем artemleon
Ссылка на комментарий
Поделиться на других сайтах


29 минут назад, artemleon сказал:

Разобрался. 

Не похоже , что данное решение будет работать на 2.3

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

12 минут назад, Tom сказал:

Не похоже , что данное решение будет работать на 2.3

) Та 100% неработает. Пробовал. Но к моему большему сожалению другого нет. Может сможете подсказать кто??

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


в движках 2х для передачи данных в шаблон вместо подобного

$this->data['discounts']

 

нужно использовать

$data['discounts']

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

$this->data

Это для 1.5

 

В 2.3

 

$data

ну и посмотрите как выводится валюта, это вот не верно
 

'price'    => $this->currency->format($this->tax->calculate($discount['price'], $result['tax_class_id'], $this->config->get('config_tax')))

 

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

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

А как это все реализовать для карточки товара? например для рекомендуемые товары. 
Тоесть в карточке товара есть блок с превъюшками других подобных товаров и вот надо чтобы в этих самых превъхах выводилась скидка 

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


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

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

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

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

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

Войти

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

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

×
×
  • Создать...

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

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