2012-06-20 1 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[ '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

Я думаю, что люди имели проблемы с этим в 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 на правильный префикс базы данных столы.

Обновление: Намного лучше импортировать фреймворк, чтобы получить объект пользователя.

Надеюсь, это вам пригодится. С уважением.

+0

Хорошо, мы все ближе. Тем не менее, код, который у меня был до этого, получил информацию о текущем входе пользователя 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_session и js25_users с идентификатором пользователя. Таким образом, вы можете получить каждый зарегистрированный пользователь и всех гостей на веб-сайте (и, возможно, количество онлайн-пользователей).