Ну ошибся немного getProductByFilters()Модуль ps_facetedsearch есть, сторонних пока не ставил.
Но функцию getProducts() там не нахожу.
Follow along with the video below to see how to install our site as a web app on your home screen.
Примечание: This feature may not be available in some browsers.
Ну ошибся немного getProductByFilters()Модуль ps_facetedsearch есть, сторонних пока не ставил.
Но функцию getProducts() там не нахожу.
Ну ошибся немного getProductByFilters()
И как это непонятно? Листать в конец функции искать там главное условие WHERE и откорректировать его.И это не то
Может ты говоришь о престашопе 1.6?
У меня преста 1.7.2.4.
Скачал всю папку /modules/ps_facetedsearch со всеми подпапками и файлами
и с помощью поиска в дримвьювере прошерстил всё на getProductByFilters.
Всего 2 находки в 2 файлах.
В файле /modules/ps_facetedsearch/ps_facetedsearch.php :
public function getProductByFilters(
$products_per_page,
$page,
$order_by,
$order_way,
$id_lang,
$selected_filters = array()
)
и в /modules/ps_facetedsearch/src/Ps_FacetedsearchProductSearchProvider.php :
$productsAndCount = $this->module->getProductByFilters(
$query->getResultsPerPage(),
$query->getPage(),
$order_by,
$order_way,
$context->getIdLang(),
$facetedSearchFilters
);
Что дальше делать непонятно
И как это непонятно? Листать в конец функции искать там главное условие WHERE и откорректировать его.
В 1.7.2.4 это строка 1544
Какая версия модуля? Преста не обновлялась, но возможно делались обновления самого модуля отдельно. Я строку говорил по модулю из дистрибутива 1.7.2.4 (версия модуля 2.0.0). В дистрибе 1.7.3.4 версия уже 2.1.1Странно. В файле /modules/ps_facetedsearch/ps_facetedsearch.php на 1544 строке у меня вот что:
/* for this case, price could be out of range, so we need to compute the real price */
И далее:
foreach ($all_products_out as $product) {
$price = Product::getPriceStatic($product['id_product'], $ps_layered_filter_price_usetax);
if ($ps_layered_filter_price_rounding) {
$price = (int)$price;
}
if ($price < $price_filter['min'] || $price > $price_filter['max']) {
// out of range price, exclude the product
$product_id_delete_list[] = (int)$product['id_product'];
}
}
if (!empty($product_id_delete_list)) {
$extraWhereQuery = ' AND p.id_product NOT IN (' . implode(',', $product_id_delete_list) . ') ';
}
}
if (empty($selected_filters['category'])) {
$catFilterRestrictionDerivedTable = ' ((SELECT cp.id_product, MIN(cp.position) position FROM ' . _DB_PREFIX_ . 'category c
STRAIGHT_JOIN ' . _DB_PREFIX_ . 'category_product cp ON (c.id_category = cp.id_category AND
c.id_category = ' . (int)$id_parent . '
AND c.active = 1)
STRAIGHT_JOIN `' . _DB_PREFIX_ . 'product` p ON (p.id_product=cp.id_product)
' . $price_filter_query_in . '
' . $query_filters_from . '
WHERE 1 ' . $query_filters_where . $extraWhereQuery . '
GROUP BY cp.id_product)';
if ($this->ps_layered_full_tree) {
// add other products in subcategories, but not present in the main cat!
$catFilterRestrictionDerivedTable .= ' UNION ALL (SELECT cp.id_product, MIN(cp.position) position FROM ' . _DB_PREFIX_ . 'category c
STRAIGHT_JOIN ' . _DB_PREFIX_ . 'category_product cp ON (c.id_category = cp.id_category AND
c.id_category != ' . (int)$id_parent . '
AND c.nleft >= ' . (int)$parent->nleft . '
AND c.nright <= ' . (int)$parent->nright.'
AND c.active = 1)
STRAIGHT_JOIN `' . _DB_PREFIX_ . 'product` p ON (p.id_product=cp.id_product)
' . $price_filter_query_in . '
' . $query_filters_from . '
WHERE NOT EXISTS(SELECT * FROM ' . _DB_PREFIX_ . 'category_product cpe
WHERE cp.id_product=cpe.id_product AND cpe.id_category = ' . (int)$id_parent . ')
' . $query_filters_where . $extraWhereQuery . '
GROUP BY cp.id_product)';
}
$catFilterRestrictionDerivedTable .= ')';
} else {
$catFilterRestrictionDerivedTable = ' (SELECT cp.id_product, MIN(cp.position) position FROM ' . _DB_PREFIX_ . 'category_product cp
STRAIGHT_JOIN `' . _DB_PREFIX_ . 'product` p ON (p.id_product=cp.id_product)
' . $price_filter_query_in . '
' . $query_filters_from . '
WHERE cp.`id_category` IN (' . implode(',', $categories) . ') ' . $query_filters_where . $extraWhereQuery . '
GROUP BY cp.id_product)';
}
Где, что как править? Ничего не получается
Нашёл тут аналогичное предложение с чуть другим синтаксисом и проверкой только на складе
Для просмотра ссылки Войдиили Зарегистрируйся
но всё равно не работает.
Какая версия модуля?
Оверрайд модуля немного отличается по оформлению от класса. Надо в начале файла делать class <имя модуля>Override extends <имя модуля>Многоуровневая навигация
v2.1.2 - от PrestaShop
В этом модуле в файле /modules/ps_facetedsearch/ps_facetedsearch.php
подстрока WHERE ' . $alias_where . '.`active` = 1 AND
встречается 2 раза.
Первый раз в строке 1628 и я там так поправил:
WHERE ' . $alias_where . '.`active` = 1 AND ' . $alias_where . '.`visibility` IN ("both", "catalog")
AND (stock.quantity > 0 OR p.quantity > 0)
ORDER BY ' . $order_clause . ' , cp.id_product' .
' LIMIT ' . (((int)$page - 1) * $products_per_page . ',' . $products_per_page));
И второй раз в строке 1657 и я там так поправил:
WHERE ' . $alias_where . '.`active` = 1 AND ' . $alias_where . '.`visibility` IN ("both", "catalog")
AND (stock.quantity > 0 OR p.quantity > 0)
GROUP BY product_shop.id_product
ORDER BY ' . $order_clause . ' , cp.id_product' .
' LIMIT ' . (((int)$page - 1) * $products_per_page . ',' . $products_per_page));
А в файле Category.php :
WHERE product_shop.`id_shop` = '.(int) $context->shop->id.'
AND (stock.quantity > 0 OR p.quantity > 0)
AND cp.`id_category` = '.(int) $this->id
.($active ? ' AND product_shop.`active` = 1' : '')
.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')
.($idSupplier ? ' AND p.id_supplier = '.(int)$idSupplier : '');
Исправленный файл Category.php скопировал в /overrides/classes
Файл ps_facetedsearch.php пробовал и в /overrides/modules/ps_facetedsearch копировать, но не помогло
пока не заменил им родной файл в /modules/ps_facetedsearch
Куда его копировать, чтобы всё же правка через оверрайды работала и не пришлось всё по новой делать с обновлением модуля?
И ещё вопрос.
На сайте используется шаблон Transformer 4.2.5.
На главной странице выводятся слайдеры "Новые товары", "Популярные товары" и т.п.
В них, например, в "Новые товары", товары с количеством 0 по-прежнему высвечиваются.
Это эти модули тоже нужно отдельно крутить?