loxter Опубликовано 30 августа, 2017 Жалоба Поделиться Опубликовано 30 августа, 2017 я делал на скорую руку... Я так и понял.Только "я делал" - сильно преувеличено. Тут лишь написано что-то похожее. Делал - подразумевает минимальную ответственность - затратил пару минут, вставил код и проверил хоть один разочек. В данном случае явно этого не сделано ...не выкладывают готовые решения на форуме... Это тоже преувеличение.Во всяком случае, если в запросе просто поменять блоки, легко увидеть вторую ошибку...На готовое решение никак не тянет, разве что на не слишком успешное упражнение для начинающего Цитата Ссылка на сообщение Поделиться на другие сайты
Skynet Опубликовано 30 августа, 2017 Жалоба Поделиться Опубликовано 30 августа, 2017 Файл api/Brands.php, заменить функцию get_brands на эту: public function get_brands($filter = array()) { $category_id_filter = ''; $visible_filter = ''; $active_filter = ''; $in_stock_filter = ''; if(isset($filter['in_stock'])) $in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 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['visible'])) $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible'])); if(!empty($filter['category_id'])) $category_id_filter = $this->db->placehold("LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@) $visible_filter $in_stock_filter", (array)$filter['category_id']); if(isset($filter['active'])) $active_filter = $this->db->placehold('AND visible = ?', intval($filter['active'])); // Выбираем все бренды $query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image FROM __brands b $category_id_filter ORDER BY b.name WHERE 1 $in_stock_filter $visible_filter $active_filter"); $this->db->query($query); return $this->db->results(); } Файл view/ProductsView.php меняем выборку брендов на эту: // Выбираем бренды, они нужны нам в шаблоне if(!empty($category)) { $brands = $this->brands->get_brands(array('category_id'=>$category->children, 'visible'=>true, 'active'=>true)); $category->brands = $brands; }Пробуйте. Спасибо огромное за ответ!Но выдаёт вот такую ошибку на сайте: Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 30 августа, 2017 Жалоба Поделиться Опубликовано 30 августа, 2017 (изменено) Спасибо огромное за ответ! Но выдаёт вот такую ошибку на сайте: Внёс правки. Изменено 30 августа, 2017 пользователем Noxter Цитата Ссылка на сообщение Поделиться на другие сайты
loxter Опубликовано 31 августа, 2017 Жалоба Поделиться Опубликовано 31 августа, 2017 После внесенных правок теперь первая ошибка исправлена и FROM стоит перед WHERE, как и должно.Но теперь, как и предполагалось, выплыла вторая ошибка: в запросе подряд стоят ДВА блока WHERE.В результате имеем синтаксическую ошибку, запрос не работает. Спасибо за хорошее обновление! Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 31 августа, 2017 Жалоба Поделиться Опубликовано 31 августа, 2017 Так и было задумано Цитата Ссылка на сообщение Поделиться на другие сайты
loxter Опубликовано 31 августа, 2017 Жалоба Поделиться Опубликовано 31 августа, 2017 Так и было задумано Крутенько заворачивает опытнейший спец. Специально делать ошибки - это, должно быть, новое слово в программировании. Боюсь, моих умственных способностей не хватит, чтобы постичь всю глубину замысла... Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 31 августа, 2017 Жалоба Поделиться Опубликовано 31 августа, 2017 Крутенько заворачивает опытнейший спец. Специально делать ошибки - это, должно быть, новое слово в программировании. Боюсь, моих умственных способностей не хватит, чтобы постичь всю глубину замысла...Я их делаю специально для тебя, дабы ты тут "покукарекал" Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.