Jump to content

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


Recommended Posts

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

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

 

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

{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

Link to post
Share on other sites

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

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

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites

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

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

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

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

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

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

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

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

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

Link to post
Share on other sites
  • 3 weeks later...
  • 6 years later...

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

Link to post
Share on other sites

А как сделать для категории? чтобы выводило не одного товара, а товары категории типа: кроссовки от 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}
Link to post
Share on other sites

 

сделал

кому нужно:

 

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...