Абсолютно любую информацию о пользователе Joomla 3 можно получить используя Joomla Framework, в частности объект пользователя. При написании различных расширений возникает необходимость определить id пользователя, настоящее имя, какими правами обладает и к какой группе пользователей относится, его email, пароль, время регистрации и последнего посещения, а также другие непопулярные запросы. О том, как сделать это по всем правилам Joomla 3 не изобретая велосипед и используя ее собственные возможности -  вы узнаете прочитав этот полезный материал с примерами, который держу для себя как шпаргалку.

1. Инициализация объекта текущего пользователя Joomla 3

Для того, чтобы начать работать с данными пользователя в Joomla 3 для начала нужно обратиться к функции инициализации объекта текущего пользователя следующим образом:

$user = JFactory::getUser();

После чего переменная $user будет содержать в себе объект текущего пользователя? То есть если попробовать вывести его функцией print_r($user) вы должны увидеть примерно следующее содержание:

JUser Object ( [isRoot:protected] => 1 [id] => 85 [name] => Vova [username] => Vova-yandex [email]
=> vova@yandex.ru [password] => [password_clear] => [block] => 0 [sendEmail] => 0
[registerDate] => 2015-02-13 18:29:43 [lastvisitDate] => 2015-12-28 10:14:15 [activation] =>
[params] => {"admin_style":"","admin_language":"","language":"","editor":"","helpsite":"","timezone":""}
[groups] => Array ( [8] => 8 ) [guest] => 0 [lastResetTime] => 0000-00-00 00:00:00 [resetCount] => 0
[requireReset] => 0 [_params:protected] => Joomla\Registry\Registry Object ( [data:protected] =>
stdClass Object ( [admin_style] => [admin_language] => [language] => [editor] => [helpsite] =>
[timezone] => ) [separator] => . ) [_authGroups:protected] => Array ( [0] => 1 [1] => 8 )
[_authLevels:protected] => Array ( [0] => 1 [1] => 1 [2] => 2 [3] => 3 [4] => 6 )
[_authActions:protected] => [_errorMsg:protected] => [userHelper:protected] =>
JUserWrapperHelper Object ( ) [_errors:protected] => Array ( ) [aid] => 0 [otpKey] => [otep] => [cookieLogin] => 1

Это значит, что все прошло нормально и данные текущего пользователя ( т.е. того, который сейчас на сайте) были получены. Для того, чтобы вывести определенные данные пользователя после получения его объекта, в Joomla 3 есть предустановленные публичные переменные текущего пользователя. 

2. Переменные класса пользователя в Joomla 3

Таковыми являются:

id - Уникальный, цифровой номер пользователя.  Выводится запросом:

$user = JFactory::getUser();
echo $user->id; 

name - Имя пользователя введенное при регистрации. (например, Вова ). Формат запроса для вывода имени пользователя:

echo $user->name; 

username - Логин пользователя или имя на сайте. (например, vova1956). Можно получить следующим путем:

echo $user->username; 

email - email адрес пользователя. (например, vova@president.ru)

echo $user->email; 

password - Защифрованная строка пароля пользователя

echo $user->password; 

password_clear - Выводит только что поменянный пароль. В других случаях выводит 0. 

echo $user->password_clear; 

groups - Выдает инфу о принадлежности пользователя к определенной группе. 

echo $user->groups; 

block - Заблокирован ли пользователь в Joomla 3. Если выдает "1" то заблокирован

echo $user->block; 

registerDate - Дата регистрации пользователя.

echo $user->registerDate; 

lastvisitDate - Дата когда пользователь последний раз заходил к вам на сайт.

echo $user->lastvisitDate; 

guest - Если пользователь авторизован то выдает  '1'.

echo $user->guest; 

lastResetTime - Время последнего запроса сброса пароля.

echo $user->lastResetTime; 

resetCount - Количество запросов сброса пароля.

echo $user->resetCount; 

Кроме установленных переменных текущего пользователя, объект также хранит параметры настроек данного пользователя. Для того, чтобы получить содержание этих настроек используется функция getParam().  Возможными параметрами являются: admin_style - какой шаблон панели управления, admin_language - язык панели управления, language - язык сайта установленный для пользователя, editor - какой редактор установлен для пользователя, helpsite - установленный файл справки Joomla, timezone - часовой пояс пользователя. 

$user = JFactory::getUser();
$admin_style = $user->getParam('admin_style');
$admin_language = $user->getParam('admin_language');
$language = $user->getParam('language');
$editor = $user->getParam('editor');
$helpsite = $user->getParam('helpsite');
$timezone = $user->getParam('timezone');
echo $admin_style;
echo $admin_language;
echo $language;
echo $editor;
echo $helpsite;
echo $timezone;

Вывод переменной является пустым в случае, если значение не отличается от default значения, установленного по умолчанию. Далее пробежимся по примерам, дабы знать что и как использовать.

3. Примеры использования JFactory::getUser() в Joomla 3

1. Как получить данные пользователя в Joomla 3, если известен его id? Для этого послужит следующий код:

$user = JFactory::getUser('856');
echo $user->name; 

Где 856 это допустим ID пользователя. После чего выведется имя пользователя, если на сайте существует пользователь с ID 856. 

2. Как получить данные пользователя в Joomla 3, если известен его логин, точнее сказать username. Для этого используйте аналогичный код: 

$user = JFactory::getUser('VovaChuma');
echo $user->id; 
echo $user->name;

где в запросе  VovaChuma - username пользователя, которого мы знаем. В случае, если такой пользователь существует, то Joomla выдаст нам его id, а также имя пользователя. 

3. Как определить, является ли пользователь гостем на сайте? Для этого используем переменную 'guest' так:

$user = JFactory::getUser();
if ($user->guest) {
echo "Я гость";
}

Если вы не авторизованы на сайте, то в результате увидите надпись, что вы собственно гость.  

4. Как определить, что пользователь как минимум не гость? Практически аналогично:

$user = JFactory::getUser();
if (!$user->guest) {
echo "Я не гость";
}

4. Как определить, является ли пользователь администратором или суперпользователем на сайте? Для этого используем переменную 'groups', которая содержит в себе массив с ID групп, к которым относится запрошенный пользователь. Если пользователь входит в 8ю группу - то он суперпользователь. 

$user = JFactory::getUser();
$groups = $user->groups;
if (in_array(8, $groups)):
echo "Вы суперпользователь!";
endif;

Также есть вариант использовать параметр isroot, который закрепляется только за пользователем-администратором сайта. Тогда код определения администратора выглядит следующим образом:

$user = JFactory::getUser();
$isAdmin = $user->get('isRoot');
if ($isAdmin) {
echo "Ты админ!";
}
else  {
echo "Никакой ты не админ";
}

Есть еще один безошибочный вариант определить суперпользователя следующим путем:

$user = JFactory::getUser();
$isroot = $user->authorise('core.admin');
if ($isroot) {
    echo "Ты суперпользователь";
}

5. У каждого пользователя могут быть разные права. Суперпользователь, например, может редактировать материал кого угодно, тогда как Издатель (Publisher) только свой. Для того, чтобы определить объем прав на которые претендует пользователь, используется функция authorise. Первый параметр функции позволяет проверить определенные набор прав, второй - компонент на который они могут распространятся. Популярный пример ниже:

$user = JFactory::getUser();
	if ($user->authorise('core.edit', 'com_content'))
	{echo "<p>Вы можете редактировать все, что захотите!/p>";}
	else
	{echo "<p>Вы НЕ можете редактировать то, что вам заблагорассудится</p>";}
	if ($user->authorise('core.edit.own', 'com_content'))
	{echo "<p>Вы можете редактировать свой материал.</p>";
	}
	else
	{echo "<p>Вы не можете редактировать свой материал.</p>";}

Параметр 'сore.edit' - запрашивает наличие прав на безграничное редактирования в компоненте указанном в параметр "com_content', то есть в родном компоненте материалов Joomla. 'core.edit.own' - запрашивает наличие прав на редактирование только тех материалов, автором которых является текущий пользователь или установленный через getUser();

Полезные материалы по теме:

Полезный материал? Поддержи наш блог - лайкни в соцсети!
 

Для того чтобы задать вопрос или оставить комментарий вы можете авторизоваться через любую социальную сеть ниже:

Комментарии  

Анжелика Соколова
# Анжелика Соколова 29.04.2016 15:48
Здравствуйте! Подскажите как можно в модуль вывести информацию о текущем пользователе (id)?
JEDmin
+1 # JEDmin 29.04.2016 19:16
так собственно именно такие примеры в этом материале и приведены для ознакомления. Или зачем читать когда можно спросить?
Анатолий Смирнов
# Анатолий Смирнов 24.12.2016 15:23
Подскажите пожалуйста а как можно вывести ссылку на страницу с материалами определённого пользователя?
Заранее спасибо.
С уважением Анатолий.