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

Несколько значений в xfsearch, как организовать?


     20.08.2015    Все вопросы » Общие вопросы    3078

вопрос
Здравствуйте.
По какому адресу можно попасть на страницу с несколькими ключевыми словами?
Например
сайт.ру/xfsearch/комедия/

Тогда будут новости содержащие в доп поле слово комедия.
Мне нужно чтобы можно было найти так же несколько слов, например:
сайт.ру/xfsearch/комедия+драма/

Какой адрес верный, или как его сделать?
Спасибо.

Ответа пока нет


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

vitnet
PHP-developer

vitnet - 20 августа 2015 23:56 -

Типа этого?

spilden01
Юзер

spilden01 - 21 августа 2015 21:29 -

Да, как сделать так?

vitnet
PHP-developer

vitnet - 22 августа 2015 10:46 -

Все очень просто
$xf = urldecode( $_GET['xf'] ); // <-- получаем "а+б", на выходе у нас "а б"

$arr = array(); // создаем пустой массив
$xf_arr = explode(' ', $xf); // разбиваем строку с помощью разделителя, в нашем случае это пробел

// перебираем массив
foreach($xf_arr as $xf) {
    $arr[] = (is_numeric($xf) ? "xfields LIKE '%{$xf}'" : "xfields LIKE '%{$xf}%'");
}

$xfsearch = count($arr) ? implode(' OR ', $arr) : $arr; // если в переменной $arr более одного элемента, с помощью implode объединяем элементы массива в строку используя разделитель OR, в противном случае у нас уже строка

/* конечный результат: */
xfields LIKE '%а%' OR xfields LIKE '%б%'"

spilden01
Юзер

spilden01 - 22 августа 2015 11:08 -

Спасибо огромное, только куда это вставлять?)))

LazyDev
PHP-developer

LazyDev - 22 августа 2015 11:23 -

spilden01, /engine/engine.php

Мой блог: LazyDev.pro

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

spilden01
Юзер

spilden01 - 22 августа 2015 12:27 -

Спасибо. Добавил в самый низ

$xf = urldecode( $_GET['xf'] );
$arr = array();
$xf_arr = explode(' ', $xf);
foreach($xf_arr as $xf) {
    $arr[] = (is_numeric($xf) ? "xfields LIKE '%{$xf}'" : "xfields LIKE '%{$xf}%'");
}

$xfsearch = count($arr) ? implode(' OR ', $arr) : $arr;

Какой в итоге получается разделитель? Тот что в примере не срабатывает(

spilden01
Юзер

spilden01 - 22 августа 2015 12:30 -

Для строчки
xfields LIKE '%а%' OR xfields LIKE '%б%'"
выдает ошибку.

vitnet
PHP-developer

vitnet - 22 августа 2015 14:06 -

У меня сейчас нет компа под рукой, объясните кто-нибудь человеку что куда вписать.

LazyDev
PHP-developer

LazyDev - 22 августа 2015 14:11 -

В /engine/engine.php найти :
$xf = urldecode ( $_GET['xf'] );
Ниже вставить :
$arr = array();
$xf_arr = explode(' ', $xf);
foreach($xf_arr as $xf)
    $arr[] = (is_numeric($xf) ? "xfields LIKE '%{$xf}'" : "xfields LIKE '%{$xf}%'");
$xfsearch = count($arr) ? implode(' OR ', $arr) : $arr;

Далее найти в SQL! запросе
xfields LIKE '%{$xf}%'

Заменить на
{$xfsearch}

Мой блог: LazyDev.pro

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

spilden01
Юзер

spilden01 - 22 августа 2015 14:42 -

Сделал, но при
сайт.ру/xfsearch/комедия+драма/
отображаются новости только по слову
драма
, а
комедия
не учитывается. Как исправить?
Спасибо.

vitnet
PHP-developer

vitnet - 22 августа 2015 15:12 -

+ найти в SQL! запросе
xfields LIKE '%{$xf}%'

Заменить на
{$xfsearch}

spilden01
Юзер

spilden01 - 22 августа 2015 16:26 -

Я заменил в engine.php и заработало, или все таки в sql запросе править?

spilden01
Юзер

spilden01 - 22 августа 2015 15:28 -

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

LazyDev
PHP-developer

LazyDev - 22 августа 2015 15:30 -

spilden01, не тот запрос

Мой блог: LazyDev.pro

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

spilden01
Юзер

spilden01 - 22 августа 2015 16:20 -

Спасибо все работает!

spilden01
Юзер

spilden01 - 22 августа 2015 16:58 -

Не работает
xfsearch/2015

числовое значение не ищет.

vitnet
PHP-developer

vitnet - 22 августа 2015 18:17 -

У вас не ищет, у нас все ок

spilden01
Юзер

spilden01 - 22 августа 2015 18:22 -

Странно, спасибо, буду искать проблему)) Какая у вас версию dle?

spilden01
Юзер

spilden01 - 22 августа 2015 18:22 -

Возможно это из-за того что я сделал замену в файле а не в sql?

vitnet
PHP-developer

vitnet - 22 августа 2015 18:33 -

Дополнил комментарий

spilden01
Юзер

spilden01 - 22 августа 2015 18:35 -

Можно точнее, в каком sql запросе? как его найти?

LazyDev
PHP-developer

LazyDev - 22 августа 2015 23:08 -

spilden01, для dle 10.5 в /engine/engine.php этот
$sql_select = "SELECT SQL_CALC_FOUND_ROWS p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}xfields LIKE '%{$xf}%' AND approve=1" . $where_date . " ORDER BY " . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];

Мой блог: LazyDev.pro

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

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

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

наверх