Перейти к содержимому


Фото
- - - - -

Минимальная цена и максимальная цена


  • Чтобы отвечать, сперва войдите на форум
19 ответов в теме

#1 Olenka

Olenka
  • Пользователь
  • 19 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 18.05.2014 - 14:19

Всем, Привет! Спасибо, Kors, за доработочку. Решила поделиться со всеми)))

Версия 2.2.4

 

Работает так

1. если вариант один, то выводим просто его цену

2. если вариантов более одного, а цена у них одинаковая, то выводим просто одну цену.

3. если вариантов более одного, а цены разные то выводим 3000...6900, не зависимо от сортировки в админке.

 

1. view/ProductView.php
  после
		$variants = array();
		foreach($this->variants->get_variants(array('product_id'=>$product->id, 'in_stock'=>true)) as $v)
			$variants[$v->id] = $v;

вставить

		$pmin=null;
		$pmax=null;
		if(is_array($variants))foreach ($variants as $variant) {
			if(!$pmin || $pmin>$variant->price)
				$pmin=$variant->price;
			if(!$pmax || $pmax<$variant->price)
				$pmax=$variant->price;
		}

		$product->variants = $variants;
		$product->pricemin = $pmin;
		$product->pricemax = $pmax;
2. view/ProductsView.php
  после
			foreach($variants as &$variant)
			{
				//$variant->price *= (100-$discount)/100;
				$products[$variant->product_id]->variants[] = $variant;
			}

вставить

			if(is_array($products))foreach ($products as &$product) {
		$pmin=null;
		$pmax=null;
		if(is_array($product->variants))foreach ($product->variants as $variant) {
			if(!$pmin || $pmin>$variant->price)
				$pmin=$variant->price;
			if(!$pmax || $pmax<$variant->price)
				$pmax=$variant->price;
		}

		$product->pricemin = $pmin;
		$product->pricemax = $pmax;
			}
3. design/default/html/products.tpl
   design/default/html/product.tpl
 
  в нужном месте вставить
		{if $product->pricemin<$product->pricemax}
			<span class="price">{$product->pricemin|convert} ... {$product->pricemax|convert} <span class="currency">{$currency->sign|escape}</span></span>
			
		{else}
			<span class="price">{$product->pricemax|convert} <span class="currency">{$currency->sign|escape}</span></span>
		{/if}

А чтобы это чудо заработало в Рекомендуемых, Новинках и т.д 

в файле view/View.php , везде после

            // Для каждого варианта
            foreach($variants as &$variant)
            {
                // добавляем вариант в соответствующий товар
                $products[$variant->product_id]->variants[] = $variant;
            }

вставить

				if(is_array($products))foreach ($products as &$product) {
		$pmin=null;
		$pmax=null;
		if(is_array($product->variants))foreach ($product->variants as $variant) {
			if(!$pmin || $pmin>$variant->price)
				$pmin=$variant->price;
			if(!$pmax || $pmax<$variant->price)
				$pmax=$variant->price;
		}

		$product->pricemin = $pmin;
		$product->pricemax = $pmax;
			}

Всем удачи)))

 



#2 mart

mart
  • Пользователь
  • 1 331 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Venlo

Опубликовано 18.05.2014 - 15:02

Оригинально :) А почему не сам Корс выложил?



#3 Olenka

Olenka
  • Пользователь
  • 19 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 18.05.2014 - 19:07

Я спросила его разрешения. Он сказал если так хочеться, выкладывайте. Вот я решила поделиться)) И это не бесплатное решение)) моя инициатива.



#4 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 19:10

Если автор не возражает, не вижу ничего криминального :)

Но я бы все тоже самое сделал уже в шаблоне, Smarty это вполне позволяет.



#5 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 19:27

{if $product->variants|count > 0}
             {$min = 0}
             {$max = 0}             
            {foreach $product->variants as $v}
             {if $min ==0 || $min>$v->price}
             {$min = $v->price}
             {/if}
             {if $max ==0 || $max<$v->price}
             {$max = $v->price}
             {/if}             
             {/foreach}
 
        {if $min<$max}
            <span class="price">{$min|convert} ... {$max|convert} <span class="currency">{$currency->sign|escape}</span></span>
            
        {else}
            <span class="price">{$product->variant->price|convert} <span class="currency">{$currency->sign|escape}</span></span>
        {/if}             
            {/if}
 
Проверил, работает - http://demo.simplacm...bilnye-telefony

#6 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 19:47

Это было написано за 10 мин, логика, кстати полностью Ваша)) Из первого поста.



#7 Olenka

Olenka
  • Пользователь
  • 19 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 18.05.2014 - 20:07

Мальчики)) Мне что делать? оставлять как есть или что-то переделать?



#8 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 20:07

А нет там такого:

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

Зачем он это сделал?

Я написал свое решение, чтобы показать неправильность вашей логики в принципе))



#9 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 20:14

Обычно опытный народ придерживается правила: если работает правильно, то лучше ничего не трогать...

