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

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


ДЕМО

Пакетное изменение цен в Simpla... Открываем simpla/design/html/products.tpl и ищем Удалить после добавляем Изменить цену далее ищем перед кодом добавляем пр...
Несколько полезностей для Simpla 2.x... Переносим выбор варианта оплаты на первую страницу оформления заказа Автоматически создаваемый артикул как ID товара Выбор количества товара перед п...
Simpla валюта через select {if $currencies|count>1} {foreach from=$currencies item=c} {if $c->enabled} id==$currency->id} selected="selected"{/if}>{$c->name|esca...
Указываем телефон в настройках Simpla... Намного удобнее указывать телефон только в одном месте, ведь если номер поменяется — удобнее поменять только в настройках в админке, че...
Читайте также  CSS Styling Radio Button and Checkboxes

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