Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как исправить проблему с неточностью поиска по дополнительным полям?

Как исправить проблему с неточностью поиска по дополнительным полям?


     17.07.2015    Общие вопросы по PHP, Хаки, Ламерские вопросы    2138

вопрос
Добавил около ста новостей, и заметил неточность при поиске по доп полям. Сделаны они в DLE конечно по-тупому, вообщем (у меня по русскому языку двойка, я не знаю, что в русском языке не существует слова вообщем) есть доп поле "жанр" с галочкой о перекрёстных гиперссылках и есть доп поле "рецензии" типа несколько строк без этой самой галочки. При поиске /xfseach/музыка (жанр вписываемый в доп поле "жанр") оно мне выводит новости, в которых в поле "рецензии" встречаются слова музыка, музыкальный... Есть возможность как-то убрать эту неточность при поиске? Появилась идея рецензии вписывать в полную новость, но насколько я знаю нет никакого стандартного тега, позволяющего скрывать тег {fullstory} если в нем ничего не вписано, как [xfvalue], или есть такое в DLE? Заранее благодарю за помощь.

Ответил: PunPun


После некоторых манипуляций, я достиг верного решения этой проблемы, но выход не очень то и хорош. Если нужно, могу поделится.

Ищем в файлах /engine/modules/show.short.php, /engine/modules/show.custom.php и два раза /engine/modules/show.full.php
$value3[] = "<a href=\"" . $config['http_home_url'] . "xfsearch/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>";
Заменяем на:
$value3[] = "<a href=\"" . $config['http_home_url'] . "".$preg_safe_name."/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>";

Далее открываем файл /engine/engine.php находим :
"xfsearch/"
Меняем на :
urlencode($_GET['xn'])
Далее находим :
$xf = @$db->safesql
Выше вставляем :
$xn = @$db->safesql ( htmlspecialchars ( strip_tags ( stripslashes ( trim ( $_GET['xn'] ) ) ), ENT_QUOTES, $config['charset'] ) );
Далее находим :
xfields LIKE '%{$xf}%'
Меняем на :
SUBSTRING_INDEX( SUBSTRING_INDEX( xfields,  '{$xn}|', -1 ) ,  '||', 1 ) LIKE '%$xf%'

Далее открыть .htaccess (там где index.php) найти :
RewriteRule ^xfsearch/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^xfsearch/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]
И заменить на :
RewriteRule ^([^/]*)/([^/]*)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2 [L]
RewriteRule ^([^/]*)/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2&cstart=$3 [L]

На этом все.

4 комментария

LazyDev
PHP-developer

LazyDev - 17 июля 2015 21:34 -

***Комментарий удален***

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

DomiTori
Юзер

DomiTori - 18 июля 2015 04:28 -

Спасибо большое за ваш ответ. Почему выход не очень? Больше запросов?

DomiTori
Юзер

DomiTori - 18 июля 2015 04:48 -

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

LazyDev
PHP-developer

LazyDev - 18 июля 2015 07:17 -

DomiTori, просто
LIKE '$xf'
заменить на
LIKE '%{$xf}%'

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх