Опубликовано: 15 июля 201213 г Есть один хук, который работает на основных группах. Но хотелось бы чтоб он срабатывал и на второстепенных группах. Вот файл к нему: 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 ); } } Что туда нужно добавить чтобы у второстепенных групп также срабатывало?
Опубликовано: 15 июля 201213 г 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) ) )
Опубликовано: 15 июля 201213 г Автор И тогда ещё один маленький вопрос.Есть:<if test="$this->memberData['member_group_id'] == 1">{показ блока для группы 1}</else></if>Как сделать чтоб и на доп. группу тоже действовало?
Опубликовано: 15 июля 201213 г Вообще есть стандартный вызов для этого: /** * 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>
Опубликовано: 30 сентября 201213 г А есть что нибудь стандартное типа:<if test="isGuest...."> гостям одно </else> остальным другое </if> ???? я пока использовал метод выше и проверял на принадлежность к группе 2<if test="IPSMember::isInGroup($this->memberData, 2)"> Но интуиция подсказывает, что есть более грамотные варианты.
Опубликовано: 30 сентября 201213 г Но интуиция подсказывает, что есть более грамотные варианты. Этот самый грамотный вариант.
Опубликовано: 1 октября 201213 г А есть что нибудь стандартное типа: гостям одно остальным другое Да. Де-факто стандартом у самих IPS является конструкция: <if test="$this->memberData['member_id']">пользователь<else />гость</if> Посмотрите хотя бы на блок с инфо о пользователе в globalTemplate. Там именно такая проверка.
Есть один хук, который работает на основных группах. Но хотелось бы чтоб он срабатывал и на второстепенных группах.
Вот файл к нему:
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 ); } }Что туда нужно добавить чтобы у второстепенных групп также срабатывало?