Comment bien utiliser la classe JdatabaseQuery pour construire vos requêtes dans Joomla!

Vous vous rappelez surement de la présentation que j’avais de la classe JdatabaseQuery, j’aimerais vous montrez comment bien utilisez cette classe pour que vous ne soyez pas confronté à des déboires dans son utilisation.

Pour rappel : la classe JDatabaseQuery est disponible dans le framework de Joomla! depuis la version 1.6 du CMS. Cette classe vous permet de construire des requêtes pour un fonctionnement sur différentes bases données (MySQL, Postgresql,Microsoft SQL Server,Oracle DB…). Mais depuis la sortie de Joomla! 1.6, de nouvelles bases de données sont supportés par Joomla!.

L’ajout de guillemets au nom d’une table est recommandé, mais pour cela vous devez utilisez une fonction spécifique :

$db = JFactory::getDBO ();

$db->quoteName('#__users');

ou son alias qui évide d’encombrer vos requêtes :

$db->qn ('#__users');

Une autre méthode est disponible pour ajouter des guillemets non pas cette fois-ci au nom des tables, mais aux valeurs dans un « WHERE » par exemple :

$db->Quote($this->id);

Voyons un exemple pratique, d’ajout d’un nouvel élément dans une table de votre base de donnée :

$db = JFactory::getDbo();

$query = $db->getQuery(true);

$query->insert("{$db->qn('#__users')}")->set("username={$db->Quote($this->username)}, id={$db->Quote($votes->userid)}");
$db->setQuery($query);
$db->query();

Pour mettre à jour un élément dans une table :

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$query->update("{$db->qn('#__users')}")->set("name={$db->Quote($name)},username={$db->Quote($username)}")->where("id={$db->Quote($this->id)}");
$db->setQuery($query);
$db->query();

Pour supprimer un élément dans une table ça se complique un peu :

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$query->delete()->from("{$db->qn('#__users')}")->where("id={$db->Quote($this->id)}");
$db->setQuery($query);
$db->query();

Si vous faites votre requête de la façon suivante, la requête sera incorrecte :

$db = JFactory::getDbo();

$query = $db->getQuery(true);
$query->delete("{$db->qn('#__users')}")->where("id={$db->Quote($this->id)}");
$db->setQuery($query);
$db->query();

Ce qui donnera en SQL :

DELETE `#__users` WHERE id='$this->id'

alors qu’on attendait une requête sous cette forme :

DELETE FROM `#__users` WHERE id='$this->id'

Vous pouvez consulter la documentation en anglais officielle de Joomla! pour d’autres types de requêtes : http://docs.joomla.org/How_to_use_the_database_classes_in_your_script

Sortie de la version 11.4 de la plate-forme de Joomla!

Depuis Joomla 1.6, la plate-forme de Joomla ! qui est le cœur du CMS est développé séparément du CMS en lui-même.  La version 11.4 de la plate-forme porte le nom de code « Brian Kernigan », elle est disponible depuis le 4 janvier et c’est cette version qui est intégré à Joomla ! 2.5. Cette version apporte en plus des correctifs de bugs quelques nouveautés, voici les principales :

Les nouvelles fonctionnalités :

Les correctifs ajoutés à cette version :

Les parties de l’API qui deviennent obsolète :

  • JDate::toMySQL devient obsoléte

Une introduction à JxLib

Jon Bomgardner  est un contributeur du projet jxlib.org. Après avoir récemment rejoint la liste de diffusion des développeurs de Mootools, il a partagé son expérience pour mettre à jour jxlib vers MooTools 1.4.2, il a décrit son expérience sur le blog du projet Mootools.

Qu’est ce que JxLib ?

JxLib est un framework javascript pour l’UI basé sur Mootools, il autorise les développeurs web et designers à construire rapidement des interfaces pour leur application. JxLib est basé sur les éléments HTML et est totalement conforme à la norme CSS.  C’est aussi une librairie modulaire qui vous permet de choisir le composant nécessaire parmi les composants disponibles et vous donne la possibilité de supplanter les comportements par défaut et d’étendre les classes du core.

Toute sa flexibilité est en grande partie due au faite que JxLib est basée sur Mootools. La librairie est hautement orientée objet avec un grand nombre de classes héritant d’une base simple. Si vous savez comment utilisez le système de classe de Mootools vous serez rapidement prêt à utiliser JxLib . En plus d’être basée sur l’HTML et le CSS, qui apporte beaucoup de flexibilité, l’architecture de la librairie est basée sur un système de plugins qui permet à des fonctionnalités additionnelles d’être ajoutées à chaque composant.

Lire la suite

Sortie de Joomla ! 2.5 beta1

