Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Скрытие сообщений из результатов поиска

Опубликовано:

Есть раздел форума, в нём сообщения. Задача - как скрыть сообщения и темы в этом разделе в результатах поиска? Тобишь при заходе в раздел видны эти сообщения, но в результатах поиска - нет.

Рекомендованные сообщения

Опубликовано:

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

Опубликовано:

Плюс в "системных настройках > поиск" есть поле "исключить следующие форумы" для списка новых сообщений.

Опубликовано:
  • Автор

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

Вы не так поняли меня. Скажем есть раздел и юзер который пишет в нём. Затем он скажем хочет найти свои сообщения через поиск - но в поиске не должно быть результатов с этого раздела.

 

Вот как например есть настройка поиска:

Просмотр новых публикаций: игнорирование разделов

Выберите разделы, публикации из которых не будут отображаться в результатах "просмотра новых публикаций". Зажав клавишу Ctrl можно выбрать несколько разделов.

Такое же хотелось реализовать и по всем структурам поиска.

Опубликовано:

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

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

Опубликовано:
  • Автор

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

Долго объяснять зачем это мне нужно. Просто запускаю один проект. Нужно чтоб чтоб пользователь не смог находить посредством поиска ни свои ни чужие сообщения определённого раздела, хотя в этом разделе может писать.

 

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

Не находил.

Опубликовано:

не смог находить посредством поиска ни свои ни чужие сообщения определённого раздела

Для этого придется полностью отключить поиск по этому разделу. Если в настройках ничего нет, то только хуком.

Опубликовано:
  • Автор

Для этого придется полностью отключить поиск по этому разделу. Если в настройках ничего нет, то только хуком.

В том то и дело что нельзя нигде раздел выключить из поиска полностью.

Опубликовано:

Пароль на раздел поставьте. Поиск на запароленных разделах не работает :)

Опубликовано:
  • Автор

Пароль на раздел поставьте. Поиск на запароленных разделах не работает :)

 

О точно. Сейчас попробую :)

Опубликовано:

Вообще вот как определяется список форумов, где работает поиск:

 

	/**
 * Fetch forum IDs safe to use when searching, etc
 *
 * @param	int			Optional member ID, if no member ID is passed, it'll use current member
 * @param	array		Array of ids to skip
 * @return	array		Array of "good" IDs
 */
public function fetchSearchableForumIds( $memberId=null, $skipIds=array() )
{
	$forumIdsOk = array();
	$member 	= ( $memberId === null || $memberId == $this->_memberData['member_id'] ) ? $this->_memberData : IPSMember::load( $memberId, 'core' );
	$posts 		= intval( $member['posts'] );

	/* Ensure this has been set up */
	if ( ! is_array( $this->forum_by_id ) OR ! count( $this->forum_by_id ) )
	{
		$this->strip_invisible = 1;
		$this->forumsInit();
	}

	/* Get list of good forum IDs */
	foreach( $this->forum_by_id as $id => $data )
	{
		/* Тут проверяется маска доступа пользователя - может ли он вообще смотреть форум */
		if ( ! $this->registry->permissions->check( 'read', $data ) OR ! $this->registry->permissions->check( 'view', $data ) )
		{
			continue; //пропуск номера
		}

		/* Тут проверяется, не стоит ли на форуме пароль на доступ */
		if ( ! $this->forumsCheckAccess( $id, 0, 'forum', array(), true ) )
		{
			continue; //пропуск номера
		}

		/* Тут проверяется, может ли группа пользователя писать посты или видеть чужие посты в этом разделе, при этом не являясь супермодером или модером раздела */					
		if ( ( ! $data['sub_can_post'] OR ! $data['can_view_others'] ) AND !$this->memberData['g_is_supmod'] AND !isset( $this->memberData['forumsModeratorData'][ $id ] ) )
		{
			continue;
		}

		/* Тут проверяется, набрал ли пользователь минимально необходимое количество постов для просмотра раздела */
		if ( $data['min_posts_view'] > $posts AND !$member['g_is_supmod'] )
		{
			continue;
		}

		/* Тут выкидываются форумы, которые пользователь исключил сам в расширенных условиях поиска */
		if ( is_array( $skipIds ) AND count( $skipIds ) )
		{
			if ( in_array( $id, $skipIds ) )
			{
				continue;
			}
		}

		$forumIdsOk[] = $id;
	}

	return $forumIdsOk;
}

 

Теоретически можно попробовать перегрузить этот метод хуком, но с хуками, модифицирующими классы приложений, все всегда крайне ненадежно и смутно. Ну или просто вхардкодить подмешивание к $skipIds массива нужных вам id-шников - /admin/applications/forums/sources/classes/forums/class_forums.php.

 

Хотя, если пароль на разделе устраивает - это самый простой вариант :)

 

UPD. Расписал выше в посте в комментариях к коду подробнее, что к чему.

Опубликовано:
  • Автор
Хотя, если пароль на разделе устраивает - это самый простой вариант :)

С паролем тоже никак. После ввода пароля через поиск находишь сообщения кто писал в разделе.

 

Теоретически можно попробовать перегрузить этот метод хуком, но с хуками, модифицирующими классы приложений, все всегда крайне ненадежно и смутно. Ну или просто вхардкодить подмешивание к $skipIds массива нужных вам id-шников - /admin/applications/forums/sources/classes/forums/class_forums.php

Этого я не знаю как сделать.

 

А если посредством if-а в шаблоне поиска?

Опубликовано:
А если посредством if-а в шаблоне поиска?

Испортится постраничная разбивка. Пустые, неполные страницы результатов поиска нужны? :)

 

Могу попробовать написать хук.

Опубликовано:
  • Автор

Испортится постраничная разбивка. Пустые, неполные страницы результатов поиска нужны? :)

Не критично :)

 

Могу попробовать написать хук.

Было бы хорошо. Тем более это будет первый хук в таком роде.

Опубликовано:

Все оказалось на удивление просто: ri_sforums.xml

 

Установите хук, в системных настройках в разделе "Hooks" появится группа настроек "Searchable forums". Там в единственном поле через запятую укажете id форумов, которые нужно исключить из поиска.

 

Отпишитесь, как оно.

Опубликовано:
  • Автор

Установил. При заходе на страницу поиска выдаёт вот такое:

Strict Standards: Declaration of class_forums_searchable::fetchSearchableForumIds() should be compatible with that of class_forums::fetchSearchableForumIds() in /var/www/imtw.ru/hooks/class_forums_searchable_b86902c278a35533dbad16b7b57f5eee.php on line 17

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.