Сортировка simpla

Сортировка simpla

А сделаем мы нормальную сортировку в нашем интернет-магазине на simpla? Нормальная для меня это: по умолчанию, по цене сначала дорогие, по цене сначала дешевые, по имени от А до Я и по имени от Я до А.

Сортировка товаров находится в файле шаблона products.tpl (при наличии в других, там тоже придется заменить). Ищем следующий код:

<a {if $sort=='price'}    class="selected"{/if} href="{url sort=price page=null}">цене</a>
<a {if $sort=='name'}     class="selected"{/if} href="{url sort=name 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>
 
<a {if $sort=='name_asc'}     class="selected"{/if} href="{url sort=name_asc page=null}">по имени от А до Я</a>
<a {if $sort=='name_desc'}     class="selected"{/if} href="{url sort=name_desc page=null}">по имени от Я до А</a>

Теперь идем на ftp, файл 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 'name_asc':
		$order = 'p.name';
		break;
 
		// по имени от Я до А
		case 'name_desc':
		$order = 'p.name 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;
 
	}

Profit

27.03.17
Для просмотра сайта обновите браузер.