Перейти к содержанию
Форум поддержки пользователей VamShop

Запрет поиска товар в определенных категориях


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

Добрый день. 

На сайте почти все категории с розничным товаром, но есть 2-3 категории, в которых представлены только оптовые цены (при этом товары в оптовых дублируют товары из розницы). В результате при поиске выводятся два товара - с розничной и оптовой ценой. Нужно запретить вывод товара из этих конкретных категорий.

Нужна помощь в решении этой проблемы, так как штатными средствами это не реализовать. Где и что можно подправить?

 

Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, todd72 сказал:

Добрый день. 

На сайте почти все категории с розничным товаром, но есть 2-3 категории, в которых представлены только оптовые цены (при этом товары в оптовых дублируют товары из розницы). В результате при поиске выводятся два товара - с розничной и оптовой ценой. Нужно запретить вывод товара из этих конкретных категорий.

Нужна помощь в решении этой проблемы, так как штатными средствами это не реализовать. Где и что можно подправить?

 

Здравствуйте!

Только вручную указать id номера этих категорий.

В файле /advanced_search_result.php поменяйте:

	$where_str = " WHERE p.products_status = '1' "." AND c.categories_status=1 AND pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;

например на:

	$where_str = " WHERE p.products_status = '1' "." AND c.categories_status=1 AND c.categories_id <> 1 AND c.categories_id <> 2 AND pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;

Добавив в запрос AND c.categories_id <> 1 AND c.categories_id <> 2

1 и 2 - это id номера категорий, который не должны учитываться поиском.

id номера категорий видноа например при редактировании категорий в админке.

Укажите просто свои номера категорий, которые не должны учитываться при поиске.

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

Поменял, но теперь ошибка базы данных при попытке что--либо найти: сайт.ру/db_error.htm  // Интернет-магазин закрыт по техническим причинам, заходите позже.

Версия движка, кстати, давольно старая - 1.54. 

Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, todd72 сказал:

Поменял, но теперь ошибка базы данных при попытке что--либо найти: сайт.ру/db_error.htm  // Интернет-магазин закрыт по техническим причинам, заходите позже.

Версия движка, кстати, давольно старая - 1.54. 

Я ж прежде чес советовать, попробовал, у меня нормально всё, правда на текущей версии.

Наверное не там код добавили или не так.

Покажите, что и как Вы правите.

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

Сейчас сидел разбирался. У меня оригинальная строчка выглядет так:

//where-string
    $where_str = " WHERE p.products_status = '1' "." AND pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;

В ней нет:

AND c.categories_status=1

 

Меняю на этот вариант (категории, в которых не нужно искать товары - 35 и 42 соответственно):

$where_str  = " WHERE p.products_status = '1' "." AND c.categories_status=1 AND c.categories_id <> 35 AND c.categories_id <> 42  AND  pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;

В этом случае показывает снова вылет ошибки бд.

На всякий случай прикрепляю оригинальный файл.

 

PS. Интересно, на мою старую версию можно поставить модуль AJAX поиска?

advanced_search_result.php

Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, todd72 сказал:

Сейчас сидел разбирался. У меня оригинальная строчка выглядет так:


//where-string
    $where_str = " WHERE p.products_status = '1' "." AND pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;

В ней нет:


AND c.categories_status=1

 

Меняю на этот вариант (категории, в которых не нужно искать товары - 35 и 42 соответственно):


$where_str  = " WHERE p.products_status = '1' "." AND c.categories_status=1 AND c.categories_id <> 35 AND c.categories_id <> 42  AND  pd.language_id = '".(int) $_SESSION['languages_id']."'".$subcat_where.$fsk_lock.$manu_check.$group_check.$tax_where.$pfrom_check.$pto_check;

В этом случае показывает снова вылет ошибки бд.

На всякий случай прикрепляю оригинальный файл.

 

PS. Интересно, на мою старую версию можно поставить модуль AJAX поиска?

advanced_search_result.php

Так Вы мою строку целиком вставили в коде, всё равно ошибка?!

Тогда посмотрите в mysql_db_error.log, там текст ошибки, напишите, тогда будет видно, что не так.