Le projet Joomla ! Est fier d’annoncer la disponibilité de la beta1 de Joomla ! En version 2.5. Ceci est la seconde version faite après le passage à un nouveau de sortie des versions de Joomla !.

A quoi est destiné cette version ?

Il y a plusieurs buts à cette version :

  1.  Autoriser des tests avancés de sites et extensions, donc les administrateurs de sites et développeurs peuvent rapporter les problèmes avant la sortie finale de cette version 2.5
  2. Pour mettre en lumière cette version 2.5 aux yeux du public car le cycle de développement est actuellement très rapide
  3. Pour effectuer des tests de migration de Joomla ! 1.7 vers Joomla ! 2.5.0

A quoi n’est destiné pas cette version ?

Cette version beta de Joomla ! 2.5 ne doit pas être utilisée sur les sites en production, cette version est uniquement destinée à des fins de test.

Quand la version finale est attendue ?

Joomla 2.5.0  GA (general availability) est attendue pour le 10 janvier 2012. Les étapes prévues sont les suivantes :

Les dates peuvent changer en fonction de la disponibilité des volontaires et les circonstances.

Comment dois-je migrer vers Joomla ! 2.5 ?

Mettre à jour Joomla ! de la version 1.7 vers la version 2.5.0 sera très facile. La plupart des utilisateurs pourront utiliser la fonction de mise à jour automatique ou installer l’archive de mise à jour en utilisant le gestionnaire d’extensions.

Si vous utilisez Joomla ! 1.5 vous devrez avoir recours au composant jUpgrade pour procéder à la migration vers la version 2.5.

Lire la suite

Soyez prêt pour la prise en charge de plusieurs bases de données dans Joomla! 2.5

Cette semaine une grosse annonce est arrivée au sujet du développement du CMS Joomla !, cette annonce est une réécriture massive des requêtes.  Pourquoi ? Pourquoi réécrire ? Car cela rend possible le fonctionne de Joomla ! Sur des bases de données différentes, pas seulement MySQL et MySQLi comme dans le passé.

Les gens qui connaissent un peu le sujet savent que depuis plusieurs années, il y avait un but de rendre Joomla ! Agnostique au niveau des bases de données, ce qui veut dire que Joomla ! Peut fonctionner sur n’importe quelle base de données.  Depuis quelques temps, la plate-forme avait les pilotes pour les bases de données de Microsoft : SQLsrv et SQLAzure. Il y a aussi des pull requests (ce sont des requêtes pour fusionner du code dans la plate-forme) pour PostgreSQL, Oracle, SQLite et les pilotes PDO. Un bon travail a été fait par Gabriele Pongelli (Postgres), Sudhi Seshachala et l’équipe Hoodooku (Microsoft databases)  et Omar Ramos (Oracle, SQLite et PDO).  Si vous voulez travailler sur un pilote pour une autre base de données (db2 personne? Drizzle?) vous pouvez forker  le plate-forme et vous jetez dans le bain.

Ensuite ?

Quel est le  but ensuite ? En premier, avant que la version 2.5 soit disponible, elle a besoin de testeurs à la fois sur les nouvelles bases de données et sur MySQL et MySQLi. Ces derniers sont vraiment importants, car la rétro-compatibilité ne doit pas être rompue. Beaucoup de tests doivent être faits la-dessus.

Le prochain problème concerne les développeurs d’extensions . Qu’est ce que vous avez besoin de faire pour dire que vous supportez plusieurs bases de données ? Elin Waring publiera un nouvel article dans le blog au sujet des parties techniques du support de  plusieurs bases de données, la version courte est :

Ne pas utiliser des clauses MySQL directement
Utiliser JDatabasequery pour construire les requêtes dans setQuery.
Si vous devez utiliser une clause qui est uniquement disponible dans MySQL (ou une autre base de donnée)  dans setQuery , établissez des alternatives et effectuez des vérifications.

Lire la suite

Dernières étapes menant à Joomla ! 2.5

La version 11.3 de la plate-forme disponible depuis le 24 novembre dernier a été fusionnée récemment avec le CMS, quelques semaines nous séparent de la sortie de la version 2.5 de Joomla !. Une version beta de la version 2.5 devrait débarquer le 20 décembre.

La version 11.3 de la plateforme apporte entre autres, une nouvelle classe de manipulation d’images nommée JImage, la possibilité de créer des applications web (JWeb), la génération de tableaux HTML (JGrid), un paquet pour la gestion des chaines de langue (JString), la migration vers mootools 1.4, on trouve aussi le support curl, socket and stream support (JHttp) et de l’API de github (JGithub).

