Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

[BETA] Search Topic JQAutocomplete

Здесь авторы могут постить бета-версии своих модификаций для phpBB 3.0.x. Внимание! Не устанавливайте бета-версии модов на работающие форумы!
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Алг
Former team member
Сообщения: 926
Стаж: 8 лет 5 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 299 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Алг »

FomenkoAndrey писал(а):прошу собрать разбросанные по разным постам части инструкции в один, со всеми исправлениями, которые мы обсуждали.
У меня встречное предложение, если у вас всё заработало, может Вы тогда соберёте все и выложите в одном посте? Объясняю, я этот код вписала в файлы мода jQueryBase, т.е. они у меня в других местах и есть расхождения с тем, что должно быть в инструкции. Т.е. я не могу делать копи-паст, мне ещё поправлять надо, снова могут исчезнуть символы или скобки. А вы можете аккуратно собрать.
FomenkoAndrey писал(а):эта часть в конце лишняя + "&"
она не всегда лишняя, влияет на кеширование самим браузером, но я сейчас с ходу не нашла в гугле нужной ссылки с объяснением, поэтому смело удаляйте, кроме того, не знаю, как лучше для сео-шников, наверное без "&" в конце
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Alecto
phpBB 3.0.11
Сообщения: 2840
Стаж: 11 лет
Откуда: Украина! Харьков
Благодарил (а): 69 раз
Поблагодарили: 287 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Alecto »

с позволения Алг выкладываю все правки (доработка Алг) для штатного мода поиска.
исправлено:
- поиск выполняется по всему списку тем без ограничений
- отображается максимум N строк (20 - задается опционально) из списка найденных тем
- задается ширина списка поисковой выборки (600px - опционально)
- к названию темы добавлено название форума, где хранится тема
- исправлена ссылка открываемой из поиска темы с ID-темы до общефорумного ID-форума,ID-темы
- исправлена ссылка на темы, а которвх присутствует знак "|"
- поиск внутри форума осуществляется по всем темам данного форума, вклюяая его подфорумы любого уровня вложенности
- результаты поиска отсортированы так, что в начале идут темы, начинающиеся с введённой лексемы, затем все остальные в алфавитном порядке
- включен фикс для перенесённых тем от vulkan3 [BETA] Search Topic JQAutocomplete (ссылки и темы присутствуют в поисковой выборке, т.е. дублирование остается, но переход по ссылкам выполняется корректно, в нужную тему)... для приведенного ниже кода (после его установки) можно доработать фикс от vulkan3 кодом от АЛГ, который исключает ссылки на темы из поисковой выборки, т.е. дублирование ссылок и тем отсутствует - я использую этот вариант.

напоминаю о необходимости создания резервных копий редактируемых файлов!

в файле js/search_topic.js

1 - найти

Код: Выделить всё

			selectFirst: true,
добавить перед

Код: Выделить всё

			sortResults:false,
			width: 600,
			maxItemsToShow:20,
2 - найти

Код: Выделить всё

goto_topic();
заменить на

Код: Выделить всё

goto_topic(item);
3 - найти

Код: Выделить всё

