esistema1 Опубликовано 20 октября, 2018 Жалоба Поделиться Опубликовано 20 октября, 2018 Всем здравствуйте!На сайте есть фильтр по свойствам товара. Сейчас он показывает товары с 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 в вывод фильтра по свойствам. Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 20 октября, 2018 Автор Жалоба Поделиться Опубликовано 20 октября, 2018 Свойства товаров выводятся следующим кодом // Свойства товаров $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); Цитата Ссылка на сообщение Поделиться на другие сайты
esistema1 Опубликовано 20 октября, 2018 Автор Жалоба Поделиться Опубликовано 20 октября, 2018 Решение, может кому пригодится. 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'])); Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.