Получаем поля из профиля текущего пользователя
Есть у меня сайт, где в разных местах нужно выводить разные данные пользователя. Причем включая те, которые в профиле. Из коробки MODX умеет выводить только имя пользователя и id (ну и еще несколько мало кому нужных данных). Погуглил на предмет того, как выводить. Не нашел ничего стоящего, и написал свой велосипед под эти нужды.
Сниппет вызывается просто и имеет один параметр:
Cам сниппет:
Если понадобится, можно внести и недостающие поля (полный список)
С extended полями пока не заморачивался, ибо незачем.
ЗЫ: Писал на PHP второй раз в жизни, если что-то неоптимально — буду рад конструктивным замечаниям.
Сниппет вызывается просто и имеет один параметр:
[[!getUser? &field=`field_name`]]
Cам сниппет:
<?php
$profile = $modx->user->getOne('Profile');
switch ($field) {
case "fullname":
return $profile ? $profile->get('fullname') : '';
break;
case "email":
return $profile ? $profile->get('email') : '';
break;
case "phone":
return $profile ? $profile->get('phone') : '';
break;
case "mobilephone":
return $profile ? $profile->get('mobilephone') : '';
break;
case "fax":
return $profile ? $profile->get('fax') : '';
break;
case "gender":
return $profile ? $profile->get('gender') : '';
break;
case "address":
return $profile ? $profile->get('address') : '';
break;
case "country":
return $profile ? $profile->get('country') : '';
break;
case "city":
return $profile ? $profile->get('city') : '';
break;
case "zip":
return $profile ? $profile->get('zip') : '';
break;
case "state":
return $profile ? $profile->get('state') : '';
break;
case "website":
return $profile ? $profile->get('website') : '';
break;
}
Если понадобится, можно внести и недостающие поля (полный список)
С extended полями пока не заморачивался, ибо незачем.
ЗЫ: Писал на PHP второй раз в жизни, если что-то неоптимально — буду рад конструктивным замечаниям.
Комментарии: 13
Т.е., чтобы вывести 5 полей, надо 5 снипетов вызвать?
Ну вообще да. У меня не стояло задачи вывести в одном месте сразу несколько полей.
Это такой суррогат [[+modx.user.id]], только для полей профиля.
Возможно, потом доработаю когда появится такая необходимость.
Это такой суррогат [[+modx.user.id]], только для полей профиля.
Возможно, потом доработаю когда появится такая необходимость.
Коммент ниже.
[[+modx.user.id:userinfo=`username`]]
подставляй в userinfo любое нужное поле.
Кому интересно, предлагаю свой вариант подобного сниппета, но только тут несколько отличий:
1. Можно указать любого пользователя, а не текущего.
2. Если несколько полей или указан параметр toPh, то всё сохраняется в плейсхолдерах.
3. Если указано одно поле, оно и выводится при вызове сниппета.
А ваш сниппет можно было уместить в несколько строк:
1. Можно указать любого пользователя, а не текущего.
2. Если несколько полей или указан параметр toPh, то всё сохраняется в плейсхолдерах.
3. Если указано одно поле, оно и выводится при вызове сниппета.
<?php
if ( empty($id) ) return false;
$fields = empty($fields) ? array('fullname') : explode(',', trim($fields));
$toPh = empty($toPh) ? false : true;
$user = $modx->getObject('modUser', intval($id));
$profile = $user->getOne('Profile');
foreach ($fields as $field) {
$field = trim($field);
$return[$field] = $profile->get($field);
}
if ($toPh || count($return) > 1) $modx->toPlaceholders($return, 'user.'.$id);
else return $return[$field];
А ваш сниппет можно было уместить в несколько строк:
<?php
$profile = $modx->user->getOne('Profile');
$value = $profile ? $profile->get($field) : '';
return empty($value) ? '' : $value;
О, точно, спасибо! :)
Кстати, и коментарий Wassi Wassinen тоже работает — почему-то мне не удалось его нагуглить. Тем лучше, будет здесь, и кто-то в поиске на него наткнется.
Кстати, и коментарий Wassi Wassinen тоже работает — почему-то мне не удалось его нагуглить. Тем лучше, будет здесь, и кто-то в поиске на него наткнется.
А чего тут гуглить. Все есть в документации. Примеры в самом низу.
Туда не добрался. Страничка очень полезная, кстати, спасибо :)
Собственно, твой сниппет работает только с полями профиля, а фильтр userinfo и с полями пользователя тоже.
1. Можно указать любого пользователя, а не текущего.
Пожалуйста
[[+modx.user.id:notempty=`16`:userinfo=`fullname`]]
или так
[[+modx.user.id:ne=`0`:then=`16`:userinfo=`fullname`]]
2. Если несколько полей или указан параметр toPh, то всё сохраняется в плейсхолдерах.
Правда возможно вывести только одно поле в плейсхолдер
[[+modx.user.id:ne=`0`:then=`16`:userinfo=`fullname`:toPlaceholder=`userfullname`]]
Пользователь: [[+userfullname]]
Чисто для информации.
Сергей, спасибо за ликбез, очень интересно. Думаю, не мне одному.
Сниппет мой, получается, настоящий велосипед, да еще с квадратными колесами :)
Но все равно полезно, много ценной инфы в комментариях.
Сниппет мой, получается, настоящий велосипед, да еще с квадратными колесами :)
Но все равно полезно, много ценной инфы в комментариях.
На здоровье.
П.С. Я писал Сергею Фещукову :)
П.С. Я писал Сергею Фещукову :)
Да, я делал сниппет для клиентского сайта-галереи, где нужно было сделать удобное изменение и вывод информации о фотографе. Поэтому глубоко не увлекался и сделал только поля профиля. Думаю, развить идею и добавить поля пользователя не сложно, если это кому-то нужно будет.
Фильтр userinfo хорош, но нужно было выводить много полей, а вызывать везде этот фильтр… Есть подозрение, что быстрее вызвать сниппет один раз, чем много раз фильтр. Хотя это не проверялось, так что могу ошибаться.
Фильтр userinfo хорош, но нужно было выводить много полей, а вызывать везде этот фильтр… Есть подозрение, что быстрее вызвать сниппет один раз, чем много раз фильтр. Хотя это не проверялось, так что могу ошибаться.
а как удалить комент?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.