Pour atteindre cet objectif, les développeurs ont jusqu’au 12 décembre pour proposer des fonctionnalités et tester les nouvelles fonctionnalités.

  1. 1. Testez le CMS avec vos extensions favorites et rapportez tous les bugs que vous trouvez sur le tracker. Le CMS peut être télécharger sur https://github.com/joomla/joomla-cms/zipball/master (ceci n’est pas destiné aux sites en production). Pour les bugs, vous pouvez les ajouter ici : http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&tracker_id=8103.
  2. 2. Veuillez tester les nouvelles fonctionnalités (et proposez du code joint au bug si vous le souhaiter) http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemBrowse&tracker_id=8549. Veuillez prêter une attention particulière aux bugs ayant le statut « Pending ».

Il n’est pas nécessaire d’être un geek ou un gourou du Php pour tester les patchs proposés. Vos efforts aideront beaucoup à rendre le CMS en bonne condition pour la sortie de la version 2.5.

Comme vous devez déjà le savoir, Joomla ! 2.5 est une version au support à long terme qui est la suite des séries 1.6 et 1.7, sans tout chambouler par rapport à ces deux versions. La mise à jour sera intégrée et sera gérée de la même façon que de passer de la version 1.6 à la 1.7 ou de la version 1.7.2 à la 1.7.3.
Il est prévu que toutes les extensions fonctionneront sans modifications sous la version 2.5, cependant les développeurs d’extensions devraient les tester sous la version 2.5 pour être sur.

L’équipe de développement de Joomla ! espère proposez quelques fonctionnalités intéressantes dans cette version 2.5.

Amélioration du support des langues dans Joomla ! 1.7.3

Joomla ! 1.7.3 a introduit quelques améliorations intéressantes qui touchent aux langues  et au multilingue.

Pour le multilingue :

  1. Dans Joomla ! 1.7.1, l’équipe de développement a introduit le module multilingue statut, dans la version 1.7.3 par contre une amélioration nécessaire a été introduite : vérification du statut des contacts liés à un auteur, car il est nécessaire de créer un contact unique par auteur et tagué les langues sur ‘Tous’ ou un contact par langage de contenu publié.
    Si une erreur se produit, un message est ajouté dans la fenêtre modale avec le nom     d’utilisateur concerné :
  2. C’est maintenant possible de personnaliser le nom du site en fonction de la langue du contenu affichée . Un nouveau paramètre a été crée dans Extensions => Gestionnaire de langues => Onglet de contenu => Éditer une langue du contenu :
  3. En activant un paramètre lors de l’édition du plugin Filtre de langue, les utilisateurs auront au moins une nouvelle fonctionnalité qui était attendue depuis longtemps : le préfixe du langage du contenu ne sera plus utilisé dans l’url pour la langue par défaut du site quand le sef est activé !
    (Un remerciement est donné à tous ceux qui ont participé à la résolution de problème : http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=25037 et à Christophe Demko qui a résolu le souci)
    Extensions => Gestionnaire des plugins => Filtre par système => Éditer le système => Éditer le système – Filtre de langue
  4. L’exécution par lot dans de nombreux gestionnaire dans la partie administration, inclus maintenant un champ de langage.  Il est maintenant possible d’exécuter des changements sur les langages par lot sur les éléments sélectionnés, ainsi que la copie par lot incluant les changement des langues vers un autre menu (dans le gestionnaire de menus) ou une autre catégorie. Nous espérons aussi inclure les associations de menu dans le processus de conception de Joomla ! 2.5 Lire la suite

Recherche et Joomla ! CMS 2.5

La recherche est une fonction centrale de tout bon Système de Gestion de Contenu, et le groupe de travail de développement a commencé a travaillé dans un dépôt sur Github pour rendre la recherche plus puissante dans Joomla ! 2.5. Michael Babker a pris la direction pour organiser cela avec Chris Davenport. Jusqu’à maintenant six personnes ont contribuées au code. Le code original du Finder dans Joomla ! 1.5 a été réalisé par Rob Schley, Louis Landry et Andrew Eddie et distribué par JXtended.

Rob a déclaré à de nombreux Joomla ! Days que Finder est une de ses extensions favorites sur lesquelles il a travaillé, voilà ce qu’il a déclaré quand on lui a demandé ce qu’est Finder :

« Finder est mon extension préférée car j’apprécie réaliser des challenges. Je pense que la plupart des développeurs approuveront le fait que construire un système d’indexation pour un moteur de recherche qui fonctionne complètement dans Joomla ! est très difficile. Les moteurs de recherche se rattachent aussi à de nombreux sujets et problèmes comme l’analyse du langage naturel, vous deviendrez plus modeste. En comparaison des moteurs de recherche majeurs, Finder est un jouet. Même si c’est un jouet, c’est encore suffisamment compliqué de se frotter aux développeurs de Joomla ! très expérimentés. »