goto_topic = function()
			{
				var id = $("#live_search_id").val();
				//$("#live_search").removeClass("search");
				//$("#live_search").addClass("loader");
				//$("#live_search").attr("disabled", 'disabled');
				if(id)
				{
					window.location.href = url_topic+"?t="+id;
				}
заменить на

Код: Выделить всё

			goto_topic = function(item)
			{
				var t = item.data[0];
				var f = item.data[1];
				if(t)
				{
					window.location.href = url_topic+"?f=" + f + "&t="+ t;
				}			

В файле ajax/vajax.php

1 - найти

Код: Выделить всё

else
	{
		$sql_where = ' AND UPPER(t.topic_title) ' . $db->sql_like_expression($db->any_char . $q . $db->any_char);
		$sql_approved = 'AND t.topic_approved = 1';
		$sql_forum = ($forum_id) ? 'AND t.forum_id = ' . $forum_id : '';

		$sql = "SELECT t.topic_id, t.topic_title
			FROM " . TOPICS_TABLE . " t
			WHERE t.topic_type IN (" . POST_NORMAL . ', ' . POST_STICKY . ")
				$sql_where
				$sql_approved
				$sql_forum
			ORDER BY topic_title";
		$result = $db->sql_query_limit($sql,$config['search_topic_num']);

		$topic_list = array();

		while ($row = $db->sql_fetchrow($result))
		{
			$topic_id = (int)$row['topic_id'];
			$topic_list[$row['topic_title']] = $topic_id;
			
			if (strpos(utf8_strtoupper($row['topic_title']), $q) !== false) 
			{
				$key = htmlspecialchars_decode($row['topic_title']);
				echo  $row['topic_title'] . "|$topic_id\n";
			}
		}
		$db->sql_freeresult($result);
	}
заменить на

Код: Выделить всё

else
	{
        $sql_where = ' AND UPPER(t.topic_title) ' . $db->sql_like_expression($db->any_char . $q . $db->any_char);
		$sql_approved = 'AND t.topic_approved = 1';
		$sql_forum = build_subforums_search($forum_id);

		$sql = "SELECT t.topic_id, t.topic_title, t.topic_status, t.topic_moved_id, t.forum_id, f.forum_name " .
			    " FROM " . TOPICS_TABLE . 
                " t JOIN " . FORUMS_TABLE . " f on t.forum_id = f.forum_id " .
                " WHERE t.topic_type IN (" . POST_NORMAL . ', ' . POST_STICKY . ")
				$sql_where
				$sql_approved
				$sql_forum
			ORDER BY topic_title";
        $result = $db->sql_query($sql);
       
        $arr_res = $arr_priority1 = $arr_priority2 = array();
		while ($row = $db->sql_fetchrow($result))
        {
            $pos = strpos(utf8_strtoupper($row['topic_title']), $q);
            if ($pos !== false && $auth->acl_get('f_read', $row['forum_id'])) 
			{
                $row['pos'] = $pos;
                if($pos == 0)
                    $arr_priority1[] = $row;
                else
                    $arr_priority2[] = $row;
			}           
        }
		$db->sql_freeresult($result);
        
        $arr_res = array_merge((array)$arr_priority1, (array)$arr_priority2);
         foreach ($arr_res as $topic_info)
        {
            $forum_id = $topic_info['forum_id'];
            $topic_id = ($topic_info['topic_status'] == 2) ? (int)$topic_info['topic_moved_id'] : (int)$topic_info['topic_id'];
            $topic_info['topic_title'] = str_replace('|', ' ', $topic_info['topic_title']);
 			$key = htmlspecialchars_decode($topic_info['topic_title'] . ' // ' . $topic_info['forum_name'] );
            echo  $key . "|$topic_id|$forum_id\n";
        }
	}
2 - найти добавить перед

Код: Выделить всё

function build_subforums_search($forum_id)
{
    global $db;
    if ($forum_id == 0) return '';
    $sql = "SELECT left_id, right_id " .
			" FROM " . FORUMS_TABLE . 
			" WHERE forum_id = " . $forum_id ;
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);
    
     $sql = "SELECT forum_id " .
			" FROM " . FORUMS_TABLE . 
			" WHERE left_id >= " . $row['left_id'] .
            " AND right_id <= " .  $row['right_id'] .
            " ORDER BY  left_id" ;
    $result = $db->sql_query($sql);
    
    $subforums = 'AND t.forum_id IN (';
    while ($row = $db->sql_fetchrow($result))
    {
        $subforums .= ( $row['forum_id'] . ',');
    }
    $subforums = substr($subforums, 0, -1) . " )"; 
    return $subforums;
}
Заменить старую версию файла js/src/jquery.autocomplete.js, новым из вложения
Вложения
jquery.autocomplete.zip
(4.52 КБ) 192 скачивания
Последний раз редактировалось Alecto 29.08.2013 20:06, всего редактировалось 18 раз.
Аватара пользователя
Алг
Former team member
Сообщения: 926
Стаж: 8 лет 5 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 299 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Алг »

И всё-таки хочу ещё немного подискутировать.
Итак, по части сервера мы пришли к согласию, считываем подходящие записи из таблицы, и все их отдаём клиенту.
А далее предлагаются 2 способа:
1. Изменить CSS файл плагина, добавив в него
FomenkoAndrey писал(а):.acResults {
width: 600px !important;
max-height: 420px;
padding: 0px;
border: 1px solid WindowFrame;
background-color: Window;
color: #000000;
overflow: hidden;
или, изменив JS файл плагина, получить возможность добавлять опции
Алг писал(а):width: 600,
maxItemsToShow:20
,
Если относительно width ( ширины блока вывода) можно предпочесть первый способ, то относительно кол-ва строк вывода есть большая разница
Допустим ввели "мот" и получили 1000 записей. Первым способом мы строим select на 1000 записей, устанавливаем высоту, чтобы было видно 20 ( зависит от браузера, кстати и от шрифта), а оставшуюся часть селекта просто скрываем, но она есть, цикл построения селекта сработал 1000 раз)
Вторым способом, плагин считает опцию maxItemsToShow:20 и построит селект на 20 записей( кроссбраузерно и независимо от фонта), а в кеше сохранит всю выборку в 1000
Потому я и предпочла сделать через опции, чтобы не было "насилования клиента"
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Alecto
phpBB 3.0.11
Сообщения: 2840
Стаж: 11 лет
Откуда: Украина! Харьков
Благодарил (а): 69 раз
Поблагодарили: 287 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Alecto »

Потому я и предпочла сделать через опции, чтобы не было "насилования клиента"
у меня через опции не заработало, причем поиск не выполняется вообще никак.
вот пост [BETA] Search Topic JQAutocomplete я там приложил файлы, может "со стороны" будет виден косяк?
Аватара пользователя
Алг
Former team member
Сообщения: 926
Стаж: 8 лет 5 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 299 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Алг »

FomenkoAndrey писал(а):у меня через опции не заработало, причем поиск не выполняется вообще никак.
Проверьте файрбагом, что с сервера Вам приходят нужные данные( а они должны приходить, если у нас серверная часть одна и та же) А далее будем разбираться, если Вы заинтересованы в работе второго способа. Дело в плагине, мои файлы плагина jquery.autocomplete.js и jquery.autocomplete.css отличаются от Ваших, потому у Вас может не сработать
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
Alecto
phpBB 3.0.11
Сообщения: 2840
Стаж: 11 лет
Откуда: Украина! Харьков
Благодарил (а): 69 раз
Поблагодарили: 287 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Alecto »

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

все правки и необходимые для этого файлы плагина выложены в обновленной инструкции здесь [BETA] Search Topic JQAutocomplete
на усмотрение модераторов, имеет смысл добавить ссылку на эти правки в первое сообщение темы.

настройки количества строк и ширины формы перенесены в соответствующий файл и CSS более не затрагивается.
тем кто использовал старый файл, необходимо обновить новым из вложения по ссылке.
Последний раз редактировалось Alecto 19.06.2013 17:52, всего редактировалось 1 раз.
Аватара пользователя
Алг
Former team member
Сообщения: 926
Стаж: 8 лет 5 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 299 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Алг »

Спасибо FomenkoAndrey-ю за сотрудничество :)
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
boloto
phpBB 1.4.4
Сообщения: 126
Стаж: 11 лет 3 месяца
Благодарил (а): 57 раз
Поблагодарили: 10 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение boloto »

