Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
Trotor

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

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

Выберите разделы, публикации из которых не будут отображаться в результатах "просмотра новых публикаций". Зажав клавишу 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 форумов, которые нужно исключить из поиска.

 

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

  • Upvote 2

Поделиться сообщением


Ссылка на сообщение

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

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

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

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