четверг, 17 декабря 2015 г.

Фильтры на товары с нулевым остатком в админке SimplaCMS

Потребовалось добавить несколько пунктов в админке Simpla CMS
Вывод
- активных товаров
- не активных товаров
- с остатками больше нуля
- с нулевыми остатками ( активные и не активные)
- активных товаров с остатком ноль


1.
Начнем, как это уже принято, с визуальной части - с шаблона списка товаров simpla/design/html/products.tpl.
добавим строки

  • Активные

  • Не Активные

  • Остаток >0 - Все

  • Остаток 0 - Все

  • Остаток 0 + Активные



  • 2.
    Теперь перейдем к файлу отработки данного запроса simpla/ProductsAdmin.php.
    после
    if($f = $this->request->get('filter', 'string'))
    {

    Добавляем строки, кроме тех что у Вас уже есть


    elseif($f == 'stockout')
    $filter['in_stock'] = 1;
    elseif($f == 'stock0')
    $filter['stock0'] = 1;
    elseif($f == 'stock0_visible')
    $filter['stock0_visible'] = 1;
    elseif($f == 'visible_no')
    $filter['visible'] = 0;


    3.
    Поскольку в Симпле в файле api/Products.php есть выборка по остаткам

    if(isset($filter['in_stock']))
    $in_stock_filter = $this->db->placehold('AND (SELECT 1 FROM __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(isset($filter['stock0']))
    $in_stock_filter = $this->db->placehold('AND (SELECT 1 FROM __variants pv WHERE pv.product_id=p.id AND (pv.stock=0 ) LIMIT 1) = ?', intval($filter['stock0']));

    if(isset($filter['stock0_visible']))
    $in_stock_filter = $this->db->placehold('AND p.visible=1 AND (SELECT 1 FROM __variants pv WHERE pv.product_id=p.id AND (pv.stock=0 ) LIMIT 1) = ?', intval($filter['stock0_visible']));


    if(isset($filter['visible']))
    $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible']));

    и обращаем внимание на if(!empty вместо указано if(isset
    и повторяем два раза - для подсчета количества и для вывода товаров