Ссылка на сообщение
Поделиться на другие сайты
01/12/2019 22:12:06 | 1054 - Unknown column 'c.categories_status' in 'where clause' | SELECT distinct
                      p.products_id,
                      p.products_price,
                      p.products_model,
                      p.products_quantity,
                      p.products_shippingtime,
                      p.products_fsk18,
                      p.products_image,
                      p.products_weight,
                      p.products_tax_class_id,
                      pd.products_name,
                      pd.products_short_description,
                      pd.products_description FROM products AS p LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id)  LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' LEFT OUTER JOIN products_to_products_extra_fields AS pe ON (p.products_id = pe.products_id) WHERE p.products_status = '1'  AND c.categories_status=1 AND c.categories_id <> 35 AND c.categories_id <> 42 AND pd.language_id = '1' AND (  ( pd.products_keywords LIKE ('%головоломка%') OR pd.products_description LIKE ('%головоломка%') OR pd.products_short_description LIKE ('%головоломка%') OR pd.products_name LIKE ('%головоломка%') OR p.products_model LIKE ('%головоломка%')  OR pe.products_extra_fields_value LIKE ('%головоломка%') OR (pov.products_options_values_name LIKE ('%головоломка%') AND pov.language_id = '1') )  ) GROUP BY p.products_id ORDER BY p.products_id  | /advanced_search_result.php?keywords=%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BE%D0%BB%D0%BE%D0%BC%D0%BA%D0%B0&x=0&y=0

 

Да, заменил полностью на вашу, заменив только id категорий. Ругается на c.categories_status, по видимому, дело все же  устаревшем движке. Может быть есть решение для старой версии? 

Ссылка на сообщение
Поделиться на другие сайты
1 час назад, todd72 сказал:

Да, заменил полностью на вашу, заменив только id категорий. Ругается на c.categories_status, по видимому, дело все же  устаревшем движке. Может быть есть решение для старой версии? 

Там в коде выше ещё смотрите строку:

$from_str .= $subcat_join;

и над ней строка:

	$from_str  = "FROM ".TABLE_PRODUCTS."  AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) LEFT JOIN ".TABLE_MANUFACTURERS." AS m ON (p.manufacturers_id = m.manufacturers_id) LEFT JOIN products_to_categories as p2c2 ON (p2c2.products_id=p.products_id) LEFT JOIN categories as c ON (c.categories_id=p2c2.categories_id)";

Замените на этот код свою строку.

В новом коде добавлено left join categories as c

 

У вас этой строки, видимо, нет, поэтому и ошибку даёт.

 

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

Поменял, и снова ошибка.

Было:

$from_str  = "FROM ".TABLE_PRODUCTS." AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) ";
    $from_str .= $subcat_join;

Стало:

$from_str  = "FROM ".TABLE_PRODUCTS."  AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) LEFT JOIN ".TABLE_MANUFACTURERS." AS m ON (p.manufacturers_id = m.manufacturers_id) LEFT JOIN products_to_categories as p2c2 ON (p2c2.products_id=p.products_id) LEFT JOIN categories as c ON (c.categories_id=p2c2.categories_id)";
    $from_str .= $subcat_join;

 

Ошибка бд:

 

02/12/2019 07:12:43 | 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LE' at line 13 | SELECT distinct
                      p.products_id,
                      p.products_price,
                      p.products_model,
                      p.products_quantity,
                      p.products_shippingtime,
                      p.products_fsk18,
                      p.products_image,
                      p.products_weight,
                      p.products_tax_class_id,
                      pd.products_name,
                      pd.products_short_description,
                      pd.products_description  LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' LEFT OUTER JOIN products_to_products_extra_fields AS pe ON (p.products_id = pe.products_id) WHERE p.products_status = '1'  AND pd.language_id = '1' AND (  ( pd.products_keywords LIKE ('%кружка%') OR pd.products_description LIKE ('%кружка%') OR pd.products_short_description LIKE ('%кружка%') OR pd.products_name LIKE ('%кружка%') OR p.products_model LIKE ('%кружка%')  OR pe.products_extra_fields_value LIKE ('%кружка%') OR (pov.products_options_values_name LIKE ('%кружка%') AND pov.language_id = '1') )  ) GROUP BY p.products_id ORDER BY p.products_id  | /advanced_search_result.php?keywords=%D0%BA%D1%80%D1%83%D0%B6%D0%BA%D0%B0&x=13&y=11


Ошибка сохраняется как с новой строкой $where_str = , так и со старой. 

Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, todd72 сказал:

Поменял, и снова ошибка.

