déc
25
Dans Joomla par Benjamin Agullana (3 975 lecteurs)
1 étoile2 étoiles3 étoiles4 étoiles5 étoiles
Loading ... Loading ...

Ça fait un petit moment que je n’ai pas Ă©crit d’article,  il est donc temps de reprendre le pied ! (J’avoue qu’avec les vacances ça facilite les choses !).

Aujourd’hui nous allons donc voir comment utiliser le framework de Joomla! 1.5. Je ne vais pas me lancer dans un Ă©talage  complet du framework mais plutĂŽt du strict minimum, indispensable pour hacker, ou mĂȘme crĂ©er des modules ou composants.

1. Se connecter à la base de données

Rien de plus simple, il faut créer une instance de la class JFactory :

$database = &JFactory::getDBO();

2. ExĂ©cuter une requĂȘte (insertion de donnĂ©es dans la base)

Maintenant que nous avons notre objet $database il suffit d’appeler la mĂ©thode setQuery pour dĂ©terminer la requĂȘte Ă  Ă©xĂ©cuter :

//j'insĂšre dans la table users et dans le champ username, le pseudo TOTO.
$database->setQuery("INSERT INTO #__users (`username`) VALUES ('TOTO')");

#__users est en fait jos_users dans ma base de donnĂ©es, mais Joomla! reconnait #__ comme Ă©tant le prĂ©fixe de vos tables (le mien est jos, mais le votre peut ĂȘtre diffĂ©rent, cela permet donc Ă  Joomla! de s’adapter quelque soit le prĂ©fixe de vos tables).

Puis on Ă©xĂ©cute la requĂȘte :

$database->query();

3. ExĂ©cuter une requĂȘte (sĂ©lection de donnĂ©es dans la base)

C’est bien beau d’insĂ©rer des donnĂ©es dans la base, mais il est parfois utile de rĂ©cupĂ©rer des donnĂ©es, c’est trĂšs simple encore une fois, toujours avec le mĂȘme objet, il suffit d’appeler la mĂ©thode setQuery encore une fois (cette fois je met la requĂȘte dans une variable, que j’appelle dans la mĂ©thode setQuery :

$query = "SELECT username FROM #__user WHERE id=1"; //Je sélectionne
le pseudo oĂč le champs id vaut 1
$database->setQuery($query); //J'exĂ©cute la requĂȘte

Ensuite on traite les données récupérées pour en faire quelque chose (par exemple dans ce cas précis, les afficher) :

echo $database->LoadResult(); //Ce qui écrira toto si
l'utilisateur avec l'id 1 dans ma base s'appelle toto

Par contre si vous faites une requĂȘte qui renvoie plusieurs rĂ©sultats vous devez appeler la mĂ©thode loadObjectList :

$query = "SELECT * FROM #__categories"; //On prĂ©pare la requĂȘte
$database->setQuery($query); //On Ă©xĂ©cute la requĂȘte
$rows = $database->loadObjectList(); //On charge les
rĂ©sultats de la requĂȘte dans l'objet $rows 
foreach ($rows as $row) {
echo $row->title ." : ". $row->description."<br />"; //On affiche le
titre de chaque catégorie et sa description
}

Et voilà vous avez les cartes en main pour effectuer des choses simples dans Joomla! 1.5 en utilisant son Framework et donc en limitant les failles de sécurités.

Pour toutes questions ça se passe Ă  la suite de l’article dans les commentaires.

Enjoy !

Articles relatifs...

Commentaires

ThrawnNo Gravatar on 17 mars, 2009 at 12:06 #

Merci bien pour ce petit article qui a accĂ©lĂ©rĂ© ma dĂ©couverte de l’APi joomla ;)


MohiNo Gravatar on 5 juin, 2009 at 11:03 #

Bonjour,

j’ai une petite question. OĂč met tu ces requĂȘtes pour que le rĂ©sultat apparaisse dans un article?


Benjamin AgullanaNo Gravatar on 5 juin, 2009 at 11:54 #

Tu ne peux pas mettre ces requĂȘtes dans un article. Cet article est destinĂ© aux dĂ©veloppeurs qui souhaitent dĂ©velopper des modules/plugins/composants pour Joomla, et qui donc se serviront de l’API Joomla dans le code source.

Si toutefois tu souhaites utiliser ces fonctions dans un article je te conseille de télécharger ce plugin http://extensions.joomla.org/extensions/4470/details
Il te permettra d’exĂ©cuter du PHP dans tes articles :)


HervéNo Gravatar on 12 août, 2009 at 10:35 #

Bonjour,
Comment sur une requete du genre $query = « SELECT username, name, id FROM #__user WHERE id=1″;

afficher la chaine de caractĂšre username, name, id

le moins couteux en ressources systeme
Merci


Benjamin AgullanaNo Gravatar on 12 août, 2009 at 11:00 #

Le mieux est d’utiliser LoadOject() dans votre cas (vous ne renvoyez qu’une ligne).
Exemple :
$query = " SELECT username, name, id FROM #__user WHERE id=1 ";

$db->setQuery($query);
$db->LoadObject($results);

echo $results->username . " -- " . $results->name . " -- " . $results->id;


HervéNo Gravatar on 17 août, 2009 at 17:17 #

Bonjour,
Effectivement LoadObject doit ĂȘtre prĂ©fĂ©rable, j’avais bidouillĂ© l’objet liste qui retourne plus d’enregistrement

$rows = $db->loadObjectList();
echo « email:  » .$rows[0]->email;


Benjamin AgullanaNo Gravatar on 17 août, 2009 at 23:18 #

Oui objectList() est Ă  utiliser quand la requĂȘte envoie plus d’une ligne de rĂ©sultat :)


ThibautNo Gravatar on 23 août, 2009 at 17:25 #

Bonjour Benjamin,

Je me permets de vous contacter sur cette page car je n’ai pas trouvĂ© de page « Contact ».

Je suis actuellement sur la phase finale d’un site internet qui comprend essentiellement une boutique VirtueMart.

Il me reste maintenant un dernier point à régler (rechargement ajax lors de la sélection produit parent-enfant).

Avez-vous une adresse email afin que je puisse vous contacter directement ?

J’ai vu que connaissez assez bien Joomla pour m’aider et si mon problĂšme peut ĂȘtre rĂ©solu par vous, je suis prĂȘt Ă  vous rĂ©munĂ©rer.

Merci d’avance pour votre rĂ©ponse et Ă  bientĂŽt j’espĂšre ;)

Thibaut


Benjamin AgullanaNo Gravatar on 25 août, 2009 at 15:11 #

Bonjour, vous pouvez me contacter Ă  ben.agullana [at] hotmail.com


ThibautNo Gravatar on 28 août, 2009 at 10:41 #

Merci Benjamin.

L\’email est envoyĂ©, mais apparemment l\’adresse est hotmail.fr ;)

A bientĂŽt et merci encore

Thibaut


Papa SierraNo Gravatar on 15 janvier, 2010 at 20:13 #

Sauf erreur de ma part, paragraphe 3 :

-> La requĂȘte simple ne marche pas ()
-> La requĂȘte avec plusieurs rĂ©sultats est buguĂ©e :

C’est :

echo $row->title . $row->description. »";

et non :

echo $row->title : $row->description. »";


Benjamin AgullanaNo Gravatar on 23 janvier, 2010 at 0:23 #

Oui tu as raison, merci de l’avoir signalĂ© ;)


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

ukraine smokeless e cigarettes