Уважаемые посетители портала 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) . "%'";
Всё, должно работать 
Примечание: Перед модификацией не забудьте сохранить резервную копию файла.
Если при правке кода была допущена синтаксическая ошибка, то возможно будет выдаваться SQL-Error, даже если устанить ошибку или перезаписать файл. В этом случае нужно в базе данных в таблице sessions стереть строку с вашей сессией (можно удалить все строки).
Последние комментарии