Получаем поля из профиля текущего пользователя
Есть у меня сайт, где в разных местах нужно выводить разные данные пользователя. Причем включая те, которые в профиле. Из коробки 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Это такой суррогат [[+modx.user.id]], только для полей профиля.
Возможно, потом доработаю когда появится такая необходимость.
подставляй в userinfo любое нужное поле.
1. Можно указать любого пользователя, а не текущего.
2. Если несколько полей или указан параметр toPh, то всё сохраняется в плейсхолдерах.
3. Если указано одно поле, оно и выводится при вызове сниппета.
А ваш сниппет можно было уместить в несколько строк:
Кстати, и коментарий Wassi Wassinen тоже работает — почему-то мне не удалось его нагуглить. Тем лучше, будет здесь, и кто-то в поиске на него наткнется.
Чисто для информации.
Сниппет мой, получается, настоящий велосипед, да еще с квадратными колесами :)
Но все равно полезно, много ценной инфы в комментариях.
П.С. Я писал Сергею Фещукову :)
Фильтр userinfo хорош, но нужно было выводить много полей, а вызывать везде этот фильтр… Есть подозрение, что быстрее вызвать сниппет один раз, чем много раз фильтр. Хотя это не проверялось, так что могу ошибаться.