Перейти к содержанию
Rex4r

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

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

Добрый день. Задача вроде бы простая, но ни как не могу её решить. Необходимо чтобы на страницах каталога и в модулях (рекомендуемые и лидеры продаж) на ряду с обычной ценой выводилась цена со скидкой (оптовая цена при покупке от 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>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Rex4r

спасибо за решение.

скажите, на какой версии вы реализовали?

Поделиться сообщением


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

Rex4r

спасибо за решение.

скажите, на какой версии вы реализовали?

 

 

Должно работать на всех 1.5.x версиях. 

Поделиться сообщением


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

 

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

 

в 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 } ?>
...

Поделиться сообщением


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

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

Поделиться сообщением


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

смотри объявления и FAQ.

устраняй ошибки.

Поделиться сообщением


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

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

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

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

<?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, например, цену (указанную в карточке товара в админке) как вывести отдельно от остальных?

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

Поделиться сообщением


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

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

Изменено пользователем inlska

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата

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

Делал как то.

9017067913.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Tom сказал:

Делал как то.

9017067913.jpg

Отличный вариант. Как реализовать?

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Tom сказал:

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

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

Поделиться сообщением


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

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

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 12.07.2017 в 21:54, Tom сказал:

Делал как то.

9017067913.jpg

а можно и мне решение если есть

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 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')))

 