Спасибо огромное за доработки. Добавил у себя на форуме.
Друзья, а подскажите, как вообще исключить из поиска "ссылки на перенесенные темы". Чтобы они даже не выдавались в результате поиска. Потому как нелогично одну и ту же тему два раза выводить.
Аватара пользователя
Алг
Former team member
Сообщения: 926
Стаж: 8 лет 5 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 299 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Алг »

boloto, попробуйте так ( не проверяла пока)
файл vajax.php
найти

Код: Выделить всё

$sql = "SELECT t.topic_id, t.topic_title, t.topic_status, t.topic_moved_id, t.forum_id, f.forum_name " .
заменить на

Код: Выделить всё

$sql = "SELECT t.topic_id, t.topic_title, t.forum_id, f.forum_name " .
найти

Код: Выделить всё

 " WHERE t.topic_type IN (" . POST_NORMAL . ', ' . POST_STICKY . ")
заменить на

Код: Выделить всё

 " WHERE  t.topic_status <> 2 AND t.topic_type IN (" . POST_NORMAL . ', ' . POST_STICKY . ")
найти

Код: Выделить всё

$topic_id = ($topic_info['topic_status'] == 2) ? (int)$topic_info['topic_moved_id'] : (int)$topic_info['topic_id'];
заменить на

