Перейти к содержанию
Официальный форум поддержки Simpla

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


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

Всем, Привет! Спасибо, 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;
			}

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

 

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

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

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

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

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

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

{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 || $maxprice}

             {$max = $v->price}

             {/if}             

             {/foreach}

 

        {if $min

            {$min|convert} ... {$max|convert} {$currency->sign|escape}

            

        {else}

            {$product->variant->price|convert} {$currency->sign|escape}

        {/if}             

            {/if}

 

Проверил, работает - http://demo.simplacms.ru/catalog/mobilnye-telefony

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

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

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

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

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

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

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

С этой точки зрения вы правы.

Как быть с обновлением движка?

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

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

Так для вас достаточно мелко?? :)

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

На эту тему можно долго спорить и мериться глубиной доработок...

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

Приведите хотя бы один плюс вашего решения.

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

Уважаемый, а вы проверяли мое решение?

Оно работает :)

Я правил его раза 3-4, возможно у вас был не конечный вариант?

А сравнивать одно рабочее решение с другим - вполне корректно.

Неужели вы не в состоянии смирится с тем, что вы НЕПРАВЫ.

Боюсь вас огорчить, но это - болезнь.

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

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

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

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

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

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

Ну и, например, Связанные товары...

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

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

Ну и, например, Связанные товары...

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

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

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

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

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

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

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

А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 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}
Ссылка на сообщение
Поделиться на другие сайты

 

сделал

кому нужно:

 

{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.

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...