Здравствуйте. Подскажите в чем проблема. Создал форму регистрации, в которой пользователь выбирает группу, в которую регистрируется. Так вот группа прописывается нормально, он попадает в нужную. А вот в таблице 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?
Таким кодом я получал primary_group и в зависимости от него выводил разные чанки. А вот не надо плясать от primary_group. primary_group в MODX-е - эот от Ктулху. И использовать это не надо вообще. И вообще чанки брать в зависимости от группы - не по религии это. Запомните: если вы что-то хотите разделить, то права или есть на что-то, или их нет. Юзайте $modx->hasPermission($perm) - и будете на правильном пути.
Вот немного поковырял когда же и где устанавливается primary_group. Так вот, в user/create-процессоре этот параметр вообще не устанавливается, его просто нет. Устанавливается он только в user/update-процессоре, только если были переданы группы пользователя. А главное - выбирается только та группа, у которой ранк = 0. И вот начига оно надо? Это рандом. А главное - вообще не видел, чтобы где-то в системе политик безопасности MODX-а это где-то использователось. В общем, если хочется головняка, то юзайте.
Вот так можно использовать как замену primary_group? $id = $_GET[id];
$res = $modx->getObject('modUser',$id);
if ($res->isMember('Новичок')) {
$output = $modx->getChunk('user_novichok');
} Ну это на скорую руку, лишь бы работало...
А вообще странно... Раньше работало как надо, поэтому и стал его использовать. Но с какого момента перестало работать не могу выяснить, поэтому и трудно выявить причину...
Да. Но здесь есть два НО, больших и жирных:
Вот это я и имею ввиду, когда говорю не использовать - странно. Такого в программировании не должно быть. Работать (или не работать) должно стабильно. Сегодня у вас работает, а завтра у вас не работает. Объяснение конечно можно найти почему оно не работает, но только зачем себе все усложнять?
А почему я привязался сначала в primary_group? Потому что значения там совпадали со значением id группы. Вот я подумал что таки и задумано))
Это вам просто повезло. Совпадение.
А таким образом можно выводить информацию не для текущего пользователя, который залогинен, а для других пользователей? Например, хочу вывести профили пользователей сайта для просмотра. У в зависимости от группы в профилях разная информация.
Вы зайдите здесь в чей-нибудь профиль. Увидите емейл? Вряд ли. Думаете из-за того, что вы не в той группе? Отчасти да, но главное - у вас просто нет прав. Смысл политик безопасности должен быть в том, есть у вас права или нет. Не важно в какой вы группе. У анонимуса может быть больше прав, чем у администратора. Все зависит от настроенных политик. К примеру, у меня это так: {if $modx->hasPermission('some_perm')}
Some code...
{/if} И я не парюсь в какой группе пользователь. Или у него есть права, и он увидит, или у него нет прав.
А можно ли сделать разными профили пользователей в зависимости от группы (в принципе сделано) и еще в зависимости от какого-либо второго значения в БД? То есть в БД записано 1 или 0. Если пользователь в группе Новичек и у него в БД значение 1, то его профиль более расширен нежели у Новичка со значением 0 в поле БД. Запутанно может объяснил?
Не запутано, а бессмыслено. Я же сказал: используйте $modx->hasPermission(). Надо пользователю дать более расширенные поля - занесите его еще в одну группу пользователей. Один пользователь может находиться в нескольких группах, права суммируются. Не изобретайте велосипед.
Передача значений в чанки 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
Im Pet
ka my identifier 123
//html