2009-03-24 8 views
0

J'ai un script d'aide pour un module Joomla 1.0 que je développe. Je l'utilise pour effectuer des tâches AJAX (lire et écrire dans la base de données, renvoyer JSON), donc j'ai besoin d'arrêter Joomla sortir ses en-têtes et autres joyeusetés.Comment construisez-vous l'objet utilisateur dans Joomla 1.0?

J'ai autour de ce à ce jour par le piratage ensemble du code pour faire le nécessaire comprend pour établir la connexion de base de données, etc:

define('_VALID_MOS', 1); 
require_once '../globals.php'; 
require_once '../configuration.php'; 
require_once '../includes/joomla.php'; 

Le seul problème est que la variable $my (l'objet mos_user pour l'utilisateur actuel) n'est pas créé.

Comment créer cet utilisateur? Quel fichier dois-je inclure?

Répondre

0

Je trouve que c'est une fonction de l'objet $mainframe, mais il faut alors construire que trop:

$mainframe = new mosMainFrame($database, '', '.'); 
$mainframe->initSession(); 
$my = $mainframe->getUser(); 
0

Vous pouvez également appeler index2.php no_html = 1 (suivi par tous les autres paramètres dont vous avez besoin?) pour obtenir une sortie brute sur un composant standard.

+0

ah je me demandais comment éviter l'en-tête en cours d'impression. Et si c'était un module? – nickf

+0

Vous ne pouvez pas appeler un module directement, mais toutes les requêtes dans Joomla! chargera exactement un composant. Si vous avez un module qui effectue des requêtes AJAX, vous devrez construire un composant pour l'accompagner. – jlleblanc

0

Je viens de faire exactement face à ce problème lors de la migration d'un module 1.5 à 1.0, mais aucune des réponses ci-dessus ne semblait donner l'histoire complète. La réponse de nickf m'a beaucoup aidé, mais je suis tombé dans un trou de lapin en essayant de construire le mainframe. J'ai alors supposé que peut-être $ my était déjà créé, et bien qu'il ne fonctionnait pas dans une fonction (je suis nouveau à PHP, donc je supposais qu'il serait accessible), j'ai trouvé que l'utiliser à la portée du module était bien, comme indiqué ci-dessous:

<?php 
/** 
* Demo package 
* 
* @package Demo package 
* @subpackage Modules 
*/ 

// no direct access 
defined('_VALID_MOS') or die('Restricted access'); 


class modDcsgSimulatorHelper 
{ 

    /** 
    * security by obscurity 
    */ 
    function getAppToken($username) 
    { 
     return urlencode($username); 
    } 
} 

$apptoken = modDcsgSimulatorHelper::getAppToken($my->username); 
?> 
Run the <A href="http://somesecurewebsite.com?apptoken=<?php echo $apptoken; ?>">A Secure Link</A>. 

Et avant que quiconque ne me s'embrase de ce mécanisme merveilleusement sécurisé, soyez assuré que j'ai élidé les détails de la mise en œuvre réelle comme il était bavard ma inutilement réponse.

+0

pour accéder aux variables globales (telles que $ my) depuis les fonctions internes, ajoutez cette ligne au début de la fonction: "global $ my;" – nickf