Было:


$from_str  = "FROM ".TABLE_PRODUCTS." AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) ";
    $from_str .= $subcat_join;

Стало:


$from_str  = "FROM ".TABLE_PRODUCTS."  AS p LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) LEFT JOIN ".TABLE_MANUFACTURERS." AS m ON (p.manufacturers_id = m.manufacturers_id) LEFT JOIN products_to_categories as p2c2 ON (p2c2.products_id=p.products_id) LEFT JOIN categories as c ON (c.categories_id=p2c2.categories_id)";
    $from_str .= $subcat_join;

 

Ошибка бд:

 


02/12/2019 07:12:43 | 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LE' at line 13 | SELECT distinct
                      p.products_id,
                      p.products_price,
                      p.products_model,
                      p.products_quantity,
                      p.products_shippingtime,
                      p.products_fsk18,
                      p.products_image,
                      p.products_weight,
                      p.products_tax_class_id,
                      pd.products_name,
                      pd.products_short_description,
                      pd.products_description  LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' LEFT OUTER JOIN products_to_products_extra_fields AS pe ON (p.products_id = pe.products_id) WHERE p.products_status = '1'  AND pd.language_id = '1' AND (  ( pd.products_keywords LIKE ('%кружка%') OR pd.products_description LIKE ('%кружка%') OR pd.products_short_description LIKE ('%кружка%') OR pd.products_name LIKE ('%кружка%') OR p.products_model LIKE ('%кружка%')  OR pe.products_extra_fields_value LIKE ('%кружка%') OR (pov.products_options_values_name LIKE ('%кружка%') AND pov.language_id = '1') )  ) GROUP BY p.products_id ORDER BY p.products_id  | /advanced_search_result.php?keywords=%D0%BA%D1%80%D1%83%D0%B6%D0%BA%D0%B0&x=13&y=11


Ошибка сохраняется как с новой строкой $where_str = , так и со старой. 

Вот файл без ошибки.

Только я не вижу у Вас в коде categories_id номеров.

advanced_search_result.php

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

Саша, большое спасибо, все работает!

Файл прикреплял оригинальный, без правок.

Ее вопрос: можно ли на старый движок поставить модуль ajax поиска? Или не стоит даже пытаться без внесения изменений в mysql?

Кстати, может быть кому нибудь, кто прочитает эту ветку, этот способ скрытия товаров в определенной категории при поиске и пригодится. Когда товар заканчивается, его лучше не отключать на сайте, так как по ссылке на него могут придти покупатели из поисковиков и купить что-нибудь другое. Но данный товар будет выводится при внутреннем поиске по сайту. Если его переместить в категорию, закрытую для внутреннего поиска, то и покупатели этот товар видеть не будут, хотя по факту он есть на сайте и доступен по прямой ссылке.

Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, todd72 сказал:

Саша, большое спасибо, все работает!

Файл прикреплял оригинальный, без правок.

Ее вопрос: можно ли на старый движок поставить модуль ajax поиска? Или не стоит даже пытаться без внесения изменений в mysql?

Можно, перенеся код только ajax поиска.

Но наверное всё-таки есть смысл подумать об обновлении до текущей версии.

Очень уж стараяу у Вас версия, много полезного и интересного было добавлена с версии 1.5

Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, support сказал:

Можно, перенеся код только ajax поиска.

Но наверное всё-таки есть смысл подумать об обновлении до текущей версии.

Очень уж стараяу у Вас версия, много полезного и интересного было добавлена с версии 1.5

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

Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, todd72 сказал:

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

Обычно делается тестовая копия, со своей базой данных.

т.е. копия сайта, например в поддомене или папке, полностью независимая от основного сайта.

Вот на этой тестовой копии и пробуете обновить, а потому уже меняете местами обновлённый сайт и старый, как всё настроите.

В этом случае магазин не перестаёт работать ни на секунду.

Ссылка на сообщение
Поделиться на другие сайты
14 минут назад, support сказал:

Обычно делается тестовая копия, со своей базой данных.

т.е. копия сайта, например в поддомене или папке, полностью независимая от основного сайта.

Вот на этой тестовой копии и пробуете обновить, а потому уже меняете местами обновлённый сайт и старый, как всё настроите.

В этом случае магазин не перестаёт работать ни на секунду.

Точно, так и сделаю. Спасибо за совет!

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