Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
Haktar

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

Не находил.

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other sites

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

 

	/**
 * 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. Расписал выше в посте в комментариях к коду подробнее, что к чему.

Share this post


Link to post
Share on other sites
Хотя, если пароль на разделе устраивает - это самый простой вариант :)

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

 

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

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

 

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

Share this post


Link to post
Share on other sites
А если посредством if-а в шаблоне поиска?

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

 

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

 

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

 

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

  • Upvote 2

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...