我想将登录的用户名插入到变量中,以便在我的Joomla灌注的根目录中使用并通过包装器/ iFrame显示的页面中使用。
在主页面中设置cookie不起作用,也不建议用$ user =& amp;来访问用户对象。 JFactory ::的getUser();在下面的代码之后(链接如下)。有什么想法吗?
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE',$_SERVER['DOCUMENT_ROOT'].DS. basename(dirname(__DIR__)) );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
//optional use depend on requirement
jimport( 'joomla.user.user');
jimport( 'joomla.session.session');
jimport( 'joomla.user.authentication');
答案 0 :(得分:0)
使用该代码,您正在创建并初始化一个新的Joomla应用程序,因此您没有任何"当前"用户。您必须通过代码执行登录,这可以完成,但不幸的是需要纯文本用户和密码。
$login_result = $mainframe->login(array(
'username' => $username,
'password' => $password
));
if (!$login_result)
{
throw new \Exception("Unable to set current user!", 401);
}
在此之后,新的Joomla应用程序将拥有当前用户,您可以执行常规JFactory::getUser()
如果您没有用户名和密码(我希望如此),您有两种选择:
答案 1 :(得分:0)
谢谢你们的帮助。 Elin提出的解决方案是将用户名放在URL中。要做到这一点,它涉及Joomla核心的黑客攻击,因为模板覆盖似乎不适用于此文件。
查找此文件
部件\ com_wrapper \视图\包装\ TMPL \如default.php
//Insert line below line after this
defined('_JEXEC') or die;
$user = JFactory::getUser();
第44行附近
//change
src="<?php echo $this->escape($this->wrapper->url);
//to this
src="<?php echo $this->escape($this->wrapper->url). "?userId=" . $user->id; ?>"
//then in the file in the iframe
$userid2 = $_GET["userId"];
//or if you want to store the user name in a session variable
$userid3 = $_SESSION['userId'];