Поделиться сообщением


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

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От Rafael111
      Здравствуйте! Подскажите, кто может сделать так, что бы в карточке товара отображалось две стоимости товара? Одна цена обычная (перечеркнута), а вторая информативная (будет применяться при использовании определенного промокода в корзине). Спасибо!
      Opencart 2.3.0.2.3, Тема Journal 2.16.3
    • От spectre
      Скачать/Купить дополнение


      Скидка по купону в зависимости от суммы заказа 2.x-3.x ||| Coupon Gradation 2.x-3.x
      Модуль позволяет задавать различные процент или сумму скидки по купону в зависимости от суммы заказа
       
      Если ввести 4:1000;5:2000;10:10000000000000
      это будет значить - до 1000 скидка 4 рубля или 4%, от 1000 до 2000 - 5, больше 2000 - 10
       
      Тестировался на 2.3, 2.1, 3.0, должно работать на всей линейке 2x и 3x
       
      Установка - закинуть в system, выполнить запрос к бд
      ALTER TABLE `oc_coupon` CHANGE `discount` `discount` VARCHAR(255) NOT NULL;  
      ОЧЕНЬ ВАЖНО!!!
      мод поставляется AS IS, поддержка осуществляется только по моему желанию
       
      Добавил spectre Добавлено 21.11.2018 Категория Цены, скидки, акции, подарки Системные требования Сайт разработчика https://freelancer.od.ua Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х  
    • От spectre
      Модуль позволяет задавать различные процент или сумму скидки по купону в зависимости от суммы заказа
       
      Если ввести 4:1000;5:2000;10:10000000000000
      это будет значить - до 1000 скидка 4 рубля или 4%, от 1000 до 2000 - 5, больше 2000 - 10
       
      Тестировался на 2.3, 2.1, 3.0, должно работать на всей линейке 2x и 3x
       
      Установка - закинуть в system, выполнить запрос к бд
      ALTER TABLE `oc_coupon` CHANGE `discount` `discount` VARCHAR(255) NOT NULL;  
      ОЧЕНЬ ВАЖНО!!!
      мод поставляется AS IS, поддержка осуществляется только по моему желанию
       
    • От lolwe
      599.00 руб
      Скачать/Купить дополнение


      Скидка на набор товаров (вместе дешевле) для OpenCart 2
      Модуль расширяет стандартные возможности OpenCart, позволяя создать наборы из нескольких товаров и установить скидку на созданный набор. 
      Демо:
      Пример работы дополнения можно увидеть по ссылкам ниже:
      Панель администратора.
      Пример товара, который участвует в наборе.
       
      Описание расширения:
      Максимальное количество товаров в наборе: 4 шт. Максимальное количество наборов на сайте: не ограничено. Скидки можно задавать в процентах или фиксированно в валюте Вашего магазина.  
      Дополнение поддерживает два вида наборов:

      1) Наборы с фиксированной скидкой
       
       
      2) Динамическая скидка:
       
      Инструкция по установке:
      Для установки и запуска дополнения следует выполнить следующие шаги:
      Купить и загрузить дополнение Распаковать загруженный архив на компьютер Выбрать плагин, соответсвующий версии OpenCart на Вашем сайте Выполнить установку дополнения с помощью установщика OCMOD (Админка - Расширения - Установка расширений) Обновить модификаторы (Расширения - модификаторы - обновить модификаторы) Перейти в пункт «учитывать в заказе» на вкладке расширений и активировать модуль «скидка на набор товаров / Discount on a set of products», указав порядок сортировки 3 (эта цифра должна быть больше чем цифра у модуля «Всего / Total») После успешной установки у Вас появится возможность создавать новые наборы на вкладке «Каталог» - «Наборы товаров»  
      Примечание: на п.6, при сохранении настроек модуля некоторые пользователи получают ошибку, связанную с правами доступа. Эту ошибку можно игнорировать.
       
      Поддерживаемые версии:
       
      Известные недостатки:
      Я знаю, нет ничего идеального, но признание и понимание своих недостатков позволяет нам стать лучше. Сюда будут публиковаться все недостатки данного дополнения, которые в будущих версиях будут исправлены. Если Вы купили данное дополнение и обнаружили недостатки в нем - пишите личным сообщением автору / в теме поддержки дополнения.
       
      На данный момент плагин имеет такие недостатки:
      Модуль не работает с опциями товаров; Мобильная версия виджета на данный момент отображается криво; Нет возможности вывести виджет набора в произвольном месте.  
      В планах:
      Все покупатели пользователи https://opencartforum.com могут внести предложение по развитию данного дополнения. Предложения, принятые к внедрению будут публиковаться здесь. Все предложения пользователей, которые уже внедрены, будут опубликованы в истории изменений.
       
      В ближайших версиях дополнения все пользователи получат такую функциональность:
      Добавить страницу настроек виджета с возможностью управлять цветовой схемой и отображаемыми элементами внутри виджета (от пользователя aiwa) Упростить процедуру установки модуля. На данный момент некоторые пользователи путаются в шагах его установки Написать генератор наборов, который по определенному алгоритму будет объединять товары в наборы
      Поддержка:

      Лицензия:
       
      Добавил lolwe Добавлено 07.08.2018 Категория Серии, Комплекты Системные требования PHP 5.3+, OpenCart 2 (Любая версия) Сайт разработчика Старая цена 800 Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1  
    • От lolwe
      Модуль расширяет стандартные возможности OpenCart, позволяя создать наборы из нескольких товаров и установить скидку на созданный набор. 
      Демо:
      Пример работы дополнения можно увидеть по ссылкам ниже:
      Панель администратора.
      Пример товара, который участвует в наборе.
       
      Описание расширения:
      Максимальное количество товаров в наборе: 4 шт. Максимальное количество наборов на сайте: не ограничено. Скидки можно задавать в процентах или фиксированно в валюте Вашего магазина.  
      Дополнение поддерживает два вида наборов:

      1) Наборы с фиксированной скидкой
       
       
      2) Динамическая скидка:
       
      Инструкция по установке:
      Для установки и запуска дополнения следует выполнить следующие шаги:
      Купить и загрузить дополнение Распаковать загруженный архив на компьютер Выбрать плагин, соответсвующий версии OpenCart на Вашем сайте Выполнить установку дополнения с помощью установщика OCMOD (Админка - Расширения - Установка расширений) Обновить модификаторы (Расширения - модификаторы - обновить модификаторы) Перейти в пункт «учитывать в заказе» на вкладке расширений и активировать модуль «скидка на набор товаров / Discount on a set of products», указав порядок сортировки 3 (эта цифра должна быть больше чем цифра у модуля «Всего / Total») После успешной установки у Вас появится возможность создавать новые наборы на вкладке «Каталог» - «Наборы товаров»  
      Примечание: на п.6, при сохранении настроек модуля некоторые пользователи получают ошибку, связанную с правами доступа. Эту ошибку можно игнорировать.
       
      Поддерживаемые версии:
       
      Известные недостатки:
      Я знаю, нет ничего идеального, но признание и понимание своих недостатков позволяет нам стать лучше. Сюда будут публиковаться все недостатки данного дополнения, которые в будущих версиях будут исправлены. Если Вы купили данное дополнение и обнаружили недостатки в нем - пишите личным сообщением автору / в теме поддержки дополнения.
       
      На данный момент плагин имеет такие недостатки:
      Модуль не работает с опциями товаров; Мобильная версия виджета на данный момент отображается криво; Нет возможности вывести виджет набора в произвольном месте.  
      В планах:
      Все покупатели пользователи https://opencartforum.com могут внести предложение по развитию данного дополнения. Предложения, принятые к внедрению будут публиковаться здесь. Все предложения пользователей, которые уже внедрены, будут опубликованы в истории изменений.
       
      В ближайших версиях дополнения все пользователи получат такую функциональность:
      Добавить страницу настроек виджета с возможностью управлять цветовой схемой и отображаемыми элементами внутри виджета (от пользователя aiwa) Упростить процедуру установки модуля. На данный момент некоторые пользователи путаются в шагах его установки Написать генератор наборов, который по определенному алгоритму будет объединять товары в наборы
      Поддержка:

      Лицензия:
       
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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