Batyabest 18 октября 2014 1 13
Здравствуйте.
Подскажите в чем проблема. Создал форму регистрации, в которой пользователь выбирает группу, в которую регистрируется.
Так вот группа прописывается нормально, он попадает в нужную. А вот в таблице user в поле primaru_group всегда пишет 0 (нуль). Хотя туда должен писаться id группы.

На сайте в зависимости от группы показывается разная информация. Таким кодом я получал primary_group и в зависимости от него выводил разные чанки. Вот код:

$id = $_GET[id];
$res = $modx->getObject('modUser',$id);
$output = $res->get(primary_group);

Преобразовал его из этого кода:
$output = "";
if ($modx->user->isMember('Новичок')) {
$output = $modx->getChunk('user_novichok');
} else {
$output = $modx->getChunk('user_profi');
}
return $output;


Во втором коде получается группа текущего зарегистрированного пользователя. А как мне ее получить для любого пользователя, например по его id?
13 комментариев
Fi1osof1
Fi1osof 18 октября 2014г в 19:48 #
Таким кодом я получал primary_group и в зависимости от него выводил разные чанки.

А вот не надо плясать от primary_group. primary_group в MODX-е - эот от Ктулху. И использовать это не надо вообще. И вообще чанки брать в зависимости от группы - не по религии это. Запомните: если вы что-то хотите разделить, то права или есть на что-то, или их нет. Юзайте $modx->hasPermission($perm) - и будете на правильном пути.
B
Batyabest 18 октября 2014г в 20:02 #
А вообще странно... Раньше работало как надо, поэтому и стал его использовать. Но с какого момента перестало работать не могу выяснить, поэтому и трудно выявить причину...
Fi1osof1
Fi1osof 18 октября 2014г в 20:10 #
Вот это я и имею ввиду, когда говорю не использовать - странно. Такого в программировании не должно быть. Работать (или не работать) должно стабильно. Сегодня у вас работает, а завтра у вас не работает. Объяснение конечно можно найти почему оно не работает, но только зачем себе все усложнять?
Fi1osof1
Fi1osof 18 октября 2014г в 19:56 #
Вот немного поковырял когда же и где устанавливается primary_group. Так вот, в user/create-процессоре этот параметр вообще не устанавливается, его просто нет. Устанавливается он только в user/update-процессоре, только если были переданы группы пользователя. А главное - выбирается только та группа, у которой ранк = 0. И вот начига оно надо? Это рандом. А главное - вообще не видел, чтобы где-то в системе политик безопасности MODX-а это где-то использователось. В общем, если хочется головняка, то юзайте.
B
Batyabest 18 октября 2014г в 20:01 #
Вот так можно использовать как замену primary_group?

$id = $_GET[id];
$res = $modx->getObject('modUser',$id);
if ($res->isMember('Новичок')) {
$output = $modx->getChunk('user_novichok');
}


Ну это на скорую руку, лишь бы работало...
Fi1osof1
Fi1osof 18 октября 2014г в 20:08 #
Да. Но здесь есть два НО, больших и жирных:
1. Метод modUser::isMember() (а точнее modUser::getUserGroupNames(), вызываемый в modUser::isMember()), получает группы пользователей из сессии пользователя. Это чревато тем, что если пользователь уже был авторизован, а вы ему меняете группу пользователя, изменения возникнут только после уничтожения его сессии.
2. Метод modUser::isMember() не принимает id группы пользователей, что повлечет за собой понятные последствия в случае переименовывания группы пользователей.
Но в целом можно пользоваться. И да - этот метод так же не имеет никакого отношения к primary_group :)
B
Batyabest 18 октября 2014г в 20:19 #
А почему я привязался сначала в primary_group? Потому что значения там совпадали со значением id группы. Вот я подумал что таки и задумано))
Fi1osof1
Fi1osof 18 октября 2014г в 20:22 #
Это вам просто повезло. Совпадение.
B
Batyabest 18 октября 2014г в 20:34 #
А таким образом можно выводить информацию не для текущего пользователя, который залогинен, а для других пользователей? Например, хочу вывести профили пользователей сайта для просмотра. У в зависимости от группы в профилях разная информация.
Fi1osof1
Fi1osof 18 октября 2014г в 20:40 #
Вы зайдите здесь в чей-нибудь профиль. Увидите емейл? Вряд ли. Думаете из-за того, что вы не в той группе? Отчасти да, но главное - у вас просто нет прав. Смысл политик безопасности должен быть в том, есть у вас права или нет. Не важно в какой вы группе. У анонимуса может быть больше прав, чем у администратора. Все зависит от настроенных политик. К примеру, у меня это так:
{if $modx->hasPermission('some_perm')}
Some code...
{/if}

И я не парюсь в какой группе пользователь. Или у него есть права, и он увидит, или у него нет прав.
B
Batyabest 18 октября 2014г в 20:51 #
А можно ли сделать разными профили пользователей в зависимости от группы (в принципе сделано) и еще в зависимости от какого-либо второго значения в БД?
То есть в БД записано 1 или 0. Если пользователь в группе Новичек и у него в БД значение 1, то его профиль более расширен нежели у Новичка со значением 0 в поле БД.
Запутанно может объяснил?
Fi1osof1
Fi1osof 18 октября 2014г в 21:19 #
Не запутано, а бессмыслено. Я же сказал: используйте $modx->hasPermission(). Надо пользователю дать более расширенные поля - занесите его еще в одну группу пользователей. Один пользователь может находиться в нескольких группах, права суммируются. Не изобретайте велосипед.
K
Kutuz27 13 ноября 2014г в 17:31 #
Передача значений в чанки
RTFM
Chunk:

//html
I`m [[+user.name]] my identifier [[+user.id]]
//html

Call Chunk:

$output = $modx->getChunk('MyChunk',array(
'user' => array(
'id' => 123,
'name' => 'Pet`ka'
)
);
return $output;

Output:

//html
I`m Pet`ka my identifier 123
//html
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.