Перейти к содержанию
Официальный форум поддержки Simpla

Фильтр по свойствам товаров, проверить наличие


Рекомендуемые сообщения

Всем здравствуйте!

На сайте есть фильтр по свойствам товара. Сейчас он показывает товары с visible = 1

 

Код из файла api/features.php

if(isset($filter['visible']))
			$visible_filter = $this->db->placehold('INNER JOIN __products p ON p.id=po.product_id AND visible=?', intval($filter['visible']));

Хочу добавить в фильтр вывод свойств только тех товаров которые в наличии, вставляю по аналогии с products.php следующий код (чтобы не выводились те варианты фильтра при которых будет 404 ошибка, так как этих товаров нет в наличии, а на сайте настроено не показывать товары без остатка)

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']));

 

 

Добавляю в productsView.php

 

$options_filter = array();
$options_filter['visible'] = 1;	
$options_filter['in_stock'] = 1;

 

 

 Но при этом фильтр вообще перестает выводиться.

 

Подскажите пожалуйста как добавить фильтр in_stock в вывод фильтра по свойствам.

Ссылка на сообщение
Поделиться на другие сайты

Свойства товаров выводятся следующим кодом

// Свойства товаров
        $features = array();
        foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature){
            $features[$feature->id] = $feature;
            if($val = $this->request->get($feature->id))
                $filter['features'][$feature->id] = $val;
        }

        $options_filter['visible'] = 1;

        $features_ids = array_keys($features);
        if(!empty($features_ids))
            $options_filter['feature_id'] = $features_ids;
        if(!empty($category))
            $options_filter['category_id'] = $category->children;
        if(isset($filter['features']))
            $options_filter['features'] = $filter['features'];
        if(!empty($brand))
            $options_filter['brand_id'] = $brand->id;
        if(!empty($tag))
            $options_filter['tag_id'] = $tag->id;

        $options = $this->features->get_options($options_filter);
        foreach($options as $option)
        {
            if(isset($features[$option->feature_id]))
                $features[$option->feature_id]->options[] = $option;
        }
        foreach($features as $i=>&$feature)
        {
            if(empty($feature->options))
                unset($features[$i]);
        }

        $this->design->assign('features', $features);
Ссылка на сообщение
Поделиться на другие сайты

Решение, может кому пригодится.

 

if(isset($filter['in_stock']))            
            $in_stock_filter = $this->db->placehold('AND (SELECT 1 FROM __variants pv WHERE pv.product_id=po.product_id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock']));
Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...