Перейти к публикации
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.

Задействовать второстепенные группы

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

Есть один хук, который работает на основных группах. Но хотелось бы чтоб он срабатывал и на второстепенных группах.

 

Вот файл к нему:

 

class public_core_global_toggleVisibility extends ipsCommand 
{	
public function doExecute( ipsRegistry $registry )
{
	if ( ! $this->memberData['member_id'] )
	{
		$this->registry->output->showError( 'no_permission' );
	}

	if ( ! strstr( ",{$this->settings['im_toggleVisibility_groupPermission']},", ",{$this->memberData['member_group_id']}," ) )
	{
		$this->registry->output->showError( 'no_permission' );
	}


	if( $this->settings['disable_anonymous'] )
	{
		$newStatus = ( $this->memberData['login_anonymous']{ 0 } == 0 ) ? 1 : 0;
		$this->DB->update( 'members', array( 'login_anonymous' => $newStatus . '&1' ), 'member_id=' . $this->memberData['member_id'] );

		$status = $newStatus == 0 ? $this->lang->words['status_visible'] : $this->lang->words['status_anon'];

		$this->registry->output->redirectScreen( $this->lang->words['status_changed'] . $status, my_getenv( 'HTTP_REFERER' ) );
	}
}
}

 

 

И хук-файл:

 

class toggleVisibility
{
protected $registry;

public function __construct()
{
	$this->registry 	=  ipsRegistry::instance();
	$this->memberData 	=& $this->registry->member()->fetchMemberData();
	$this->lang		  	=  $this->registry->getClass('class_localization');
	$this->settings   	=& $this->registry->fetchSettings();	
}

public function getOutput()
{
	if ( ! strstr( ",{$this->settings['im_toggleVisibility_groupPermission']},", ",{$this->memberData['member_group_id']}," ) )
	{
 		return; 
	}

	$status = $this->memberData['login_anonymous']{ 0 } == 0 ? $this->lang->words['status_visible'] : $this->lang->words['status_anon'];
	return $this->registry->getClass( 'output' )->getTemplate( 'global' )->toggleVisibility( $status );
}
}

 

Что туда нужно добавить чтобы у второстепенных групп также срабатывало?

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

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

		if ( ! strstr( ",{$this->settings['im_toggleVisibility_groupPermission']},", ",{$this->memberData['member_group_id']}," ) )

 

заменить на

	$groups   = array_filter( explode(',', $this->memberData['mgroup_others']) );
	$groups[] = $this->memberData['member_group_id'];
	$groupPermission = explode(',', $this->settings['im_toggleVisibility_groupPermission']);

	if( ! count( array_intersect($groups, $groupPermission) ) )

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

@siv1987,

При нажатии выдаёт "Bad Request"

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

Поправлено. Была пропущена одна скобка.

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

@siv1987,

Ура получилось - Большое Спасибо!

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

И тогда ещё один маленький вопрос.

Есть:

<if test="$this->memberData['member_group_id'] == 1">{показ блока для группы 1}</else></if>

Как сделать чтоб и на доп. группу тоже действовало?

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

Вообще есть стандартный вызов для этого:

	/**
 * Check to see if a member is in a group or not
 *
 * @param	mixed		Either INT (member_id) OR Array of member data [MUST at least include member_group_id and mgroup_others]
 * @param	mixed		Either INT (group ID) or array of group IDs
 * @param	boolean		TRUE (default, check secondary groups also), FALSE (check primary only)
 * @return	boolean		TRUE (is in group) - FALSE (not in group)
 */
static public function isInGroup( $member, $group, $checkSecondary=true )

 

Т.е.:

<if test="IPSMember::isInGroup($this->memberData, 1)">{показ блока для группы 1, включая второстепенные}</else></if>

 

Или так:

<if test="IPSMember::isInGroup($this->memberData, array(1,2))">{показ блока для групп 1 и 2, включая второстепенные}</else></if>

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

@Ritsuka,

Спасибо. Выручили. :)

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

+1 к стандартному методу. Не знал про него.

  • 2 месяца спустя...
Опубликовано:

А есть что нибудь стандартное типа:

<if test="isGuest....">   гостям одно </else> остальным другое </if>

????

 

 

я пока использовал метод выше и проверял на принадлежность к группе 2

<if test="IPSMember::isInGroup($this->memberData, 2)">

 

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

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

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

Этот самый грамотный вариант.

Опубликовано:
А есть что нибудь стандартное типа:

 

гостям одно остальным другое

 

Да. Де-факто стандартом у самих IPS является конструкция:

 

<if test="$this->memberData['member_id']">пользователь<else />гость</if>

 

Посмотрите хотя бы на блок с инфо о пользователе в globalTemplate. Там именно такая проверка.

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

Сейчас на странице 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.