Помощь Поддержка или помощь c Prestashop - 2 часть

Статус
В этой теме нельзя размещать новые ответы.
Ну ошибся немного :) getProductByFilters()

И это не то :(
Может ты говоришь о престашопе 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
);

Что дальше делать непонятно :conf:
 
И это не то :(
Может ты говоришь о престашопе 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
);

Что дальше делать непонятно :conf:
И как это непонятно? Листать в конец функции искать там главное условие WHERE и откорректировать его.

В 1.7.2.4 это строка 1544
 
Последнее редактирование:
И как это непонятно? Листать в конец функции искать там главное условие WHERE и откорректировать его.

В 1.7.2.4 это строка 1544

Странно. В файле /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)';
}

Где, что как править? Ничего не получается :(

Нашёл тут аналогичное предложение с чуть другим синтаксисом и проверкой только на складе

Для просмотра ссылки Войди или Зарегистрируйся

но всё равно не работает.
 
Подскажите, как в престе 1.7 сделать телефон обязательным при регистрации? В админке клиенты/адреса указал, что мобильник обязательное поле. Это помогает при добавлении адреса в самой админке, но на сайте при оформлении заказа поле указывается как (необязательное). Уже голову сломал. Пробовал в classes/Address.php добавить "required", не помогает.

и второй вопрос. При оформлении заказа можно обойти пункт создания адреса? а то как-то глупо получается, что я добавляю адрес для того, чтобы потом выбрать самовывоз или отделение новой почты, где все выбирается селектами.

Заранее, всем спасибо
 
Странно. В файле /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)';
}

Где, что как править? Ничего не получается :(

Нашёл тут аналогичное предложение с чуть другим синтаксисом и проверкой только на складе

Для просмотра ссылки Войди или Зарегистрируйся

но всё равно не работает.
Какая версия модуля? Преста не обновлялась, но возможно делались обновления самого модуля отдельно. Я строку говорил по модулю из дистрибутива 1.7.2.4 (версия модуля 2.0.0). В дистрибе 1.7.3.4 версия уже 2.1.1

Мой способ работает. Перед тем как писать, я на тестовом сервере за минуту исправил условия, проверил, что товар с 0шт пропадает и только тогда написал. Двойное условие для того, что может быть отключено управление запасами.

Ищите подстроку WHERE ' . $alias_where . '.`active` = 1 AND
 
Какая версия модуля?

Многоуровневая навигация
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 по-прежнему высвечиваются.

Это эти модули тоже нужно отдельно крутить?
 
Последнее редактирование:
Многоуровневая навигация
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 по-прежнему высвечиваются.

Это эти модули тоже нужно отдельно крутить?
Оверрайд модуля немного отличается по оформлению от класса. Надо в начале файла делать class <имя модуля>Override extends <имя модуля>

Если те модули из трансформера используют не стандартную функцию из Category, а свои, то надо там и править.
Но по моему опыту подобные модули обычно пользуются стандартной функцией. Поэтому еще раз проверьте, предварительно удалив в /app/cache/prod/ все что начинается на class* или вообще всю папку /prod/ :-D, т.к. в иногда в некоторых случаях только это и помогает.
 
добрый день! может быть кто-то сталкивался с такой задачей:
нужно при выборе размера товара менять его у всех товаров в листинге на выбранный.
это удобно пользователям, так как не нужно будет выбирать размер у каждого товара, чтобы узнать цену (цена зависит от размера товара
 
Подскажите, что не так? Загружаю через .csv товары с изображениями маленького размера, в каталоге продукции превью выглядят так:
image.png
2.png

Разве Преста не должна автоматически дозаливать отсутствующую часть изображения белым? Пересоздание миниатюр, видимо, не поможет в этой ситуации.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху