Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы Несколько значений в xfsearch, как организовать?

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


     20.08.2015    Общие вопросы    1136

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

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

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

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


Комментарии пользователей (22)

vitnet
218

2171 | 930

vitnet - 20 августа 2015 23:56 - Эксперт

Типа этого?

spilden01
26

spilden01 - 21 августа 2015 21:29 - Юзер

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

vitnet
218

2171 | 930

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
26

spilden01 - 22 августа 2015 11:08 - Юзер

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

Gameer
224

1118 | 394

Gameer - 22 августа 2015 11:23 - Эксперт

spilden01, /engine/engine.php

Истина в противоречии.​

spilden01
26

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
26

spilden01 - 22 августа 2015 12:30 - Юзер

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

vitnet
218

2171 | 930

vitnet - 22 августа 2015 14:06 - Эксперт

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

Gameer
224

1118 | 394

Gameer - 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}

Истина в противоречии.​

spilden01
26

spilden01 - 22 августа 2015 14:42 - Юзер

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

vitnet
218

2171 | 930

vitnet - 22 августа 2015 15:12 - Эксперт

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

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

spilden01
26

spilden01 - 22 августа 2015 16:26 - Юзер

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

spilden01
26

spilden01 - 22 августа 2015 15:28 - Юзер

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

Gameer
224

1118 | 394

Gameer - 22 августа 2015 15:30 - Эксперт

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

Истина в противоречии.​

spilden01
26

spilden01 - 22 августа 2015 16:20 - Юзер

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

spilden01
26

spilden01 - 22 августа 2015 16:58 - Юзер

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

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

vitnet
218

2171 | 930

vitnet - 22 августа 2015 18:17 - Эксперт

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

spilden01
26

spilden01 - 22 августа 2015 18:22 - Юзер

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

spilden01
26

spilden01 - 22 августа 2015 18:22 - Юзер

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

vitnet
218

2171 | 930

vitnet - 22 августа 2015 18:33 - Эксперт

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

spilden01
26

spilden01 - 22 августа 2015 18:35 - Юзер

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

Gameer
224

1118 | 394

Gameer - 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'];

Истина в противоречии.​

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

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