Товары с нулевым остатком в админке SimplaCMS
Начнем, как это уже принято, с визуальной части - с шаблона списка товаров simpla/design/html/products.tpl. После кода (~ 184 строка)
<li {if $filter=='featured'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='featured'}">Рекомендуемые</a></li>
добавим строку
<li {if $filter=='stockout'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='stockout'}">Нулевой остаток</a></li>
Теперь перейдем к файлу отработки данного запроса simpla/ProductsAdmin.php. В нем после (~ 40 строка)
if($f == 'featured') $filter['featured'] = 1;
добавим
elseif($f == 'stockout') $filter['in_stock'] = 0;
Поскольку в Симпле в файле api/Products.php есть выборка по остаткам (строки 82 и 206)
if(!empty($filter['in_stock'])) $in_stock_filter = $this->db->placehold('AND (SELECT 1 FROM s_variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));
но она не работает со значением "ноль", так как надо заменить
if(!empty($filter['in_stock']))
на
if(isset($filter['in_stock']))
Объясню причину замены. Функция empty считает $filter['in_stock'] = 0 также пустым значением, поэтому и не отрабатывает. В этом плане функция isset определяет наличие самого значения фильтр и отрабатывает. Не знаю по какой причине автор Симплы применил "пустой" метод, но тут придется его заменить.
Теперь можете смело пользоваться. Удачи в работе!
Комментарии
Ваш отзыв будет первым