Сортировка по ценам 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>

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

ДЕМО

Универсальный виджет get_products. Simpla CMS... Порой есть необходимость получить список товаров по какому-то определенному критерию, будь-то товары схожего бренда в карточке товаров, или новинки ко...
Количество товара перед помещением в корзину. Simp... В шаблоны добавляем: шт. Для добавления Ajax обновления корзины заменяем в файле /js/ajax-cart.js data: {variant: variant}, на data: {v...
Выгружаем в Яндекс Маркет только первый вариант то... Иногда необходимо выгружать в Яндекс Маркет только первый вариант товара. Данное решение поможет решить эту задачу. Открываем файл yandex.php, ище...
Несколько полезностей для Simpla 2.x... Переносим выбор варианта оплаты на первую страницу оформления заказа Автоматически создаваемый артикул как ID товара Выбор количества товара перед п...
Читайте также  Бургер меню без плагинов.

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