Код: Выделить всё

$topic_id = (int)$topic_info['topic_id'];
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
Аватара пользователя
boloto
phpBB 1.4.4
Сообщения: 126
Стаж: 11 лет 3 месяца
Благодарил (а): 57 раз
Поблагодарили: 10 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение boloto »

Алг да, спасибо. Не дублирует в результатах поиска теперь.
Аватара пользователя
Alecto
phpBB 3.0.11
Сообщения: 2840
Стаж: 11 лет
Откуда: Украина! Харьков
Благодарил (а): 69 раз
Поблагодарили: 287 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Alecto »

boloto +1
проверил, работает.
мне этот вариант кажется более оптимальным, чем опубликованный в начале темы фикс от vulcan3.
Алг в очередной раз спасибо.
romeo_piter
phpBB 2.0.15
Сообщения: 1033
Стаж: 11 лет 9 месяцев
Благодарил (а): 168 раз
Поблагодарили: 20 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение romeo_piter »

Спасибо за допиливание и очеловечивание мода.

У меня есть небольшой вопросик, я открываю найденную ссылку в новой вкладке - так удобнее. Затем хочу вернуться в старое окно в поиск, а там набито полное название ссылки по которой я перешел, затирать которое крайне неудобно. Можно ли как-то очищать поле ввода при клике на ссылку и переходе в новую вкладку?
Аватара пользователя
Алг
Former team member
Сообщения: 926
Стаж: 8 лет 5 месяцев
Откуда: Израиль
Благодарил (а): 85 раз
Поблагодарили: 299 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Алг »

в файле js/search_topic.js
найти (возможно неполное соответствие)

Код: Выделить всё

window.open(url_topic+"?f=" + f + "&t="+ t  ,  '_blank' );
вставить перед

Код: Выделить всё

$("#live_search").val('');
Там упёртость и инертность, могут, кстати, в морду дать.
А ты проявляй интеллигентность, постарайся убеждать...

Т. Шаов
vulkan3
phpBB 2.0.0
Сообщения: 221
Стаж: 10 лет 9 месяцев
Благодарил (а): 32 раза
Поблагодарили: 2 раза

Re: [BETA] Search Topic JQAutocomplete

Сообщение vulkan3 »

FomenkoAndrey писал(а):boloto +1
проверил, работает.
мне этот вариант кажется более оптимальным, чем опубликованный в начале темы фикс от vulcan3.
Алг в очередной раз спасибо.
какой блин vulcan3 я vulkan3
Аватара пользователя
Vova_OB
phpBB 2.0.2
Сообщения: 310
Стаж: 10 лет 7 месяцев
Откуда: Kiev Ukraine
Благодарил (а): 74 раза
Поблагодарили: 8 раз

Re: [BETA] Search Topic JQAutocomplete

Сообщение Vova_OB »

добрый вечер всем

заметил что если тема ка объявление то он не ищет ее, если тема просто как тема то находит.
Как исправить, чтобы мод искал темы как обявления

Вернуться в «Бета-версии модов для phpBB 3.0.x»