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 :

  1. trouver l'id du node en recherchant le titre ou une partie du titre dans le champ "title" de la table "node_field_data" ;
  2. 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" ;
  3. 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 %...%

une variante est disponible en cliquant ici
Comme le montre l'image ci-dessous, l'id d'un bloc peut aussi se trouver en consultant la liste des "alias d'URL"Cliquer pour agrandir l'image
Cliquer pour agrandir l'image

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".

Cliquer pour agrandir l'image

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 occurences de "53" dans la table "inline_block_usage"

Cliquer pour agrandir l'image

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.

Cliquer pour agrandir l'image

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°295, nous illustrons la recherche du titre du bloc. Elle a lieu dans la table "block_content_field_data", nous n'illustrons pas la recherche du contenu du bloc.
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 :

Cliquer pour agrandir l'image

Ce titre, qui se trouve dans le champ "info" de la table, est donc "l'algorithme".

Cliquer pour agrandir l'image

          3.b) Recherche du contenu du bloc :

La recherche du contenu du bloc s'effectue dans la table "block_content_revision_body".

Cliquer pour agrandir l'image

Ce contenu, qui se trouve dans le champ "body_value" de la table, est bien celui écrit en 1er paragraphe de la page actuelle.

Cliquer pour agrandir l'image

 

La figure ci-dessous résume les actions menées :

  • l'extrémité des flèches pointe le champ où doit être effectuée la recherche.
  • le résultat de la recherche est à lire dans le champ encadré en bleu

 

---