2012-02-13 2 views
0

J'essaie de récupérer les informations de mes utilisateurs en utilisant la fonction getUser() avec un script php situé dans un iframe (wrapper) de Joomla. Il semble qu'il y ait un problème à transmettre les paramètres au code iframe. La seule façon de capturer les informations utilisateur est d'insérer le code dans un article de base (qui n'est pas un iframe).Comment passer les paramètres Joomla à une page iframe (wrapper)?

Le var_dump ($ utilisateur); sorties de spectacles:

object(JUser)#17 (23) { ["isRoot":protected]=> NULL ["id"]=> int(0) ["name"]=> NULL ["username"]=> NULL ["email"]=> NULL ["password"]=> NULL ["password_clear"]=> string(0) "" ["usertype"]=> NULL ["block"]=> NULL ["sendEmail"]=> int(0) ["registerDate"]=> NULL ["lastvisitDate"]=> NULL ["activation"]=> NULL ["params"]=> NULL ["groups"]=> array(0) { } ["guest"]=> int(1) ["_params":protected]=> object(JRegistry)#18 (1) { ["data":protected]=> object(stdClass)#19 (0) { } } ["_authGroups":protected]=> NULL ["_authLevels":protected]=> NULL ["_authActions":protected]=> NULL ["_errorMsg":protected]=> NULL ["_errors":protected]=> array(0) { } ["aid"]=> int(0) } 

Une idée de ce qui ne va pas? Merci, Florent

<?php 

define('_JEXEC', 1); 
define('JPATH_BASE', dirname(__FILE__)); 
define('DS', DIRECTORY_SEPARATOR); 

require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 

$user = JFactory::getUser(); 

echo "<p>Your name is {$user->name}, your email is {$user->email}, and your username is $user->username}</p>"; 
echo "<p>Your usertype is {$user->usertype} which has a group id of {$user->gid}.</p>"; 
//var_dump($user); 
?> 
+0

Je peux voir que le problème concerne l'iframe (ou « wrapper ») contenu. Le code fonctionne normalement quand il est dans l'article régulier (j'utilise sourcerer). Y a-t-il un réglage nécessaire pour que l'iframe externe fonctionne correctement? – Flo

+0

Après quelques recherches, je comprends que j'ai besoin d'ajouter ce qui suit dans mon iframe $ mainframe = & JFactory :: getApplication ('site'); $ mainframe-> initialise(); – Flo

Répondre

0

Comme indiqué précédemment, si vous utilisez un wrapper, l'environnement Joomla est inconnu. Vous devez donc l'incorporer avant d'utiliser l'API Joomla. Pour ce faire, il suffit de copier-coller ce code (ou créer un nouveau fichier PHP et l'inclure dans votre page personnalisée):

<?php 
define('_JEXEC', 1); 
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT']); 
define('DS','/'); 

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

$mainframe =& JFactory::getApplication('site'); 
$mainframe->initialise(); 
?> 
0

Bien sûr, la page qui inclut l'iframe ne "sait" pas Joomla - c'est un environnement différent!

Si je comprends bien ce que vous essayez d'atteindre, alors vous devriez vraiment créer un article dans Joomla qui affiche les informations utilisateur, mais au lieu d'obtenir l'ID utilisateur de:

$user = JFactory::getUser(); 

vous devriez envoyez-le en tant que paramètre POST/GET depuis la page OUTER (vous pouvez ajouter une sorte de chaîne d'authentification si la sécurité vous importe). L'article va lire ce paramètre POST/GET et afficher les informations de l'utilisateur respectivement.

La page OUTER (celle qui contient le iframe) devrait rafraîchir l'iframe et utiliser, comme url, la même URL qui affiche l'article (assurez-vous qu'il a des permissions «publiques») mais enverra également l'utilisateur ... id comme paramètre, par exemple:

iframe src="http://<url to joomla>?id=articleId&userId=<user-id> 

espérons que cela aide!

+0

Merci alfasin. J'aurais dû mentionner que l'iframe est aussi la page d'accueil et qu'il est probablement préférable d'initialiser l'environnement Joomla, comme le propose Arnaud. – Flo

Questions connexes