Это решение пригодится тем, кому нужно, чтобы содержание страницы для разных групп пользователей отличалось, т.е. одним пользователям нужно показать одно, другим другое. Решается она простым сниппетом.

Вариант 1

<?php
$output = '';
if ($modx->user->isMember('Group1')) {
    $output = $modx->getChunk('chunk1');
} else if ($modx->user->isMember('Group2')) {
    $output = $modx->getChunk('chunk2');
} else {
    $output = $modx->getChunk('chunk3');
}
return $output;

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

[[!filterContent]]

Для простых случаев этого вполне достаточно.


Вариант 2

А теперь давайте теперь сделаем сниппет более универсальным. Будем передавать через параметры группы и содержание.

<?php
$groups = $modx->getOption('groups',$scriptProperties,'');
$contents = $modx->getOption('contents',$scriptProperties,'');
$firstGroup = $modx->getOption('firstGroup',$scriptProperties,true);
$output = $default = $modx->getOption('default',$scriptProperties,'');

$groups = explode(',',$groups);
$contents = explode(',',$contents);
if ($groups) {
    foreach($groups as $key=>$group){
        if ($modx->user->isMember(trim($group))) {
            $output = isset($contents[$key]) ? $contents[$key] : $default;
            if ($firstGroup) break;
        }
    }
} 

return $output;

В этом сниппете доступны 4 параметра — groups, contents, default и firstGroup.

  • groups — через запятую указываем название групп.
  • contents — через запятую указываем контент, который будет выводится для соответствующий группы. Первое значение будет выведено для первой группы, второе — для второй и т.д.
  • default — контент по-умолчанию, который будет выводится для групп, если для них не передан контент, и для пользователей, которые не входят ни в одну группу. Желательно добавить в параметры сниппета, чтобы не писать его при вызове.
  • firstGroup — Может быть так, что пользователь входит в несколько групп. Тогда выведется контент, переданных для последней группы, в которую он входит, или дефолтное значение из параметра $default, если контента для этой последней группы нет. Если указать 1, то выведется контент первой группы и дальше проверка остановится. Желательно также добавить в параметры сниппета с дефолтным значением, чтобы не писать его при вызове.

Теперь вызов сниппета выглядит так

// В параметре контента можно передавать чанки, теги полей ресурса или строку.
[[!filterContent? &groups=`Group1,Group2,Group3` &contents=`[[*content]],[[$Chunk1]],` &default=`Нет данных` &firstGroup=`0`]]

Для пользователей группы Group1 выведется содержание текущей страницы. Для пользователей группы Group2 — содержание чанка Chunk1. Пользователи группы Group3 и остальные увидят на странице «Нет данных».

Вот такой велосипедик получился.

21 декабря 2015, 16:28   1617     0

Комментарии ()

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

    Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.