jan
05
Dans Joomla par Benjamin Agullana (4 066 lecteurs)
1 étoile2 étoiles3 étoiles4 étoiles5 étoiles
Loading ... Loading ...
Joomla! 1.5

Joomla! 1.5

Encore un article sur Joomla! 1.5 et son framework. Alors pourquoi autant d’articles sur ce CMS ? Tout simplement car je suis en train de développer un gros site basé sur ce dernier dans mon entreprise. Du coup j’ai pu me familiariser pus profondément avec cet outil puissant.

Nous allons aborder un thème très utile lorsque vous souhaitez créer des modules ou composants ou même plugins dans Joomla! 1.5. Il s’agit de travailler avec les données liées à la session de l’utilisateur connecté sur votre site. Ainsi vous pourrez effectuer des scripts en fonction du statut de l’utilisateur (registered,redactor etc…) ou encore affiché simplement son pseudo, son nom, son adresse mail etc.

Pour commencer vous devez créer une instance de la class JFactory en appelant la méthode getUser(), comme suit :

$UserInfo =& JFactory::getUser();

Ensuite vous n’avez plus qu’à utiliser cet objet pour ressortir chacune des informations qui vous intéressent :

echo $UserInfo->id; //Affichera l'id de l'utilisateur
echo $UserInfo->name; //Affichera le nom de l'utilisateur
echo $UserInfo->username; //Affichera le pseudo de
l'utilisateur
echo $UserInfo->email //Affichera son addresse e-mail
echo $UserInfo->password //Le mot de passe crypté de
l'utilisateur
echo $UserInfo->usertype //Permet de connaitre le
statut de l'utilisateur (registered, administrator etc.)
echo $UserInfo->gid //L'id du statut auquel il
appartient (si le statut Administrator est enregistré
avec l'id 1 dans la base de données, alors
echo $UserInfo->gid affichera 1)
echo $UserInfo->registerDate //Affiche la date à
laquelle l'utilisateur s'est enregistré sur le site
echo $UserInfo->lastvisitDate //Affiche la date
de dernière visite de l'utilisateur sur le site
echo $UserInfo->block //Affiche 1 si l'utilisateur
est bloqué (banni du site) ou 0 s'il ne l'est pas
echo $UserInfo->guest //Affiche 1 si l'utilisateur
est un simple visiteur sur le site, 0 s'il est membre.

A partir de la on pourrait imaginer un script qui testerait si l’utilisateur est enregistré sur le site et qui auquel cas afficherait son nom, son pseudo, la date à laquelle il s’est inscrit sur le site et la date de sa dernière visite (le script en entier):

//On créer l'objet $UserInfo
$UserInfo =& JFactory::getUser();
//Si l'utilisateur est enregistré on lui écrit ses informations
if(!$UserInfo->guest)
{
echo "Salut" . $UserInfo->name . " ou plutôt
 " . $UserInfo->username . "<br />";
echo "Tu es membre de ce site depuis le
 " . $UserInfo->registerDate . " et ta
dernière visite date du " . $UserInfo->lastvisitDate;
//Si c'est un simple visiteur on lui demande de s'inscrire
}else{
echo "Vous n'êtes pas autorisé à
voir cette page, veuillez vous inscrire, merci";
}

Et voilà, ce n’est qu’un exemple, vous pouvez faire preuve de plus d’imaginations.

Pour toute questions ça se passe à la suite de l’article, merci.

Benjamin.

Articles relatifs...

Commentaires

Jean-ChristopheNo Gravatar on 6 janvier, 2009 at 11:20 #

Va falloir que je m’y mettre à Joomla quand j’aurais le temps x) C’est vrai qu’en prog objet tout devient intuitif =) Dès que je pige Symfony, je passe sur Joomla =D

PS : if(!$UserInfo = « guest »)

Faut pas un double « = » ?


Benjamin AgullanaNo Gravatar on 6 janvier, 2009 at 17:06 #

Oula j’ai écrit l’article trop rapidement, c’est !$UserInfo->guest

Je corrige tout de suite


didaNo Gravatar on 10 avril, 2009 at 9:27 #

bonjour,
je veux récupèrer l’email de l’utilisateur connecté. Sauf que je veux appeler la fonction getUser depuis un fichier qui se trouve en dehors du framework joomla.
Donc qu’on je mets $user =& JFactory::getUser();
et que j’essaie de récupèrer l’email de l’utilisateur, il ne le reconnait la classe JFactory
$to=$user->get(‘email’);
comment alors utiliser la classe JFactory dans un fichier qui ne fait pas partie du framework joomla?
Pouriez vous m’aider svp si vous avaez une piste?
Merci par avance.


Benjamin AgullanaNo Gravatar on 10 avril, 2009 at 13:22 #

Bonjour dida,

Alors tu viens de soumettre un problème auquel j’ai été confronté et que j’ai eu du mal à résoudre! Je vais écrire un article dessus d’ailleurs (puisque tu me prouves que je ne suis pas le seul dans ce cas).

