Joomla 2.5从外部脚本获取用户数据

时间:2012-06-20 01:07:01

标签: joomla joomla2.5 external-script

我需要从Joomla本身以外的程序中获取当前登录到Joomla的用户的信息。我从1.5升级到2.5,之前的功能不再适用。

<?php

define( '_VALID_MOS', 1 );

include_once( 'globals.php' );
require_once( 'configuration.php' );
require_once( 'includes/joomla.php' );
$option="test";
$mainframe = new mosMainFrame( $database, $option, '.' );
$mainframe->initSession();

$my = $mainframe->getUser();
$joomla_name = $my->name;
$joomla_email = $my->email;
$joomla_password = $my->password;

经过一番研究,我想出了这个:

<?php
define( '_JEXEC', 1 );
define( 'JPATH_BASE', dirname(__FILE__) );
define( 'DS', '/' );

require_once ( JPATH_BASE .DS.'configuration.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
require_once ( JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php' );

$my =& JFactory::getUser();
$joomla_name = $my->name;
$joomla_email = $my->email;
$joomla_password = $my->password;
$joomla_username = $my->username;

它不会产生任何错误,但似乎有效。但是,用户对象为空。此脚本与Joomla安装位于同一目录中。可能是什么问题?谢谢!

来源:

http://www.cmsbloke.com/accessing-joomla-objects-from-an-external-script/

4 个答案:

答案 0 :(得分:5)

取自 http://docs.joomla.org/How_to_access_session_variables_set_by_an_external_script

解决方案:使用

替换外部脚本中的session_start();
define( '_JEXEC', 1 );
define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../..' ));
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

请务必更改JPATH_BASE以适合您的目录结构。

替换外部脚本中的$_SESSION[ 'name' ] = "value";
$session =& JFactory::getSession();
$session->set('name', "value");
Now you can retrieve this session variable using:

$session =& JFactory::getSession();
echo $session->get('name');

答案 1 :(得分:1)

我认为人们在Joomla 2.5中遇到了问题,因为情况发生了变化。我没有找到你所要求的方式的解决方案,但写了你可能想要使用的这项工作(不包括密码字段)。

定义与数据库的连接:

<?php
   $host="localhost";
   $username="DB_USERNAME";
   $password="DB_PASSWORD";
   $db_name="DB_NAME";
   mysql_connect($host,$username,$password)or die(mysql_error());
   mysql_select_db($db_name)or die(mysql_error());
?>

Echo创建一个查询并在表格中回显结果:

<table style="background:#FFF; color:#000;">
<?php
$query = "SELECT username,name,email FROM j25_users "; 
$result = mysql_query($query) or die(mysql_error());
    while ($row = mysql_fetch_array($result)) { 
        echo '<tr><td>',$row["username"],'</td><td>',$row["name"],'</td><td>',$row["email"],'</td></tr>' ;
    }
?>
</table>

您需要将j25_users更改为数据库表的正确前缀。

更新:导入框架以获取用户对象要好得多。

希望这对你有用。问候。

答案 2 :(得分:1)

事实证明,我有两个问题:

  1. 我的脚本在www.example.com上,而我在example.com下登录,因此不同的域名正在丢弃会话数据。
  2. 我也没有初​​始化应用程序,这显然是必要的。
  3. 结果如下:

    <?php
    define( '_JEXEC', 1 );
    define( 'JPATH_BASE', dirname(__FILE__) );
    define( 'DS', '/' );
    
    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
    
    JFactory::getApplication('site')->initialise();
    
    $user = JFactory::getUser();
    $joomla_name = $user->name;
    $joomla_email = $user->email;
    $joomla_password = $user->password;
    $joomla_username = $user->username;
    

答案 3 :(得分:0)

如果你想跳过使用Joomla!功能,你可以查询Joomla!数据库。使用用户ID加入表js25_sessionjs25_users。这样,您就可以获得每个当前登录的用户以及网站上的所有访客(以及可能的在线用户数)。