Перейти к содержанию

edmsl

Актив
  • Постов

    500
  • Зарегистрирован

  • Посещение

  • Победитель дней

    8

Сообщения, опубликованные edmsl

  1. Smart Search


    Данный плагин это адаптация плагина (BIM) Quick Search (автор onlyME) версии 4.5.0 под версию IPS 4.7.

    Помимо адаптации были добавлены некоторый исправления и доработки.

    • Флуд-контроль
    • Поиск по конкретной фразе с помощью обрамления кавычками
    • Настраиваемое время ожидания ввода запроса в поле поиска
    • Поиск по вложенным категориям форума
    • Расширение доступных опций для виджета
    • Отображение превью записей из приложения Videos
    • Добавление записей в журнал поиска

    Оригинальный файл и обсуждение процесса доработки здесь:


     

  2. 5 часов назад, andros0789 сказал:

    скиньте код вставки в шаблон пжта)Не пашет ни в одном шаблоне)) Спасибо

    Плагин с помощью JS встраивается в шаблон поиска, тот, что ниже скинули.

    Если нужно ещё один поиск на странице, то используй виджет.

  3. Zero108 Поиск Эластик? Как-то странно он себя ведет все же. Но даже так разница очевидна.

    Спойлер

    firefox_2023-08-12_14-36-19.thumb.jpg.025367e7c687a22f3e06f17e259da1fb.jpg

    firefox_2023-08-12_14-36-56.thumb.jpg.7af1c21fdc09e1bc7ac09abd67b6527c.jpg

    firefox_2023-08-12_14-37-54.thumb.jpg.dac761eec6f30903038486f2de30ff6d.jpg

    В последнем варианте, с двойными кавычками, по идее, должен найти только те строки, где слова строго в указанном порядке. Но 3-я выдача не соответствует ему. Внутри в статье тоже нет такой фразы.

  4. Ответа я так и не нашел, поэтому решил делать, полагаясь на логику. В итоге написал так:

    // Удалил эту строку отсюда и сделал удаление кавычек только для $temp для проверки в цикле (1).
    //$term = preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $term);
    
    // Здесь проверка, что кавычки есть. Нужно для того, чтобы не не добавлялась * для поиска по неполному слову.
    $isStrictSearch = preg_match('/^(\'(.*)\'|"(.*)")$/', $term);
    
    $temp = preg_split(
    	'//u',
    	// Перенес сюда (1)
    	preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $term),
    	0,
    	PREG_SPLIT_NO_EMPTY
    );
    
    foreach ($temp as $a) {
    	$cnt = 0;
    	if (preg_match('/[^\w\s]+/u', $a)) {
    		$cnt++;
    		if ($cnt >= 2) {
    			\IPS\Output::i()->json(array('type' => 'OK', 'html' => "", 'term' => $term));
    		}
    	} else {
    		$cnt = 0;
    	}
    }

    Так как я не знаю, для чего нужна проверка циклом, а выполнялась она в оригинале со строкой без кавычек, то и сейчас она так же выполняется, но оригинальный запрос не меняется.

  5. @Exception Нужна твоя консультация.

    Проблема с поиском по конкретной фразе. Можно обернуть текст в двойные кавычки, и тогда поиск будет искать только те строки, где слова идут в указанном порядке. Но в плагине это не работает.

    В коде плагина есть такие строки:

    $term = preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $term);
    
    $temp = preg_split('//u', $term, 0, PREG_SPLIT_NO_EMPTY);
    
    foreach ($temp as $a) {
    	$cnt = 0;
    	if (preg_match('/[^\w\s]+/u', $a)) {
    		$cnt++;
    		if ($cnt >= 2) {
    			\IPS\Output::i()->json(array('type' => 'OK', 'html' => "", 'term' => $term));
    		}
    	} else {
    		$cnt = 0;
    	}
    }

    где $term = preg_replace('/^(\'(.*)\'|"(.*)")$/', '$2$3', $term); убирает кавычки в начале и конце строки. Из-за этого точный поиск не срабатывает.

    Собственно, мне не понятно, для чего это делается. Какая-то защита? Вроде из инпута в любом случае передается строка.

    И проверка в цикле мне тоже не понятна. Разбивается вся строка на символы, а потом проверка на длину символа, где считаются все НЕ буквы и НЕ пробелы. Видимо, это какие-то специфические проверки безопасности, о которых я не знаю, но хотелось бы понять это все.

  6. 10 минут назад, Zero108 сказал:

    Добавишь новую раздачу файла отдельно?

    Да, добавлю.

    10 минут назад, Zero108 сказал:

    Там есть учет типовых ошибок при наборе, учет неправильного языка при наборе и т.д.

    В общем, есть куда развивать плагин если что.

  7. 2 минуты назад, Zero108 сказал:

    От изначального кода там осталось 10%

    Нет, как раз-таки нового кода там процентов 10. Но то, что его лучше бы сделать отдельным файлом, я согласен. Все же плагин и сейчас развивается автором, и наличие моей ответвленной версии может сбить с толку.

    Буду выпускать его под именем Smart Search, название мне нравится, хотя и не совсем подходит.

    И да, проблему со скриншотом выше решил. Вечером скину новый файл сразу с исправлением.

  8. Для некоторых полей в БД можно включить опцию Allow filtering, что предполагает возможность фильтрации записей по этому полю. Но фильтры эти не отображаются на странице. Что-то где-то еще нужно включить?

    Спойлер

    Screenshot_7.jpg.07e644134bc0de6b39f5a77b487f993c.jpg

    Согласно шаблону, кнопка фильтров должна быть здесь

    Screenshot_8.thumb.jpg.91286ef8f8d4948582be26d52346fbc3.jpg

     

×
×
  • Создать...