Доброго времени суток, дорогое сообщество!
Случайно наткнулся на код файла psearch.php в компоненте FAQ, который отвечает за поиск по БД компонентов.
Решил посмотреть и в остальных компонентах. Выявилось, что везде один недочёт.
И так, в чём заключается баг?
Некорректный поиск по след. компонентам:
Доска объявлений;
Универсальный каталог;
Вопросы и ответы;
Форум;
Фотоальбомы;
Прайс.
В запросе есть проверка записей на "публикуемость", но нет проверки публикации категории записей. Это означает, что в базе(неважно чего… доски объявлений, каталога и т.д.) у нас, к примеру, 100 записей и все они публикуемые. И в один момент мы решили закрыть какую-то категорию. И при поиске информации (компонент "Поиск"), мы можем получить данные этой категории, не смотря на то, что категория не публикуется.
Давайте решим этот вопрос.
Файл /components/board/psearch.php
Заменяем:
на:
Файл /components/catalog/psearch.php
Заменяем:
на:
Файл /components/content/psearch.php
Заменяем:
на:
Файл /components/faq/psearch.php
Заменяем:
на:
Файл /components/forum/psearch.php
Тут немного посложнее дело. Надо проверять, и категорию, и форум.
Заменяем:
на:
Файл /components/photos/psearch.php
Заменяем:
на:
Файл /components/price/psearch.php
Заменяем:
на:
Всё готово. Дело "простятское", но писал на скорую руку, если где ошибся — поправьте.
P.S.Сначала написал fuze — в версии 1.9.1. это будет исправлено.
Случайно наткнулся на код файла psearch.php в компоненте FAQ, который отвечает за поиск по БД компонентов.
Решил посмотреть и в остальных компонентах. Выявилось, что везде один недочёт.
И так, в чём заключается баг?
Некорректный поиск по след. компонентам:
Доска объявлений;
Универсальный каталог;
Вопросы и ответы;
Форум;
Фотоальбомы;
Прайс.
В запросе есть проверка записей на "публикуемость", но нет проверки публикации категории записей. Это означает, что в базе(неважно чего… доски объявлений, каталога и т.д.) у нас, к примеру, 100 записей и все они публикуемые. И в один момент мы решили закрыть какую-то категорию. И при поиске информации (компонент "Поиск"), мы можем получить данные этой категории, не смотря на то, что категория не публикуется.
Давайте решим этот вопрос.
Файл /components/board/psearch.php
Заменяем:
$sql = "SELECT f.*, f.title as title, a.title as cat, a.id as cat_id FROM cms_board_items f INNER JOIN cms_board_cats a ON a.id = f.category_id WHERE MATCH(f.title, f.content) AGAINST ('$query' IN BOOLEAN MODE) AND f.published = 1 LIMIT 100";
$sql = "SELECT f.*, f.title as title, a.title as cat, a.id as cat_id FROM cms_board_items f INNER JOIN cms_board_cats a ON a.id = f.category_id WHERE MATCH(f.title, f.content) AGAINST ('$query' IN BOOLEAN MODE) AND f.published = 1 AND a.published = 1 LIMIT 100";
Заменяем:
$sql = "SELECT i.*, c.title as cat, c.id as cat_id FROM cms_uc_items i INNER JOIN cms_uc_cats c ON c.id = i.category_id WHERE MATCH(i.title, i.fieldsdata) AGAINST ('$query' IN BOOLEAN MODE) AND i.published = 1 LIMIT 100";
$sql = "SELECT i.*, c.title as cat, c.id as cat_id FROM cms_uc_items i INNER JOIN cms_uc_cats c ON c.id = i.category_id WHERE MATCH(i.title, i.fieldsdata) AGAINST ('$query' IN BOOLEAN MODE) AND i.published = 1 AND c.published = 1 LIMIT 100";
Заменяем:
$sql = "SELECT con.*, cat.title cat_title, cat.id cat_id, cat.seolink as cat_seolink, cat.parent_id as cat_parent_id FROM cms_content con INNER JOIN cms_category cat ON cat.id = con.category_id WHERE MATCH(con.title, con.content) AGAINST ('$query' IN BOOLEAN MODE) AND con.is_end = 0 AND con.published = 1 LIMIT 100";
$sql = "SELECT con.*, cat.title cat_title, cat.id cat_id, cat.seolink as cat_seolink, cat.parent_id as cat_parent_id FROM cms_content con INNER JOIN cms_category cat ON cat.id = con.category_id WHERE MATCH(con.title, con.content) AGAINST ('$query' IN BOOLEAN MODE) AND con.is_end = 0 AND con.published = 1 AND cat.published = 1 LIMIT 100";
Заменяем:
$sql = "SELECT con.*, cat.title cat_title, cat.id cat_id FROM cms_faq_quests con INNER JOIN cms_faq_cats cat ON cat.id = con.category_id WHERE MATCH(con.quest, con.answer) AGAINST ('$query' IN BOOLEAN MODE) AND con.published = 1 LIMIT 100";
$sql = "SELECT con.*, cat.title cat_title, cat.id cat_id FROM cms_faq_quests con INNER JOIN cms_faq_cats cat ON cat.id = con.category_id WHERE MATCH(con.quest, con.answer) AGAINST ('$query' IN BOOLEAN MODE) AND con.published = 1 AND cat.published = 1 LIMIT 100";
Тут немного посложнее дело. Надо проверять, и категорию, и форум.
Заменяем:
$sql = "SELECT t.*, f.title as forum, f.id as forum_id, f.access_list FROM cms_forum_threads t INNER JOIN cms_forums f ON f.id = t.forum_id WHERE MATCH(t.title) AGAINST ('$query' IN BOOLEAN MODE) AND t.is_hidden=0 LIMIT 50";
$sql = "SELECT t.*, f.title as forum, f.id as forum_id, f.access_list FROM cms_forum_threads t INNER JOIN cms_forums f ON f.id = t.forum_id INNER JOIN cms_forum_cats cat ON cat.id = f.category_id WHERE MATCH(t.title) AGAINST ('$query' IN BOOLEAN MODE) AND t.is_hidden=0 AND cat.published = 1 AND f.published = 1 LIMIT 50";
Заменяем:
$sql = "SELECT f.*, a.title as cat, a.id as cat_id FROM cms_photo_files f INNER JOIN cms_photo_albums a ON a.id = f.album_id WHERE MATCH(f.title, f.description) AGAINST ('$query' IN BOOLEAN MODE) AND f.published = 1";
$sql = "SELECT f.*, a.title as cat, a.id as cat_id FROM cms_photo_files f INNER JOIN cms_photo_albums a ON a.id = f.album_id WHERE MATCH(f.title, f.description) AGAINST ('$query' IN BOOLEAN MODE) AND f.published = 1 AND a.published = 1";
Заменяем:
$sql = "SELECT i.*, c.title as cat, c.id as cat_id FROM cms_price_items i INNER JOIN cms_price_cats c ON c.id = i.category_id WHERE MATCH(i.title) AGAINST ('$query' IN BOOLEAN MODE)";
$sql = "SELECT i.*, c.title as cat, c.id as cat_id FROM cms_price_items i INNER JOIN cms_price_cats c ON c.id = i.category_id WHERE MATCH(i.title) AGAINST ('$query' IN BOOLEAN MODE) AND c.published = 1";
P.S.
Реклама #
eoleg 12 лет назад #
WALTERZ 12 лет назад #
Azura 12 лет назад #
eoleg 12 лет назад #
Bubble Gumoff 12 лет назад #
Bubble Gumoff 12 лет назад #
IRATE 12 лет назад #