0

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

4 に答える 4

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');
于 2012-09-30T22:26:46.473 に答える
1

状況が変わったので、人々はJoomla2.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());
?>

エコーはクエリを作成し、結果をテーブルにエコーします。

<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をデータベーステーブルの正しいプレフィックスに変更する必要があります。

更新:ユーザーオブジェクトを取得するためにフレームワークをインポートする方がはるかに優れています。

これがお役に立てば幸いです。よろしく。

于 2012-06-20T02:27:06.973 に答える
1

結局のところ、私には2つの問題がありました。

  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;
于 2012-06-20T18:23:26.657 に答える
0

Joomlaの使用をスキップしたい場合!関数、あなたはJoomla!を照会することができます データベース。テーブルjs25_sessionjs25_usersユーザーIDで結合します。このようにして、現在ログインしているすべてのユーザーとWebサイト上のすべてのゲスト(および場合によってはオンラインユーザーの数)を取得できます。

于 2012-09-26T18:51:52.510 に答える