Articles et Base de Données dans Drupal
Il m'est arrivé de perdre l'accès au contenu d'un billet sur un page de mon site suite à une erreur (interne au serveur !!!).
Je me suis donc demandé comment retrouver les données d'un type de contenu et je me suis mis à fouiner dans la BDD du site.
Dans la version étudiée (8.8.5), 4 tables sont concernées :
node_field_data « The data table for node entities » ( la table des données pour les entités de type node) ;
inline_block_usage « Track where a block_content entity is used » ( la table des relations blocs - node) ;
block_content_field_data « The data table for block_content entities » ( la table des données pour les entités de type block) ;
block_content_revision__body « Revision archive storage for block_content field body » la table du contenu du champ body des blocs).
L'algorithme
Pour récupérer le contenu de la page, j'ai procédé en 3 étapes :
trouver l'id du node en recherchant le titre ou une partie du titre dans le champ "title" de la table "node_field_data" ;
récupérer les id des blocs qui constituent la page en recherchant l'id (trouvé à l'étape 1) dans le champ "layout_entity_id" de la table "inline_block_usage" ;
Tant Que tous les id de blocs (trouvés à l'étape 2) n'ont pas été utilisés faire :
récupérer le titre du bloc (champ info du revision_id (le plus grand pour obtenir la version la plus récente) en recherchant l'id (trouvé à l'étape 2) dans le champ "id" de la table : "block_content_field_data" ;
récupérer le code html du bloc (champ body_value du revision_id (le plus grand pour obtenir la version la plus récente) en recherchant l'id (trouvé à l'étape 2) dans le champ "entity_id" de la table block_content_revision__body.
L' algorithme en image
Ce paragraphe montre comment récupérer les données qui constituent cette page (plus précisément l'article présenté) dans le base de données du site en s'appuyant sur l'algorithme du précédent parapgraphe.
Etape 1 : trouver l'ID du node.
Les données recherchées constituent la page actuelle qui a pour titre "Article et BdD Drupal". Il nous faut donc rechercher, comme le montre l'image ci-dessous dans la table node_field_data les enregistrements avec un champ "title" contenant "article".
note : remarquer l'utilisation de l'opérateur like %...%.
L'image ci-dessous illustre le résultat de la recherche. Deux enregistrements correspondent à la requête.
L'enregistrement n°53 est celui qui est recherché.
Notons que le champ "nid" de cette table est bien la clé primaire de la table "node_field_data".
Etape 2 : trouver les ID des blocs constituant le node
L'étape 1 a montré que le node formant la page portait le n°53. Nous devons donc chercher les occurrences de "53" dans la table "inline_block_usage".
La recherche rend 7 enregistrements dont les identifiants uniques vont de 294 à 300, qui correspondent à la clé primaire "block_content_id" de la table "inline_block_usage".
Remarque : dans la plupart de cas, les numéros trouvés ne sont pas consécutifs. Ici, cela signifie uniquement que ces blocs ont été construits consécutivement lors de la réalisation de la page.
Etape 3 : Récupérer le titre du bloc et son contenu
Cette étape doit être effectuée 7 fois. Elle n'est illustrée pour les blocs n°295 et n°296.

Pour le bloc n°296, nous n'illustrons pas la recherche le titre du bloc", nous n'illustrons que la recherche du contenu du bloc.
3.a) Recherche du titre du bloc :
Ce titre, qui se trouve dans le champ "info" de la table, est donc "l'algorithme".
3.b) Recherche du contenu du bloc :
La recherche du contenu du bloc s'effectue dans la table "block_content_revision_body".
Ce contenu, qui se trouve dans le champ "body_value" de la table, est bien celui écrit en 1er paragraphe de la page actuelle.