Donc pouvoir utiliser le framework Joomla dans un fichier externe tu dois mettre ça au début de ton script :

// Set flag that this is a parent file
define( ‘_JEXEC’, 1 );

define(‘JPATH_BASE’, ‘../../../’ );

define( ‘DS’, ‘/’ );

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

require(JPATH_BASE.’libraries/joomla/factory.php’);

// initialize the application
$mainframe =& JFactory::getApplication(’site’);
$mainframe->initialise();

Cependant pour la constate JPATH c’est à toi de trouver le bon chemin par rapport à là où tu exécute ton fichier (dans mon cas je suis dans dossier comme ça : modules/mod_mon_module/dossier/mon_fichier.php


Vicky979No Gravatar on 10 mai, 2009 at 15:26 #

Merci pour les explications. J’ai réussi à le faire fonctionner dans un article pour moi.

Le site propose des ebooks au lecteurs et au auteurs de soumettre leur ebook.

j’aimerai que l’auteur ne doivent pas rentrer chaque fois son nom, adresse etc quand il soumet son oeuvre. Pour cela en plus de son mom, il me faudrait que son adresse s’affiche s’il est inscrit. Je l’ai par le login de virtuemart. Ou je bloc, c’est comment récupérer toute les autres données.

Merci si vous pouvez m’aider.


Benjamin AgullanaNo Gravatar on 11 mai, 2009 at 14:39 #

Salut Vicky,

Il va te falloir faire du PHP/SQL pour faire ceci. Il faut que tu récupère toutes les informations dans ta base de données.

Quand tu parles d’autres données, tu entends par là ses infos concernant VirtueMart ou Joomla ?


DavidNo Gravatar on 25 mai, 2009 at 15:06 #

Bonjour,

J\’ai utilisé ton script pour utiliser une page externe à joomla.

Toutes les variables joomla sont bien reconnues.

Mon problème est le suivant :

J\’utilise un formulaire dans un composant joomla que je suis occupé de créer, celui-ci appelle une page externe pour envoyée les données via ajax pour ne pas rechargée la page.

J\’utilise des sessions, mais les données sont bien enregistrées dans la page appelée mais vide dans le formulaire.

Voici mon code :

Une partie du composant avec le formulaire:

function editEntretien($row, $lists, $option)
{
$session =& JFactory::getSession();
$editor =& JFactory::getEditor();
JHTML::_(\’behavior.calendar\’);
$uri = & JURI::getInstance();

$PAGEPATH = $uri->root();

if(preg_match(\"/www\\./i\",$_SERVER[\"SERVER_NAME\"])){
$PAGEPATH = str_replace(\’www.\’,\’\',$PAGEPATH);
$PAGEPATH = str_replace(\’http://\’,\’http://www.\’,$PAGEPATH);
}
if(!preg_match(\"/www\\./i\",$_SERVER[\"SERVER_NAME\"])) $PAGEPATH = str_replace(\’http://www.\’,\’http://\’,$PAGEPATH);

?>
<script type=\"text/javascript\">var scriptPath = \"<?php echo $PAGEPATH.\’/administrator/components/com_entretiens/\’; ?>\";</script>
<?php

JHTML::script(\’lightbox.js\’, \’administrator/components/com_entretiens/js/\’);
JHTML::script(\’ajax.js\’, \’administrator/components/com_entretiens/js/\’);
JHTML::stylesheet(\’lightbox.css\’, \’administrator/components/com_entretiens/css/\’);
?>

<div id=\"lb_overlay\" style=\"display:none;\"></div>
<div id=\"lb_box\" style=\"display:none\">
<div id=\"lb_close\" onclick=\"onCloseLoginBox();\" title=\"Fermer cette fenêtre\">
</div>
<div id=\"lb_box_content\">
<table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">
<tr valign=\"top\">
<td width=\"47%\" style=\"padding: 10px 0px 15px 15px;\">
<h2>Ajouter un consommable</h2>
<br>
<form style=\"margin:0px; padding:0px;\" name=\"myform\" id=\"myform\" method=\"post\" onclick=\"return false;\">
<table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">
<tr>
<td>
Référence :
&nbsp;
<input type=\"text\" name=\"ref\" id=\"ref\" class=\"lb_text\" size=\"20\" maxlength=\"50\">
</td>
<td>
Quantité :
&nbsp;
<input type=\"text\" name=\"qte\" id=\"qte\" class=\"lb_text\" size=\"5\" maxlength=\"10\">
</td>
</tr>
<tr>
<td>
<br />
<input type=\"submit\" name=\"add\" value=\"Ajouter\" onclick=\"onCloseLoginBox(); getMessageResponse(document.myform.ref.value, document.myform.qte.value);\">
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</div>
</div>

la page new.php :

<?php
define( \’_JEXEC\’, 1 );
// include le framework
define(\’JPATH_BASE\’, \’../../../\’);
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();

// include JFactory (pour avoir accès à la base de donnée.
require_once( JPATH_BASE .DS.\’libraries/loader.php\’ );
JLoader::import( \’joomla.factory\’);
$session =& JFactory::getSession();

if (!isset( $_SESSION[\'consommables\']))
{
$_SESSION[\'consommables\']=array();
$_SESSION[\'consommables\'][\'ref\'] = array();
$_SESSION[\'consommables\'][\'qte\'] = array();
}

if(isset($_POST[\'ref\'])){
$ref = $_POST[\'ref\'];
$qte = $_POST[\'qte\'];

$positionProduit = array_search($ref, $_SESSION[\'consommables\'][\'ref\']);

if ($positionProduit !== false)
{
$_SESSION[\'consommables\'][\'qte\'][$positionProduit] += $qte ;
} else {
array_push( $_SESSION[\'consommables\'][\'ref\'],$ref);
array_push( $_SESSION[\'consommables\'][\'qte\'],$qte);
}
}
// test
echo var_dump($_SESSION[\'consommables\'][\'ref\']);
echo var_dump($_SESSION[\'consommables\'][\'qte\']);
?>

ajax.js :

function getMessageResponse(ref, qte)
{
var xmlHttp;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject(\"Msxml2.XMLHTTP\");
}
catch (e)
{
try
{
xmlHttp=new ActiveXObject(\"Microsoft.XMLHTTP\");
}
catch (e)
{
alert(\"Your browser does not support AJAX!\");
return false;
}
}
}
xmlHttp.onreadystatechange=function()
{
if(xmlHttp.readyState==4)
{
document.getElementById(\’response\’).innerHTML=xmlHttp.responseText;
<!–document.myform.message.value = \’\';–>
}
}
var url=scriptPath+\"new.php\";
url=url+\"?ref=\"+str+\"&qte=\"+qte;
xmlHttp.open(\"GET\",url,true);
xmlHttp.send(null);
}

Merci d\’avance pour l\’aide.


DavidNo Gravatar on 27 mai, 2009 at 15:35 #

Bonjour,

Pour finir, en cherchant un peu, j’ai réussi à intégrer la fonction ajax directement dans le composant et ne plus faire appel à une page externe.

Donc, tout fonctionne correctement.


Benjamin AgullanaNo Gravatar on 2 juin, 2009 at 23:03 #

David,

rapidement (il est tard), pourquoi utilises-tu $_SESSION plutot que l’instance session de Joomla ? Il me semble que si tu ne le fais pas Joomla ecrase le tableau $_SESSION.
De meme pour POST, tu devrais utiliser JRequest::getvar()

J’espère t’avoir rapidement éclairé :)


sportingbetNo Gravatar on 24 juin, 2009 at 12:31 #

Comme quoi, pas besoin de poser sa propre question, il suffit de lire celle des autres et ta réponse : même problème que Dida.
Merci, indirectement.
Marco


katyNo Gravatar on 14 juillet, 2009 at 12:52 #

Bonjour, je suis une debutante en programation avec CMS, et j’ai une question existencielle :D
Comment fait-on à partir d’un code php déjà existant pour intégrer à ce code un style de page joomla??
y a t’il un article là dessus??
merci beaucoup. Désolé si ça vous parait évident.


Benjamin AgullanaNo Gravatar on 15 juillet, 2009 at 9:42 #

Bonjour Katy,

ta question est un peu vague, cela veut tout et rien dire :)

Si tu souhaites faire quelque chose qui n’existe pas sur Joomla il va te falloir créer un plugin ou un module ou un composant et ainsi respecter l’architecture MVC du CMS.

Je te renvoies ici pour que tu aies de l’aide :
http://docs.joomla.org/Category:Development

Regarde à la lettre « H », les how to t’expliquent comment créer tout ça :)

En espérant t’avoir aidé :)


MoonstarNo Gravatar on 7 octobre, 2009 at 11:46 #

Bonjour, Merci pour le code cependant j’ai un problème, je ne trouve pas le bon chemin JPATH

Warning: require_once(JPATH_BASE/includes/defines.php) [function.require-once]: failed to open stream:


Benjamin AgullanaNo Gravatar on 9 octobre, 2009 at 23:26 #

Salut Moonstar, essaies de faire un echo $_SERVER['PHP_SELF']; dans ce que tu essaies de créer pour récupérer le chemin de base de ton site (chemin absolu).


MaherNo Gravatar on 2 mars, 2010 at 17:46 #

Bonjour, désolé si ce n’est pas le bon endroit pour poster cela. Je voulais savoir comment avoir les utilisateurs qui sont « en ligne » dans mon site. Je sais pas si ça peut vous aider…j’utilise dans mon site Jomsocial.


Post a Comment
Name:
Email:
Website:
Commentaires:
Security Code:

Car Rental website monitoring Sports equipment