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

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

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

Открываем файл products.tpl вашего шаблона, ищем

<code>&lt;a {if $sort=='price'}    class="selected"{/if} href="{url sort=price page=null}"&gt;цене&lt;/a&gt;</code>

меняем на

<code>&lt;a {if $sort=='price_asc'}    class="selected"{/if} href="{url sort=price_asc page=null}"&gt;по цене низкие&lt;/a&gt;
&lt;a {if $sort=='price_desc'}    class="selected"{/if} href="{url sort=price_desc page=null}"&gt;по цене высокие&lt;/a&gt;</code>

далее открываем api/Products.php, ищем

<code>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&gt;0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock&gt;0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
          break;
     }</code>

меняем на

<code>if(!empty($filter['sort']))
     switch ($filter['sort'])
     {
          case 'position':
          $order = 'p.position DESC';
          break;
 
          // по цене Низкие &gt; Высокие
          case 'price_asc':
          $order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock&gt;0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock&gt;0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)';
          break;
 
          // по цене Высокие &lt; Низкие
          case 'price_desc':
          $order = '(SELECT pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock&gt;0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock&gt;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 &lt; 1,1,0),'.$order;
$group_by = 'GROUP BY p.id';
$products_stock_null_sort = 'INNER JOIN __variants v ON p.id = v.product_id';
}
</code>

Далее ищем

<code>$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</code>

и после этого кода

<code>LEFT JOIN __brands b ON p.brand_id = b.id</code>

добавить

<code>$products_stock_null_sort</code>

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


ДЕМО

CSS Styling Radio Button and Checkboxes The idea is simple. We want to change the look and feel of existing radio buttons into more of a push button. The above image pretty much t...
Выгружаем в Яндекс Маркет только первый вариант то... Иногда необходимо выгружать в Яндекс Маркет только первый вариант товара. Данное решение поможет решить эту задачу. Открываем файл yandex.php, ище...
Универсальный плагин для Simpla CMS... Эта статья поможет Вам внедрить универсальный плагин для вызова нужных функций API прямо в шаблоне без надобности дорабатывать PHP код. И так отк...
Пакетное изменение цен в Simpla... Открываем simpla/design/html/products.tpl и ищем Удалить после добавляем Изменить цену далее ищем перед кодом добавляем пр...
Читайте также  Показываем цену товара в другой валюте Simpla

Сохрани, чтобы не потерять