2012-06-20 74 views
0

我需要從Joomla本身之外的程序中獲取當前登錄到Joomla的用戶的信息。我從1.5升級到2.5,而我以前的產品不再工作。Joomla 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/

回答

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 =& JFactory::getSession(); 
$session->set('name', "value"); 
Now you can retrieve this session variable using: 

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

我覺得人都有過在2.5的Joomla這個問題,事情發生了變化。我沒有找到你要求的方式的解決方案,但寫了這項工作(不包括密碼字段,但你可能想使用)。

定義與數據庫的連接:

<?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()); 
?> 

回聲創建一個查詢和回聲在一個表中的結果:

<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到你的數據庫的正確的前綴表。

更新:更好地導入框架以獲取用戶對象。

希望這對您有用。問候。

+0

好吧,我們正在越來越接近更換$_SESSION[ 'name' ] = "value";在外部腳本。但是,我之前獲得的代碼是關於當前登錄的user_的信息。我怎樣才能在這裏獲得這些信息?我相信Joomla有一個自定義的會話實現,因爲數據不在'$ _SESSION'中。 – Jonah

+0

不太確定。我嘗試使用腳本並實現這些庫,但它一直在說「找不到JFactory類」。如果你確實得到它的工作,那麼請分享,因爲我也很想知道如何做到這一點。第一點的問候 – Lodder

1

事實證明,我有兩個問題:

  1. 我的劇本是在www.example.com,而我是example.com下登錄,這樣不同領域被扔關閉會話數據。
  2. 我也沒有初​​始化應用程序,這顯然是必要的。

下面是結果:

<?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; 
+1

+1 – Ehsan

0

如果你想使用Joomla跳過!功能,你可以查詢Joomla!數據庫。使用用戶標識加入表js25_sessionjs25_users。這樣,您可以獲取當前登錄的每個用戶以及網站上的所有訪客(可能還包括在線用戶的數量)。

相關問題