Я пытаюсь получить информацию о моих пользователях с помощью функции getUser () с php-скриптом, расположенным в iframe (обертке) Joomla. Кажется, что проблема передается параметрам в iframe-код. Единственный способ, которым я могу получить информацию о пользователях, – это вставить код в базовую статью (которая не является iframe).
Var_dump ($ user); вывод показывает:
object(JUser)#17 (23) { ["isRoot":protected]=> NULL ["id"]=> int(0) ["name"]=> NULL ["username"]=> NULL ["email"]=> NULL ["password"]=> NULL ["password_clear"]=> string(0) "" ["usertype"]=> NULL ["block"]=> NULL ["sendEmail"]=> int(0) ["registerDate"]=> NULL ["lastvisitDate"]=> NULL ["activation"]=> NULL ["params"]=> NULL ["groups"]=> array(0) { } ["guest"]=> int(1) ["_params":protected]=> object(JRegistry)#18 (1) { ["data":protected]=> object(stdClass)#19 (0) { } } ["_authGroups":protected]=> NULL ["_authLevels":protected]=> NULL ["_authActions":protected]=> NULL ["_errorMsg":protected]=> NULL ["_errors":protected]=> array(0) { } ["aid"]=> int(0) }
Некоторое представление о том, что происходит не так? Спасибо, Флоран
<?php define( '_JEXEC', 1 ); define('JPATH_BASE', dirname(__FILE__) ); define( 'DS', DIRECTORY_SEPARATOR ); require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' ); require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' ); $user = JFactory::getUser(); echo "<p>Your name is {$user->name}, your email is {$user->email}, and your username is $user->username}</p>"; echo "<p>Your usertype is {$user->usertype} which has a group id of {$user->gid}.</p>"; //var_dump($user); ?>
Как уже говорилось, если вы используете оболочку, среда Joomla неизвестна. Поэтому вам необходимо внедрить его перед использованием Joomla API. Для этого просто скопируйте и вставьте этот код (или создайте новый файл PHP и включите его на свою страницу):
<?php define('_JEXEC', 1 ); define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] ); define( 'DS','/' ); require_once ( JPATH_BASE.DS. 'includes'.DS.'defines.php' ); require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' ); require(JPATH_BASE.DS.'libraries/joomla/factory.php'); $mainframe =& JFactory::getApplication('site'); $mainframe->initialise(); ?>
Конечно, страница, которая включает iframe, не «знает» Joomla – это другая среда!
Если я правильно понял, чего вы пытаетесь достичь, тогда вам действительно нужно создать статью в Joomla, которая отображает информацию пользователя, но вместо того, чтобы получить идентификатор пользователя:
$user = JFactory::getUser();
вы должны отправить его как параметр POST / GET с страницы OUTER (вы можете добавить какую-то строку auth-string, если вам важны вопросы безопасности). Статья прочитает этот параметр POST / GET и отобразит информацию пользователя соответственно.
Страница OUTER (тот, который содержит iframe) должен обновить iframe и использовать в качестве URL-адреса тот же URL-адрес, который отображает статью (убедитесь, что она имеет «общедоступные» разрешения), но также будет отправлять идентификатор пользователя в качестве параметра, например:
iframe src="http://<url to joomla>?id=articleId&userId=<user-id>
Надеюсь, поможет!