avatar

Сортировка по ценам

Опубликовал в блог Дополнения и модули для Simpla CMS
0


Сортировка по цене от «дорогой к низкой» и от «низкой к дорогой». При этом все товары с нулевой ценой отображаются в конце списка и не участвуют в сортировке.

Открываем файл products.tpl вашего шаблона, ищем
<a {if $sort=='price'}    class="selected"{/if} href="{url sort=price page=null}">цене</a>

меняем на
<a {if $sort=='price_asc'}    class="selected"{/if} href="{url sort=price_asc page=null}">по цене низкие</a>
<a {if $sort=='price_desc'}    class="selected"{/if} href="{url sort=price_desc page=null}">по цене высокие</a>

далее открываем api/Products.php, ищем
if(!empty($filter['sort']))
	switch ($filter['sort'])
	{
		case 'position':
		$order = 'p.position DESC';
		break;
		case 'name':
		$order = 'p.name';
		break;
		case 'created':
		$order = 'p.created DESC';
		break;
		case 'price':
		//$order = 'pv.price IS NULL, pv.price=0, pv.price';
		$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
		break;
	}

меняем на
if(!empty($filter['sort']))
	switch ($filter['sort'])
	{
		case 'position':
		$order = 'p.position DESC';
		break;
 
		// по цене Низкие > Высокие
		case 'price_asc':
		$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
		break;
 
		// по цене Высокие < Низкие
		case 'price_desc':
		$order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC';
		break;
 
		case 'created':
		$order = 'p.created DESC';
		break;
 
	}

if(!empty($filter['sort'])){
$order = 'IF(v.stock < 1,1,0),'.$order;
$group_by = 'GROUP BY p.id';
$products_stock_null_sort = 'INNER JOIN __variants v ON p.id = v.product_id';
} 

Далее ищем
$query = "SELECT  
					p.id,
					p.url,
					p.brand_id,
					p.name,
					p.annotation,
					p.body,
					p.product_info,
					p.position,
					p.created as created,
					p.visible,
					p.market, 
					p.featured, 
					p.meta_title, 
					p.meta_keywords, 
					p.meta_description, 
					b.name as brand,
					b.url as brand_url
				FROM __products p		
				$category_id_filter 
				LEFT JOIN __brands b ON p.brand_id = b.id

и после этого кода
LEFT JOIN __brands b ON p.brand_id = b.id

добавить
$products_stock_null_sort

Вот и все. Смотрим демо.

ДЕМО

0 комментариев RSS
Нет комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.