Introduction à Clearbricks

Dotclear utilise son propre framework qui n'est pas un framework : Clearbricks, il est composé d'une ensemble de classes et de fonctions, on y trouve par exemple une classe destinée à traiter les chaînes HTML ou une classe servant à formater les dates. Nous allons nous intéresser à la classe dbLayer.

La base de données

Comme son nom l'indique, c'est une base ... de données. Concrètement, ça stocke des informations sous forme de tables (qui sont des tableaux) dans lesquelles on peut sélectionner des informations, les trier ou ajouter une information, etc. Pour cela on utilise des requêtes écrites en langage SQL. Ce langage est un standard et permet de faire des requêtes à différents types de base de données[1]. Clearbricks peut se connecter à trois types de bases de données : MySQL, PostgreSQL (noté aussi PGSQL) et SQLite (très peu utilisé).

La classe dbLayer

dbLayer est le diminutif de database layer, ou couche de la base de données en français. C'est une couche d'abstraction, ce qui signifie qu'on fait appel à dbLayer pour réaliser des actions (ici des requêtes SQL) sans se soucier de ce qu'il y a en-dessous. Au lieu d'utiliser les fonctions de PHP telles que mysql_query() et pg_query() on utilisera les fonctions de dbLayer en faisant abstraction du type de la base de données.

On peut schématiser ainsi le cheminement d'une requête SQL :

clearbricks.png

Grâce à Clearbricks et dbLayer, on a un code qui gère indifféremment les 2 types de base de données.

La table lecteurs

Imaginons qu'on ait créé une table lecteurs :

lecteurs
idnomrôle
1Pierreclown
2Pauldéveloppeur
3Jacquessoutien moral
4Olivierchef
5Kozlikafée

Cette table est un tableau composé de 3 champs (les colonnes) : id (l'identifiant de la ligne) correspondant à l'ordre dans lequel les lecteurs se sont enregistrés, nom (le nom des utilisateurs) et role qui est le rôle de l'utilisateur. Cette table compte 5 enregistrements (les lignes). Elle servira d'exemple dans ce billet.

Admettons que la connexion a la base de données a été effectuée, c'est l'objet $con. Dans Dotclear c'est l'objet $core->con. Nous allons voir comment utiliser la fonction select().

Première requête sur un enregistrement et un champ

Comment faire pour afficher le nom du premier lecteur ?

Voici la requête en pseudo-code : "sélectionner nom dans la table lecteursid = 1" et en SQL :

$query = 'SELECT nom FROM lecteurs WHERE id = 1;';

Effectuons la requête :

$rs = $con->select($query);

$rs est un recordset, c'est un groupe d'enregistrements (ici un seul) qui contient les champs (ici le champ nom). On accède au champ nom grâce à la fonction field() ou sa version raccourcie f(), on l'affiche ainsi :

echo($rs->f('nom'));

Ceci affichera "Pierre". Notez qu'il existe une syntaxe simplifiée pour afficher le même résultat :

echo($rs->nom);

On peut aussi effectuer la même opération en une ligne :

echo($con->select($query)->nom);

Une requête sur un champ avec plusieurs enregistrements

Comment afficher les noms des derniers lecteurs ?

Voici la requête en pseudo-code : "sélectionner nom dans la table lecteurs en rangeant par id décroissant en se limitant à 2 enregistrements" et en SQL :

$query = 'SELECT nom FROM lecteurs ORDER BY id DESC LIMIT 2;';

Effectuons la requête :

$rs = $con->select($query);

Le recordset $rs contient 2 enregistrements, on ne peut plus accéder directement au champ nom des 2 enregistrements avec f('nom'). On va parcourir les enregistrements avec une boucle grâce à la fonction fetch() :

while ($rs->fetch()) {echo($rs->f('nom').' ');}

Ceci va afficher "Kozlika Olivier".

Une requête sur plusieurs champs de plusieurs enregistrements

Comment afficher les noms et les rôles des 3 premiers lecteurs ?

Voici la requête en pseudo-code : "sélectionner nom et rôle dans la table lecteurs par id croissant en se limitant à 3 enregistrements" et en SQL :

$query = 'SELECT nom,role FROM lecteurs ORDER BY id ASC LIMIT 3;';

Effectuons la requête :

$rs = $con->select($query);

Le recordset $rs contient 3 enregistrements et 2 champs, on va devoir parcourir les enregistrements comme précédemment :

while ($rs->fetch()) {echo($rs->f('nom').' : '.$rs->f('role').' ');}

Ceci va afficher "Pierre : clown Paul : développeur Jacques : soutien moral".

Conclusion

Désormais vous savez utiliser les fonctions de dbLayer pour effectuer des requêtes SQL de type SELECT.

Si les commentaires sont fermés, vous pouvez commenter ce billet sur mon blog en attendant la réouverture des commentaires sur ce blog.

Merci à Kozlika, Franck Paul et Biou pour leurs conseils et le temps qu'ils m'ont accordé.

Notes

[1] le langage peut différer d'un type à l'autre