Próbuję pobrać informacje o moich użytkownikach za pomocą funkcji getUser() ze skryptem php znajdującym się w iframe (wrapper) Joomla. Wygląda na to, że jest problem z przekazywaniem parametrów do kodu iframe. Jedynym sposobem, w jaki mogę przechwycić informacje użytkownika, jest wstawienie kodu do podstawowego artykułu (który nie jest iframe).

Var_dump($użytkownik); dane wyjściowe pokazują:

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) }

Jakiś pomysł, co się dzieje? Dziękuję, Florencie

<?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
user1022668 14 luty 2012, 01:22

2 odpowiedzi

Najlepsza odpowiedź

Jak wcześniej wspomniano, gdy używasz wrappera, środowisko Joomla jest nieznane. Musisz więc osadzić to przed użyciem Joomla API. Aby to zrobić, po prostu skopiuj i wklej ten kod (lub utwórz nowy plik PHP i umieść go na swojej niestandardowej stronie):

<?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
Arnaud 14 luty 2012, 09:53

Oczywiście strona zawierająca element iframe nie "zna" Joomla - to inne środowisko!

Jeśli dobrze zrozumiałem, co chcesz osiągnąć, naprawdę powinieneś utworzyć artykuł w Joomla, który wyświetla informacje o użytkowniku, ale zamiast pobierać identyfikator użytkownika z:

$user = JFactory::getUser();

Powinieneś wysłać go jako parametr POST/GET ze strony OUTER (możesz dodać jakiś ciąg auth-string, jeśli zależy Ci na bezpieczeństwie). Artykuł odczyta ten parametr POST/GET i odpowiednio wyświetli informacje o użytkowniku.

Strona OUTER (ta, która zawiera iframe) powinna odświeżyć iframe i użyć jako adresu URL tego samego adresu URL, który wyświetla artykuł (upewnij się, że ma uprawnienia „public”), ale również wyśle ​​identyfikator użytkownika jako parametr, na przykład:

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

Mam nadzieję, że to pomoże!

0
Nir Alfasi 14 luty 2012, 03:01