Le mois dernier, les éditeurs de magazines m'ont demandé d'arrêter d'écrire des séries d'articles pour les non-techniciens, car ils ont estimé que l'objectif avait été atteint.
L'article suivant est destiné à un public ayant de bonnes connaissances techniques. L'idée de cet article est née après avoir parlé à l'équipe du magazine Spanish à propos de la rédaction d'articles qui facilitent l'accès pour les développeurs aux classes qui permettent de développer Joomla en utilisant Joomla. Je vais donc essayer d'écrire pour les développeurs qui ont déjà de bonnes connaissances.
Mon collègue, Daniel Hernandez, a contribué à rendre cet article lisible et présentable, et je l'encourage à écrire pour la revue à l'avenir afin que tous puissent profiter de ses connaissances et ses travaux.
Allons droit au but ... aujourd'hui nous allons parler de JDatabase :
PHP permet différents modes de connexion et d'interaction avec une base de données. Joomla! contient des fonctions puissantes dans son API capables d'extraire la couche de la base de données propre à des développements tiers, permettant d'amplifier la connectivité à de nouveaux serveurs de bases de données, tout en donnant aux développeurs une plus grande facilité et simplicité d'utilisation de SQL. Cela évite d'avoir à trouver et modifier chacune des méthodes où une instance est trouvée lors d'une modification de la base de données.
Pour cela, nous conseillons l'utilisation de la bibliothèque JDatabase. Cette bibliothèque permet d'instancier un appel à la base de données en quelques lignes et sans avoir besoin de connaître le nom de la base de données ou le préfixe des tables à utiliser, car toutes ces valeurs sont contenues dans le fichier configuration.php :
$db = JFactory::getDbo();
$query = $db->getQuery(true);
Avec PHP, nous aurions dû spécifier les données de connexion, le nom de la base de données et le nom de la table :
$host = "host";
$user = "user_name";
$pass = "password";
$dbname = "data_base_name";
$connection = mysqli_connect($host,$user,$pass);
mysqli_select_db($dbname,$connection);
Une autre amélioration offerte par JDatabase est la création de requêtes enchaînées aux fonctions permettant une plus grande lisibilité du code et permet de cacher la syntaxe de la requête sans compromettre la portabilité du code.
// Instancier la connexion.
$db = JFactory::getDbo();
// Créer l'objet de la requête.
$query = $db->getQuery(true);
// Préparer le nom des colonnes de notre insert.
$columns = array('column1', 'column2', 'column3', 'column4');
// Insertion des valeurs.
$values = array('value1', 'value2', 'value3', 'value4');
// Préparer la requête d'insertion.
$query
->insert($db->quoteName('#__table_withoutprefix'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
// Établir la requête avec notre objet et exécuter la requête.
$db->setQuery($query);
$db->query();
Maintenant, si nous devions utiliser l'option la plus facile, également valable, nous enverrions complètement la syntaxe de la requête.
// Instancier la connexion.
$db = JFactory::getDbo();
// Créer l'objet de la requête.
$query = $db->getQuery(true);
// Préparer le nom des colonnes de notre insert.
$columns = array('column1', 'column2', 'column3', 'column4');
// Insertion des valeurs.
$values = array('value1', 'value2', 'value3', 'value4');
$query = 'INSERT INTO #__table_withoutprefix ('. $columns. ') VALUES('.$values.')' ;
$db->setQuery($query);
$db->query();
L'une des améliorations les plus fortes qui ont été faites dans Joomla! 3.x est l'implémentation des transactions SQL, telles que TransactionStart de JDatabaseDriver, TransactionCommit et TransactionRollback, toujours lorsque celles-ci sont compatibles avec le moteur de base de données. Cela remplace la méthode queryBatch que nous utilisions depuis Joomla! 2.5.
$db = JFactory::getDbo();
try
{
$db->transactionStart();
$query = $db->getQuery(true);
$columns = array('column1', 'column2', 'column3', 'column4');
$values = array('value1', 'value2', 'value3', 'value4');
$query
->insert($db->quoteName('#__table_withoutprefix'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
$db->setQuery($query);
$result = $db->execute();
$db->transactionCommit();
}
catch (Exception $e)
{
// Capturer l'erreur et effectuer une restauration d'exécution.
$db->transactionRollback();
JErrorPage::render($e);
}
Si une exception se produit, nous pouvons annuler les modifications en utilisant la méthode TransactionRollback. Cela nous permet de remettre la base de données dans son état d'origine en cas de problème.
N'oublions pas, par exemple, que nous pouvons rendre notre extension indépendante de la technologie du moteur de la base de données si nous nous efforçons d'apprendre à utiliser les classes qui s'offrent à nous dans Joomla.
Le tableau suivant présente les bases de données prises en charge pour Joomla dans ses différentes versions :
Avec cet article, j'espère avons suscité votre intérêt de sorte que vous commenciez à découvrir comment faire plus avec moins d'effort.