Профиль пользователя в MODX Revolution

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

В настоящий момент для MODX Revolution нет готового дополнения, которое позволяет отобразить информацию о конкретном пользователе. Для этой задачи необходимо написать небольшой сниппет, используя API.

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

Прежде всего, необходимо создать страницу, которая будет содержать в себе наш код. Ее alias может быть, например, /users/profile/.

Разместите на этой странице следующий код:

[[!userProfile? &tpl='userProfileTpl']]

Здесь мы вызываем некешированный сниппет userProfile, и в качестве параметра передаем ему шаблон, в который он будет выводить информацию.

Теперь создайте сниппет с таким именем и вставьте туда следующий код:

// получаем шаблон
$tpl = $modx->getOption('tpl',$scriptProperties,'userProfileTpl');
// получаем значение переменной "user" из _GET
$userId = intval($_GET["user"]);
if($userId == 0){return "User not found!";}
// формируем запрос для загрузки информации из БД
$user = $modx->getObject('modUser',array('active' => true, 'id' => $userId ));
if($user == null){return "User not found!";}
$profile = $user->getOne('Profile');
// копируем данные в массив.
$data = array();
$data['user'] = $user->toArray();
$data['profile'] = $profile->toArray();
// выводим результат
return $modx->getChunk($tpl,$data);

Также необходимо создать чанк userProfileTpl с примерно таким кодом:

Логин: <strong>[[+user.username]]</strong><br />
Имя: <strong>[[+profile.fullname]]</strong><br />
Пол: <strong>[[+profile.gender:is='0':then='-']][[+profile.gender:is='1':then='мужской']][[+profile.gender:is='2':then='женский']]</strong><br />
Последний вход: <strong>[[+thislogin:date]]</strong><br />
Город: <strong>[[+profile.city]]</strong><br />
Сайт: <strong>[[+profile.website:default='не указан']]</strong><br />
<i>[[+profile.comment]]</i><br />

Отлично, теперь если открыть страницу с адресом /users/profile/?user=1, мы увидим информацию о пользователе с id=1.

Для того, что бы код из прошлой статьи заработал с новым кодом, необходимо сформировать ссылку на профиль пользователя в чанке userRowTpl , созданном в прошлом уроке.

Следующая наша публикация будет посвещена тому, что бы избавится от передачи параметра user через _GET, и привести URL вида /users/profile/?user=1 к виду /users/1/, постараемся адреса всех страниц на сайте сохранить в красивом виде.