Сортировка 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