Le système actuel de recherche de Joomla ! utilise une recherche simple par texte pour comparer les chaînes et faire références aux objets dans l’ordre dans lequel ils sont trouvés. Finder remplace cela, avec un modèle qui ressemble plus aux moteurs de recherche que nous pouvons tous nommer. Avant une recherche le contenu est indexé et l’indexation est enregistrée dans la base de données.

Voila ce qu’a répondu Rob, sur ce qui rend Finder beaucoup plus rapide :

« Finder est plus rapide que d’autres systèmes de recherche car il crée un index du texte à l’intérieur du contenu. A un plus haut niveau, Finder sait exactement combien d’instances de n’importe quel mot clé se répète dans votre contenu. Ceci est utile car il peut rapidement déterminer si un terme de recherche est utile et ou il existe. Il peut aussi utiliser cette information pour échelonner les résultats par pertinence, ce qui était une barrière pour la recherche dans Joomla ! depuis un long moment. »

D’ailleurs, rendre une indexation de la recherche plus rapide autorise quelques fonctionnalités intéressantes comme les suggestions et élargir le champ de recherche. Par exemple, rechercher « casser » peut aussi vous donner des résultats avec « cassant» ou « cassé ». Il peut aussi échelonner les résultats sur la qualité de la correspondance.

Lire la suite

Joomla! 1.7.1 : Nouveau module status multilangue

L’utilisation du multilingue dans Joomla! 1.7.x devient de plus en plus populaire. Si vous désirez voir les améliorations présentes dans Joomla! 1.7.x par rapport à la version 1.6.x rendez-vous ici : http://community.joomla.org/blogs/community/1468-multilang-in-17-whats-new.html

Normalement les nouvelles fonctionnalités ne devraient pas être introduites dans une version de maintenance comme pour la version 1.7.1. Mais le multilingue est lié à de nombreux facteurs et il est nécessaire d’aider les utilisateurs aussi rapidement que possible pour vérifier le status de ces variables. Avec ceci à l’esprit un nouveau module a été crée pour Joomla! 1.7.1 et qui se nomme mod_multilangstatus.

Ce nouveau module n’est pas publié par défaut et vous devez le publier manuellement. Il est conçu pour être affiché dans la barre de status de la partie administration. En cliquant sur son nom , cela affichera une fenêtre modale avec des erreurs si le status des éléments importants sont concernés. Si ce module est publié sur un site ayant une seule langue, la fenêtre modale affichera juste que le multilingue n’est pas implémenté. Une fois que votre site multilingue est paramétré correctement et qu’aucune erreur ne s’affiche, le module peut-être dépublié en toute confiance.

Voici les étapes que vous devez suivre et le type de fenêtre modale que vous pouvez avoir.

Lire la suite

Sortie de Mootools 1.4.0

Depuis quelques jours une nouvelle version de MooTools est disponible. Celle-ci inclus MooTools Core et MooTools More. L’équipe de développement de Mootools a beaucoup communiqué sur Mootools 2.0 mais l’équipe de développement a aussi que quelques fonctionnalités intéressantes devraient être présentes dans la série 1.x. Ces fonctionnalités intéressantes sont , bien sur de nombreux correctifs mais aussi des nouvelles fonctionnalités pour MooTools Core: la Délégation. Cette version 1.4 est totalement rétrocompatible avec la série 1.3.

Donc tous les changements pour la version 1.4.0 sont:

  • Déplacement de la délégation dans le Core.
  • Correctifs de compatibilité avec ECMAScript 5 . Parmi eux ont trouve Function.bind, Array.map et String.trim
  • Dépréciation de Element.setOpacity() et Element.set(‘opacity’). Element.setStyle(‘opacity’) est la seule façon correcte maintenant (la même chose s’applique pour les getters).
  • Désactivation par défaut de la compatibilité avec la 1.2 par défaut dans le builder.
  • Nettoyage de Element.getProperty, Element.setProperty. Element.getProperty qui utilise Slick.getAttribute pour partager le code et économise quelques octets.
  • IE7 ne crash plus on ferme un élément deux fois.
  • La documentation pour les sélecteurs est de retour et mise à jour pour Slick.
  • Mise à jour de Slick vers la version 1.1.6
  • Unification des changements du comportement des événements dans tous les navigateurs.
  • Renommage des événement vers DOMEvent donc ceci ne rentrera plus en conflit avec l’objet événementiel natifs.
  • Délégation des événements

Lire la suite