Уважаемые посетители портала Kamensk.NET! Напоминаем вам, что будучи зарегистрированным пользователем вы получаете возможность оставлять комментарии к новостям на сайте и к топикам на форуме, иметь доступ к скрытым разделам и много других благ и привелегий. Пожалуйста заполните регистрационную форму, это отнимет у вас всего лишь несколько минут вашего времени.

osCommerce: поиск в имени категории

osCommerce (ОСК, OSC) - самая известная CMS для интернет-магазина, распространяется по лицензии GPL.

Ниже приведена простая доработка механизма поиска товаров, которая добавляет название категории в область поиска.

Например, есть категория с названием "УАЗ", в ней есть товар "Двигатель ЗМЗ-4021".
При поиске "двигатель уаз" данный товар не будет найден, т.к. слово "уаз" не указано в названии товара (поиск производится по названию товара и по каталожному коду (model)). Приведённый ниже код устраняет этот недостаток.

Примечание: все изменения производились в текущей версии 2.2 RC2a.

Все изменения - в файле /catalog/advanced_search_result.php

1. Строку:

$from_str .= ", " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c";

ЗАМЕНИТЬ на:

$from_str .= ", " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES_DESCRIPTION . " cd";

2. Строку:

$where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id ";

ЗАМЕНИТЬ на:

$where_str = " where p.products_status = '1' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and cd.categories_id = c.categories_id ";

3. Строку:

$where_str .= "(pd.products_name like '%" . tep_db_input($keyword) . "%' or p.products_model like '%" . tep_db_input($keyword) . "%' or m.manufacturers_name like '%" . tep_db_input($keyword) . "%'";

ЗАМЕНИТЬ на:

$where_str .= "(pd.products_name like '%" . tep_db_input($keyword) . "%' or p.products_model like '%" . tep_db_input($keyword) . "%' or m.manufacturers_name like '%" . tep_db_input($keyword) . "%' or cd.categories_name like '%" . tep_db_input($keyword) . "%'";

Всё, должно работать Smile

Примечание: Перед модификацией не забудьте сохранить резервную копию файла.
Если при правке кода была допущена синтаксическая ошибка, то возможно будет выдаваться SQL-Error, даже если устанить ошибку или перезаписать файл. В этом случае нужно в базе данных в таблице sessions стереть строку с вашей сессией (можно удалить все строки).