Группе пользователей показывать чанк, а другим нет
Есть секция тикетов, есть группа авторов. Надо сделать так, чтобы пользователь из этой группы, залогинившись, видел на странице во фронтенде чанк с TicketForm, а аноним или юзер из другой группы — нет (или видел другой чанк, с hybridauth например).
Как это реализуется, не могу найти. Подскажите пожалуйста!
Как это реализуется, не могу найти. Подскажите пожалуйста!
Комментарии: 7
Оказывается пора осваивать группы ресурсов. Сделал группу ресурсов с правами для группы авторов и добавил в нее страницу. Анонимам она не видна, залогинившимся юзерам из группы видна. Жить можно. В идеале я представляю себе надпись во фронтенде «опубликовать текст», которая видна только залогиненным юзерам из нужной группы, а всем остальным, допустим выводится пустой чанк. Ну а за надписью скрывается TicketForm, опять же, доступный только правильным авторам. Но как выводить чанк с такой ссылкой в зависимости от авторизованности юзера? Пока не понятно.
Юзай fenom, пример:
{if 0 | ismember : 'Administrator'}
ты админ
{else}
ты юзер
{/if}
О, fenom! Не дорос я еще. Мне б такую же конструкцию, только
if юзер залогинен
if юзер из группы "Авторы"
чанк "привет"
/if
else
chunk "логинся"
/if
Только в виде, который я могу в шаблон документа вставить, ну или в виде сниппета, со сниппетами вроде научился )
В таком виде можно вставлять в шаблон если установлен последний pdoTools, вот нужная конструкция:
{if '' | isloggedin : 'web'}
{if 0 | ismember : 'Авторы'}
{include 'привет'}
{/if}
{/else}
{include 'логинься'}
{/if}
тут расписано о всех модификаторах фенома: docs.modx.pro/components/pdotools/parser#Встроенные-модификаторы
спасибо! попробую!
о, кажется нашел: modx.pro/help/4618/
Сниппет
Хотя феном более красив)
<?php
// Сниппет проверяет, состоит ли тот или иной юзер в группе из параметра "&if" v0.01 Beta
// Подключаем pdoTools для работы с инлайновыми чанками
$pdo = $modx->getService('pdoTools');
$uid = $modx->getOption('uid', $scriptProperties, (int) $_GET['user']); // пишем id user'а
if($uid=='') { $uid = $modx->user->get('id'); }
if($uid=='') { return ''; }
$if = $modx->getOption('if', $scriptProperties, ''); // пишем параметр if
$then = $modx->getOption('then', $scriptProperties, ''); // пишем параметр then
$else = $modx->getOption('else', $scriptProperties, ''); // пишем параметр else
$thenChunk = $modx->getOption('thenChunk', $scriptProperties, ''); // пишем параметр thenChunk
$elseChunk = $modx->getOption('elseChunk', $scriptProperties, ''); // пишем параметр elseChunk
// Есть ли юзер
if($modx->getCount('modUser', array('id'=>$uid))) { } else { $uid = $modx->user->get('id'); }
// Дёргаем данные
$user = $modx->getObject('modUser', array('id' => $uid));
if(is_object($user)) {
// Получаем группы
$groups = $user->getUserGroups();
// Разбиваем на элементы массива
$ifAr = explode(',', $if);
// Проверяем принадлежность групп юзера к группам указанным в параметрах сниппета
$return = false;
for($i=0; $i<count($groups); $i++)
{
for($a=0; $a<count($ifAr); $a++)
{
if($ifAr[$a] == $groups[$i]) {
$return = true;
}
}
}
// Возвращаем.... либо true/false, либо $then/$else....
if($return) {
if($thenChunk!='') {
return $pdo->getChunk($thenChunk);
} else {
return ($then!='' ? $then : $return);
}
} else {
if($elseChunk!='') {
return $pdo->getChunk($elseChunk);
} else {
return ($else!='' ? $else : $return);
}
}
} else {
return '';
}
Пример вызова: [[!ifUserGroup?
&if=`1`// id группы пользователей
&then=`
<div class="list-group">
[[!pdoPage:default=`Нет новых`?
&element=`getTickets`
&parents=`1147`
&showUnpublished=`1`
&limit=`30`
&tpl=`tpl.Tickets.list.row`
&sortby=`{"published":"ASC","createdon":"DESC"}`
]]
</div>
<div class="clear"></div>
[[!+page.nav]]
`
&elseChunk=`@INLINE <div class="alert alert-danger"><h4>У Вас недостаточно прав для просмотра этого раздела.</h4><p>Советуем Вам <a href="[[~1150?action=`auth/logout`]]" class="alert-link">выйти</a> и авторизоваться в аккаунте, который имеет права для просмотра защищённого содержимого.</p></div>`
]]
Может пригодится =)Хотя феном более красив)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.