С этой точки зрения вы правы.
Как быть с обновлением движка?

#10 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 20:30

Моя идея в том, что если есть возможность сделать что-то, не трогая движок, то надо это делать именно так.
Так для вас достаточно мелко?? :)

#11 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 20:39

На эту тему можно долго спорить и мериться глубиной доработок...
Но решение, основанное на шаблоне - более универсальное. Подходит для всех версий 2.*, затрагивает в 2 раза меньше файлов, позволяет вывести где угодно, хоть в Связанных, хоть в Корзине, не требует ФТП.
Приведите хотя бы один плюс вашего решения.

#12 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 21:32

Уважаемый, а вы проверяли мое решение?
Оно работает :)
Я правил его раза 3-4, возможно у вас был не конечный вариант?
А сравнивать одно рабочее решение с другим - вполне корректно.
Неужели вы не в состоянии смирится с тем, что вы НЕПРАВЫ.
Боюсь вас огорчить, но это - болезнь.

#13 Olenka

Olenka
  • Пользователь
  • 19 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 18.05.2014 - 21:57

Kosjak76, Я так поняла это надо в каждый цикл? если да, то не вариант. Универсально,но не практично. Засоряем шаблон. По мне вариант Korsa идеален. Это мое позитивненькое мнение))) :rolleyes:



#14 mart

mart
  • Пользователь
  • 1 331 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Venlo

Опубликовано 18.05.2014 - 22:50

Kosjak76, Я так поняла это надо в каждый цикл? если да, то не вариант. Универсально,но не практично. Засоряем шаблон. По мне вариант Korsa идеален. Это мое позитивненькое мнение))) :rolleyes:

Вариант Корса делает все то же самое, но не в шаблоне. Так что насчет "засорять" Вы погорячились, т.к. по производительности они одинаковы. А вот насчет апдейта движка Косяк правильно заметил - надо будет делать обновление - придется опять искать код Корса, чтобы вставить в код и так с каждым апдейтом.



#15 Kosjak76

Kosjak76
  • Модератор
  • 3 854 сообщений
  • Программирование
  • Версия CMS:1.x, 2.x
  • Откуда:Харьков, Украина

Опубликовано 18.05.2014 - 23:24

Ну и, например, Связанные товары...
В принципе, я, вообще, за то, чтобы движок не трогать, если есть такая возможность.

#16 Yaroslav

Yaroslav
  • Пользователь
  • 32 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 19.05.2014 - 16:46

Ну и, например, Связанные товары...
В принципе, я, вообще, за то, чтобы движок не трогать, если есть такая возможность.

Если есть возможность получить идентичный функционал, зачем лезть в код. У меня на сайте стоит куча доработок, и каждое новое обновление симплы - это огромный труд, приходится искать изменения в файлах и в коде от версии к версии, на что уходит куча времени... жаль, конечно, что в симпле отсутствует модульность...



#17 Sergey_Nikonorov

Sergey_Nikonorov
  • Пользователь
  • 8 сообщений

Опубликовано 08.06.2014 - 18:33

А подскажите, куда этот код нужно вставить или какой код нужно заменить, а то я вставляю и не работает добавление в корзину.



#18 n1c

n1c
  • Пользователь
  • 270 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 23.06.2020 - 16:48

А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 100 до 100000 ?



#19 n1c

n1c
  • Пользователь
  • 270 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x
  • Откуда:Украина

Опубликовано 23.06.2020 - 19:59

А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 100 до 100000 ?

сделал

кому нужно:

 

{if $products}
	{$min = 0}
	{$max = 0}             
	{foreach $products as $product}
		{if $min == 0 || $min > $product->variant->price}
			{$min = $product->variant->price}
		{/if}
		{if $max == 0 || $max < $product->variant->price}
			{$max = $product->variant->price}
		{/if}             
	{/foreach}
 
	{if $min < $max}
		{$min|convert} ... {$max|convert} {$currency->sign|escape}
	{else}
		{$product->variant->price|convert} {$currency->sign|escape}
	{/if}             
{/if}


#20 Noxter

Noxter
  • Фрилансер
  • 42 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 23.06.2020 - 21:19


сделал
кому нужно:

{if $products}
	{$min = 0}
	{$max = 0}             
	{foreach $products as $product}
		{if $min == 0 || $min > $product->variant->price}
			{$min = $product->variant->price}
		{/if}
		{if $max == 0 || $max < $product->variant->price}
			{$max = $product->variant->price}
		{/if}             
	{/foreach}
 
	{if $min < $max}
		{$min|convert} ... {$max|convert} {$currency->sign|escape}
	{else}
		{$product->variant->price|convert} {$currency->sign|escape}
	{/if}             
{/if}
Вы не учли постраничную навигацию, ведь товары с большей ценой могут быть на других страницах.
По хорошему нужно написать функцию (почти клон get_products) но на выходе получить MIN(v.price) as MIN и MAX(v.price) as MAX.




0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых