Atelier Drupal 7

Créer un site internet avec un CMS pas comme les autres


précédentsommairesuivant

Chapitre III Administration système de Drupal

Dans cette partie, vous allez configurer les différentes applications qui permettent de faire fonctionner Drupal : le serveur web Apache, le langage PHP et la base de données MySQL. Il n'est bien sûr pas question de traiter en profondeur ces sujets, mais de configurer les fonctionnalités qui auront une incidence sur le fonctionnement de Drupal.

Vous apprendrez également à sauvegarder, restaurer et mettre à jour un site web Drupal. Ensuite, vous découvrirez les outils qui peuvent vous faciliter l'administration de Drupal. Pour finir, vous verrez comment sont organisées les données de Drupal.

Peut-être n'êtes-vous pas très intéressé par la configuration de Drupal, dans ce cas, vous pouvez très bien vous affranchir de la lecture d'une bonne partie de ce chapitre.
Cependant, avant de passer à la partie suivante, il est conseillé au moins d'activer les URL simplifiées comme indiqué au chap. Configuration de Apache1 - Configuration de Apache - PHP - MySQL .

III-A. Configuration de Apache - PHP - MySQL

III-A-1. Configuration de Apache

Drupal peut s'exécuter sur de nombreux serveurs HTTP, mais ici, seule la configuration d'Apache, qui est le serveur le plus populaire, sera étudiée.

III-A-1-a. Les URL simplifiées

Par défaut la forme des URL de Drupal est :

        http://localhost/drupal/?q=node/2

Dans cet exemple, node/2 sont les arguments qui sont envoyés à Drupal. Si les URL simplifiées sont activées, elles prennent la forme suivante :

        http://localhost/drupal/node/2

On enlève ainsi le ?q=. Cela peut paraître être un détail, mais il est recommandé d'activer les URL simplifiées pour plusieurs raisons :

  • certains modules ne fonctionnent pas sans les URL simplifiées ;
  • cela facilite la lecture pour les utilisateurs ;
  • certains moteurs de recherche indexent mieux les sites avec URL simplifiées.
Image non disponible
Activer le mod_rewrite d'Apache

Pour pouvoir activer les URL simplifiées, il faut que le module mod_rewrite d'Apache soit aussi activé.

-> Sous Windows avec WampServer faites un clic gauche sur l'icône de notification puis aller dans Apache - Modules Apache - rewrite_module.

Activer le mod_rewrite avec WampServer

-> Sous Linux Ubuntu, activez le mod_rewrite grâce à la ligne de commande

 
Sélectionnez
sudo a2enmod rewrite

-> Puis modifiez le fichier de configuration d'Apache situé dans le répertoire de Drupal :

 
Sélectionnez
sudo gedit /etc/apache2/apache2.conf

-> Ajoutez à la fin de ce fichier les lignes suivantes :

 
Sélectionnez
<Directory /var/www/drupal>
 
  AllowOverride all
 
</Directory>

-> Redémarrez Apache

 
Sélectionnez
sudo /etc/init.d/apache2 restart

Activer les URL simplifiées dans Drupal

-> Ensuite, dans Drupal, menu Configuration - lien URL simplifiées (section Recherche et Metadonnées).

Si vous ne pouvez pas choisir Activé, c'est que le test n'a pas réussi et qu'il y a un problème dans votre configuration.

-> Cliquez sur Activé.

Si le module mod_rewrite est activé lors de l'installation de Drupal, les URL simplifiées sont activées par défaut.

Image non disponible
Les URL simplifiées peuvent être activées

-> Cliquez sur le bouton Enregistrer la configuration.

Si à un moment vous rencontrez un problème avec une URL, vous pouvez accéder à la page de désactivation grâce à l'adresse :
http://localhost/drupal/?q=admin/config/search/clean-urls

Chap. Path : L'Alias d'URLPath : url de vos pages

Chap. Pathauto : Automatisez la création de vos AliasPathauto : créez automatiquement des alias d'url

III-A-1-b. Les hôtes virtuels

Créer un hôte virtuel sur votre serveur Apache vous permettra d'accéder à Drupal directement en entrant l'adresse http://drupal.tld plutôt que http://localhost/drupal. Ainsi votre site sera plus facile à configurer et à copier vers le serveur de votre hébergeur.

Cela permet également d'héberger plusieurs sites web sur un même serveur facilement.

Configuration du fichier hosts

Sous Windows

Éditez le fichier %windir%\System32\Drivers\etc\hosts (typiquement : C:\Windows\System32\drivers\etc) et ajoutez la ligne :

        127.0.0.1 drupal.tld

Attention, ce fichier peut être en lecture seule pour des raisons de sécurité, changez ses droits (clic droit - Propriétés) en écriture avant de l'éditer et protégez-le à nouveau après modification.

Sous Linux

 
Sélectionnez
sudo gedit /etc/hosts

et ajoutez la ligne :

        127.0.0.1 drupal.tld

Configuration de Apache

Sous Windows

-> Avec WampServer, faites un clic gauche sur l'icône de notification puis choisir Apache - httpd.conf.

-> Recherchez la ligne :

        #Include conf/extra/httpd-vhosts.conf

-> Décommentez-la (enlevez le # devant).

-> Sauvegardez le fichier.

Apache cherchera dans le fichier httpd-vhosts.conf les vhosts installés.

-> Ajoutez les lignes suivantes au fichier C:\wamp\bin\apache\apache2.2.17\conf\extra\httpd-vhosts.conf

 
Sélectionnez
<VirtualHost *:80>
 DocumentRoot c:/wamp/www
 ServerName localhost
</VirtualHost>
<VirtualHost *:80>
 DocumentRoot c:/wamp/www/drupal
 ServerName drupal.tld
</VirtualHost>

Le premier VirtualHost permettra à l'adresse http://localhost de fonctionner (pour accéder à phpMyAdmin par exemple). Le second permettra à l'adresse http://drupal.tld de pointer directement vers votre site Drupal.

-> N'oubliez pas de redémarrer Apache (clic gauche sur l'icône de notification et Redémarrer les services).

Sous Linux

-> Créez un nouveau fichier avec la commande :

 
Sélectionnez
sudo gedit /etc/apache2/sites-enabled/drupal.conf

-> Insérez-y les lignes suivantes :

 
Sélectionnez
<VirtualHost *:80>
  DocumentRoot /var/www/drupal 
  ServerName drupal.tld
</VirtualHost>

-> Redémarrez Apache :

 
Sélectionnez
sudo /etc/init.d/apache2 restart

Vérification du bon fonctionnement

Allez à l'adresse http://drupal.tld, vous devriez voir apparaître votre page d'accueil Drupal. Vérifiez également que l'adresse http://localhost, affiche la page d'accueil de WampServer.

Image non disponible
Le virtualhost drupal.tld fonctionne

Vous n'avez ici configuré que le minimum de paramètres des VirtualHosts pour qu'ils fonctionnent avec Drupal. Apache étant très complet, il comprend un grand nombre de paramètres supplémentaires. Voyez la documentation Apache pour plus d'informations.

Vous pouvez lancer une commande Apache pour connaître la configuration de vos virtual hosts (pratique si cela ne fonctionne pas du premier coup) :
Sous Windows :
Dans une Invite de commandes
 
Sélectionnez
c:\wamp\bin\apache\apache2.2.17\bin\httpd.exe -S

Sous Linux :
 
Sélectionnez
apache2 -S

III-A-2. Configuration de PHP

PHP est le langage de script avec lequel Drupal est développé.

PHP est correctement configuré par défaut avec Wampserver ou Linux Ubuntu pour le bon fonctionnement de Drupal. Toutefois, voici les quelques variables que vous pourriez avoir besoin d'ajuster dans le fichier php.ini.

Sous Windows :

-> Cliquez avec le bouton gauche sur l'icône de notification de WampServer puis allez dans Php - php.ini pour éditer php.ini.

Image non disponible
Raccourci WampServer vers php.ini

Sous Linux :

Pour éditer php.ini :

 
Sélectionnez
sudo gedit /etc/php5/apache2/php.ini

Les paramètres utiles pour Drupal

memory_limit : votre besoin pour Drupal dépend des modules chargés. 128 Mo est recommandé. 64 Mo est un minimum. Aujourd'hui les machines ont de plus en plus de RAM, n'hésitez pas à augmenter cette valeur si vous constatez une baisse de performance de Drupal ou des erreurs fréquentes lors du chargement des pages.

post_max_size : c'est la limite de taille d'envoi d'un seul fichier par la méthode POST. 2M est une bonne valeur si vous limitez les fichiers à envoyer à des images. Cela peut devenir insuffisant si vous permettez d'envoyer des vidéos. Si vous augmentez post_max_size, pensez aussi à augmenter upload_max_size.

Image non disponible
post_max_size et upload_max_size à 32M

Pour avoir plus d'informations sur la version de PHP installée et des modules activés, rendez-vous sur menu Rapports - lien Tableau de bord et cliquez sur le lien en face de la vérification PHP : la page phpinfo.php s'affichera (chap. Tableau de bordLe tableau de bord ).

III-A-3. Configuration de MySQL

Comme pour le serveur web Apache, Drupal peut fonctionner avec différents serveurs de bases de données grâce à l'utilisation d'une couche logicielle d'abstraction. Cependant, les explications de ce livre se limiteront à MySQL qui est actuellement le serveur le plus utilisé avec Drupal.

III-A-3-a. Configuration de la base de données utilisée par Drupal

À la quatrième étape du processus d'installation de Drupal, vous avez entré les informations relatives à la base de données.

Image non disponible
Installation de la base de données

Ces informations sont stockées dans le fichier settings.php, il est possible de modifier ces informations :

Sous Windows :

-> Éditez le fichier C:\wamp\www\drupal\sites\default\settings.php

Sous Windows, si vous ne percevez pas les retours à la ligne dans votre éditeur (par exemple Notepad), utilisez un éditeur plus avancé (Notepad++ - http://notepad-plus-plus.org/).

Sous Linux :

 
Sélectionnez
sudo gedit /var/www/drupal/sites/default/settings.php 

Dans le fichier settings.php, cherchez la ligne $databases, voici à quoi doit ressembler cette variable pour votre installation  

 
Sélectionnez
$databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'database' => 'drupal',
      'username' => 'root',
      'password' => '',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

Il est possible de définir des configurations de bases de données extrêmement complexes avec Drupal. Vous pouvez par exemple avoir deux sites Drupal qui partagent leurs utilisateurs, mais qui ont leurs données propres.

Voici les paramètres principaux permettant de configurer la variable $databases :

'database' Nom de la base de données à utiliser.
'username' Nom d'utilisateur de la base de données.
'password' Mot de passe de l'utilisateur.
'host' Adresse du serveur de bases de données, le serveur de bases de données peut-être différent du serveur hébergeant Drupal.
'port' Port utilisé par le serveur de bases de données (3306 par défaut pour MySQL).
'driver' Type de serveur de bases de données utilisé (mysql, pgsql, sqlite, etc.).
'prefix' Il est possible d'utiliser un préfixe pour chaque table.
Lors de l'installation, un onglet Options avancées permet de régler certains des paramètres ci-dessus
Image non disponible
Options avancées de l'installateur

III-A-3-b. Création d'un utilisateur MySQL pour la base Drupal

Lors du processus d'installation de Drupal, l'utilisateur root était utilisé pour créer la base SQL de Drupal. Cela peut poser des problèmes de sécurité surtout qu'avec Wampserver, l'utilisateur root est sans mot de passe par défaut ! Il est donc conseillé de créer un utilisateur spécifique pour la base de données utilisée par Drupal.

Pour cela, comme pour toutes les manipulations que vous allez faire sur la base de données, vous utiliserez l'outil phpMyAdmin qui permet de gérer facilement des bases de données MySQL et qui est très souvent proposé par les hébergeurs.

-> Rendez-vous à l'adresse http://localhost/phpmyadmin.

-> Connectez-vous avec l'utilisateur root/atelierdrupal (si vous avez suivi l'exemple chap. Démarrage rapideChapitre I Démarrage rapide).

-> Onglet Privilèges (sur la page d'accueil de phpMyAdmin, sans avoir sélectionné de base au préalable).

-> Lien Ajouter un utilisateur.

-> Entrez un Nom d'utilisateur : drupal, par exemple.

-> Choisissez Local pour le Serveur : même si vous accédez à Drupal depuis une autre machine, -> Drupal utilisera la base de données en local. Bien sûr, il est possible d'installer votre base de données Drupal sur un autre serveur que votre serveur web. Ce cas ne sera pas traité ici.

-> Choisissez un Mot de passe, atelierdrupal par exemple.

-> Ne touchez à rien d'autre et cliquez sur le bouton Exécuter tout en bas de la page

Image non disponible
Création d'un utilisateur avec PhpMyAdmin

La page se recharge alors.

-> À la section Privilèges spécifiques à une base de données, choisissez la base de données drupal

Image non disponible
Modification des privilèges pour l'utilisateur de la base

La page se recharge une nouvelle fois et affiche les privilèges à donner pour votre seule base drupal.

Lien Tout cocher.

Image non disponible
Ajout des permissions d'un utilisateur pour une base de données

-> Bouton Exécuter.

Lors de votre prochaine installation de Drupal, vous pouvez ajouter directement un nouvel utilisateur et cocher l'option Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base.

Il faut maintenant modifier les paramètres du fichier de configuration de Drupal pour changer le nom d'utilisateur qui accédera à la base.

-> Éditez le fichier sites/default/settings.php.

-> Recherchez la ligne définissant la variable $databases.

-> Modifiez-la comme dans le code suivant :

 
Sélectionnez
$databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'database' => 'drupal',
      'username' => 'drupal',
      'password' => 'atelierdrupal',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

Le fichier settings.php est en lecture seule. Il faut donc changer ses droits d'accès. N'oubliez pas de le remettre en lecture seule lorsque vous aurez appliqué les changements.

Il y a par défaut deux autres bases de données existantes en plus de celle de Drupal. Ce sont les bases qui permettent de faire fonctionner le gestionnaire MySQL, il ne faut donc jamais les effacer.

Image non disponible
Liste des bases de MySQL

III-A-4. Choisir un hébergeur

Il est possible d'héberger son site sur une machine reliée à internet. Cependant, la majorité des administrateurs préfèrent faire appel à un hébergeur pour y louer un serveur ou une partie d'un serveur.

Vous aurez alors le choix entre trois solutions d'hébergement : un serveur dédié, du cloud computing (infrastructure en nuages) ou un serveur mutualisé.

Bien souvent, les hébergeurs proposant des solutions mutualisées offrent une interface d'administration qui permet d'installer et de configurer votre serveur simplement. Avec un serveur mutualisé, vous n'aurez pas à configurer et sécuriser votre système de A à Z comme avec un serveur dédié.

Généralement la solution du serveur mutualisé est moins coûteuse, mais aussi moins performante (vous partagez les ressources du serveur avec d'autres sites), il faut donc faire particulièrement attention au système minimum requis par Drupal car il est impossible de le faire évoluer par vous-même.

Le cloud computing est une solution intermédiaire qui se comporte, au niveau logiciel, comme un serveur dédié.

III-A-4-a. Serveur web

La plupart des utilisateurs de Drupal utilisent le serveur WEB Apache. Pourtant, Drupal peut aussi fonctionner sur IIS, LightHTTP ou autre puisqu'il a été programmé pour être indépendant du serveur web. Sachez cependant que la solution Drupal + Apache est la plus éprouvée.

Pour pouvoir activer les URL simplifiées, il faut que le module mod_rewrite soit ou puisse être activé sur Apache.

Drupal 7 fonctionnera avec Apache 1.3 minimum.

III-A-4-b. PHP

L'utilisation de PHP 5.3 ou supérieur est recommandé par Drupal. En théorie, PHP 5.2.5 suffit.

La mémoire minimum à allouer à PHP est de 32 MB, mais, selon les modules activés et l'activité de votre site, il sera nécessaire d'augmenter cette valeur.

Les bibliothèques PHP suivantes doivent être activées :

  • GD (Gif Draw - Dessiner des GIF) pour la gestion des images ;
  • PDO pour PHP pour la gestion des bases de données.

III-A-4-c. Base de données

Drupal peut utiliser les logiciels de bases de données MySQL 5.0.15 ou supérieur, ou PostgreSQL 8.3 ou supérieur. Bien que PostgreSQL soit reconnu comme étant un très bon logiciel, MySQL, comme Apache reste préféré par la plupart des utilisateurs de Drupal.

III-A-5. Configuration du serveur pour l'envoi de mails

Drupal doit pouvoir envoyer des courriels pour effectuer certaines tâches : validation du courriel d'un nouvel utilisateur, récupération d'un mot de passe, alerter l'administrateur du système d'événements particuliers, envoi d'une newsletters, etc.

L'envoi de courriels se fait grâce à un serveur SMTP (Simple Mail Transfer Protocol ou « Protocole simple de transfert de courrier »). Si vous travaillez en local sur votre machine, vous pouvez utiliser le SMTP de votre fournisseur d'accès (exemples : smtp.free.fr, smtp.orange.fr, etc.). Si vous travaillez sur un serveur dédié ou mutualisé, utilisez le SMTP de votre fournisseur de mail (smtp.laposte.net, smtp.mondomaine.com, etc.).

III-A-5-a. Configuration de Windows avec WampServer

Sous Windows, il suffit de modifier un paramètre dans le fichier php.ini pour indiquer à Drupal quel serveur SMTP utiliser :

-> Cliquez avec le bouton gauche de la souris sur l'icône de WampServer.

-> Choisissez dans le menu PHP - php.ini.

-> Recherchez le paramètre SMTP dans la section [mail function]

Image non disponible
Modification du SMTP dans le fichier

-> Entrez le nom de votre serveur SMTP.

-> Modifiez également le paramètre sendmail_from (qui sera l'adresse « de » des mails envoyés).

-> Sauvegardez le fichier.

-> Redémarrez WampServer en cliquant sur l'icône avec le bouton gauche - Redémarrer les services.

Testez votre installation comme indiqué (chap. Test de l'installationTest de l'installation ).

III-A-5-b. Configuration de Linux avec SSMTP

SSMTP est très simple à configurer pour permettre au système d'envoyer des mails :

-> Installation de SSMTP

 
Sélectionnez
sudo apt-get install ssmtp

-> Éditez le fichier de configuration de SSMTP :

 
Sélectionnez
sudo gedit /etc/ssmtp/ssmtp.conf

-> Modifiez les champs ainsi :

 
Sélectionnez
root=contact@atelierdrupal.net #Votre adresse email
mailhub=smtp.free.fr #SMTP utilisé
rewriteDomain=free.fr #Domaine utilisé
hostname=cyp-drupal #Nom de votre machine
FromLineOverride=YES #Pour que la ligne from contienne l'adresse mail de l'administrateur de Drupal

-> Sauvegardez le fichier.

Testez votre installation comme indiqué à la fin de ce chapitre.

III-A-5-c. Configuration de Linux avec Postfix

Vous pouvez également utiliser Postfix qui peut en faire plus que SSMTP, mais avec qui il ne peut pas cohabiter.

-> Installez Postfix.

 
Sélectionnez
sudo apt-get install postfix

-> À la question Configuration type du serveur de messagerie, choisir Site internet.

-> À la question Nom de courrier, entrez le nom de domaine de votre mail (si votre mail est contact@atelierdrupal.net, entrez atelierdrupal.net).

-> Éditez le fichier main.cf :

 
Sélectionnez
sudo gedit /etc/postfix/main.cf

-> Complétez le paramètre relayhost par le nom de votre STMP entre crochets :

 
Sélectionnez
relayhost = [smtp.free.fr]

-> Enfin, redémarrez postfix

 
Sélectionnez
sudo /etc/init.d/postfix restart

III-A-5-d. Test de l'installation

Votre installation doit maintenant fonctionner, vous pouvez la tester en créant un nouveau compte utilisateur (chap. User : gestion des utilisateursUser : gestion des utilisateurs ).

Pour modifier l'adresse « de » des mails envoyés sous Drupal, utilisez la page menu Configuration - lien Informations
Image non disponible
Adresse mail des mails envoyés par Drupal sous Linux

III-B. Sauvegarde/Restauration

La sauvegarde de Drupal se déroule en deux temps :

  • sauvegarde de l'intégralité des fichiers de Drupal ;
  • sauvegarde de la base de données.

La base de données de Drupal contient les données du site (contenu des nodes, paramètres des utilisateurs), mais également sa structure (types de contenus, taxonomie) et ses options de configuration.

Le système de fichiers contient lui le code de Drupal (modules et cœur de Drupal), mais également certains fichiers liés au contenu (images des nodes).

III-B-1. Sauvegarde/Restauration de l'arborescence de fichiers

III-B-1-a. Avec un gestionnaire de fichiers

Rien de difficile dans cette tâche, il s'agit seulement de sauvegarder un répertoire.

Sauvegarde

Sauvegarder les fichiers de Drupal avec un gestionnaire de fichiers se fait en trois clics.

-> Clic droit sur le dossier C:\wamp\www\drupal ou /home/drupal/drupal.

-> Dans le menu contextuel Choisir Copier

Image non disponible
Sauvegarde de l'arborescence sous Windows

-> Puis Coller le répertoire à un autre endroit de l'arborescence.

Restauration

-> Clic droit sur le dossier de sauvegarde.

-> Dans le menu contextuel Choisir Copier.

-> Puis Coller le répertoire dans C:\wamp\www ou /home/drupal.

Vous pouvez utiliser un gestionnaire d'archives (zip ou tar.gz) pour n'avoir qu'un seul fichier compressé pour l'arborescence.

III-B-1-b. En ligne de commande avec Linux

Il est bien souvent nécessaire d'automatiser la sauvegarde pour un site de production sur un serveur dédié. Voici les lignes de commandes pour Linux :

Crée une archive drupal.tar.gz du répertoire /home/atelier/drupal

 
Sélectionnez
tar -czvf /home/atelier/drupal.tar.gz /home/atelier/drupal

Extrait cette archive :

 
Sélectionnez
cd /
tar -zxvf /home/atelier/drupal.tar.gz

La commande tar possède une multitude d'options permettant de l'adapter à vos besoins. N'hésitez pas à lire sa page de manuel.

III-B-2. Sauvegarde/Restauration de la base de données

III-B-2-a. Avec phpMyAdmin

Sauvegarde de la BDD avec phpMyAdmin

Il est possible de sauvegarder/restaurer sa base de données graphiquement grâce à phpMyAdmin.

-> Connectez-vous sur phpMyAdmin : http://localhost/phpmyadmin/

-> Choisissez la base de données que vous voulez sauvegarder dans la liste sur la gauche, drupal, si vous avez suivi l'exemple de ce livre.

-> Cliquez sur l'onglet Exporter. Les paramètres par défaut devraient être les bons : le format doit être SQL. Structure et Données doivent être cochées.

Image non disponible
Interface d'export d'une base sur PhpMyAdmin

-> En bas de page, cochez Transmettre.

-> Choisissez aussi gzippé pour gagner du temps et de l'espace disque (ou zippé sous Windows).

Image non disponible
Paramètres du fichier à transmettre

Le format «bzippé» est plus performant, mais n'est pas toujours disponible.

-> Cliquez sur Exécuter.

-> Téléchargez le fichier sur votre disque local

Le fichier sauvegardé est une archive contenant une longue requête SQL à exécuter pour créer la structure de la base et y insérer ses données. Vous pouvez l'éditer pour mieux comprendre son fonctionnement.

Restauration de la BDD avec phpMyAdmin

-> Connectez-vous sur phpMyAdmin : http://localhost/phpmyadmin/

Il faut créer une base de données dans laquelle vous voulez restaurer les données.

-> Dans la zone Créer une base de données, entrez le nom de la base à créer.

-> Bouton Créer.

Vérifiez que vous êtes bien dans la base où vous voulez restaurer les données.

-> Cliquez sur l'onglet Importer.

-> Cliquez sur le bouton Parcourir, choisissez le fichier précédemment téléchargé

Image non disponible
Restauration de la base de données

-> Cliquez sur Exécuter.

Vous pouvez augmenter la taille maximum du fichier à importer en modifiant les paramètres de php.ini (chap. Configuration de PHPConfiguration de PHP ).

Si votre importation échoue à cause d'une limite de temps dépassée (timeout), rechargez la page, l'importation continuera où elle s'est interrompue.

III-B-2-b. En ligne de commande avec MySQL

Faire ses sauvegardes par phpMyAdmin est simple, mais comporte des désavantages :

  • phpMyAdmin n'est pas toujours installé ;
  • il n'est pas possible de programmer des sauvegardes automatiques ;
  • il génère parfois des erreurs ;
  • il faut télécharger un fichier qui peut être volumineux.

Pour toutes ces raisons, il est parfois préférable de passer par la ligne de commande.

Sauvegarde de la BDD en ligne de commande

Voici la ligne de commande pour sauvegarder la base (attention, le mot de passe est en clair dans le script) :

 
Sélectionnez
mysqldump --user=root --password=atelierdrupal drupal>drupal.sql

Restauration de la BDD en ligne de commande

Pour restaurer la base sauvegardée dans une autre base (drupal-test) :

 
Sélectionnez
mysql --user=root --password=atelierdrupal drupal-test<drupal.sql
Pour que la commande ci-dessus fonctionne, il faut que la base drupal-test existe. Pour la créer en ligne de commande, vous pouvez créer un fichier sql (exemple : script.sql) contenant les requêtes que vous désirez exécuter :
 
Sélectionnez
DROP DATABASE drupal-test
CREATE DATABASE drupal-test

Puis exécuter ce fichier avec la commande :
 
Sélectionnez
mysql --user=root --password=atelierdrupal drupal-test<script.sql

III-B-3. Backup and Migrate : sauvegardez votre base de données

Ce module permet de sauvegarder, directement à partir de l'interface de Drupal, votre base de données.

Vous pouvez également programmer des sauvegardes automatiques à intervalles de temps réguliers.

Ce module permet de sauvegarder uniquement la base de données et pas l'arborescence de fichiers. Veillez à bien sauvegarder l'ensemble des données de votre site (chap. Sauvegarde/restauration de l'arborescence de fichiersSauvegarde / Restauration de l'arborescence de fichiers ).

-> Installez et activez le module (version utilisée pour ce livre 7.x-2.1) -http://drupal.org/project/backup_migrate

-> Menu Configuration - lien Sauvegarder et migrer.

III-B-3-a. Onglet Backup

Cet onglet permet de sauvegarder immédiatement votre base de données, il propose deux modes, le Quick Backup (sauvegarde rapide) et le Advanced Backup (sauvegarde avancée).

Quick Backup

Trois listes déroulantes permettent de sélectionner la base à sauvegarder, l'emplacement et le profil. Par défaut il n'y a qu'une seule possibilité pour chacune des listes.

-> Bouton Backup now.

Image non disponible
Quick Backup

Advanced Backup

-> Bouton Advanced Backup (de l'onglet Backup).

Plusieurs sections permettent de configurer la sauvegarde :

Load Settings Choix d'un profil Backup and Migrate.
Backup file Configuration du nom du fichier, du format de la date dans le nom du fichier et du mode de compression du fichier.
Database Options Permet d'exclure la sauvegarde de la structure et des données de certaines tables (première liste) ou uniquement les données de certaines tables (deuxième liste). Cela peut être utile pour les tables de cache.
Une option Lock tables during backup permet de verrouiller la base de données pendant la sauvegarde.
Advanced Options Configuration de l'envoi de courriels en cas de succès ou d'échec.
Backup Destination Permet de choisir l'emplacement des sauvegardes réalisées. L'onglet Destinations ajoute des éléments à la liste.
Enregistrer ces paramètres Enregistre les options de la page pour une prochaine sauvegarde.

III-B-3-b. Onglet Restaurer

Cet onglet permet de restaurer un fichier de type *.sql ou *.sql.gz ou *.sql.zip. Il peut avoir été créé par Backup and Migrate ou bien via l'une des méthodes décrites au chapitre précédent.

Inversement, il est possible de restaurer les fichiers créés par Backup and Migrate via phpMyAdmin ou la commande mysql.

III-B-3-c. Onglet Destinations

Une destination est un emplacement où le module peut créer ou restaurer des fichiers de sauvegarde. La base de données qu'utilise Drupal est également un emplacement pour Backup and migrate (Default Database).

-> Lien + Add destination.

Vous pouvez configurer différents types d'emplacement :

Server Directory Permet au module de sauvegarder dans un autre répertoire du serveur WEB. Le serveur WEB doit avoir les droits d'écriture sur ce répertoire.
MySQL Database Configuration du nom du fichier de la sauvegarde.
FTP directory Ajout d'un emplacement sur un serveur FTP.
Amazon S3 Bucket Service de stockage en ligne d'Amazon (http://aws.amazon.com/fr/s3/).
Courriel Permet d'envoyer les sauvegardes par mail.
Image non disponible
Ajout d'un emplacement FTP
Image non disponible
Liste des emplacements disponibles

III-B-3-d. Onglet Profils

Un profil permet de réunir le nom d'une sauvegarde, son type de compression, les tables à exclure et les mails à envoyer.

Vous pourriez par exemple définir un nouveau profil qui sauvegardera uniquement les données utilisateur en sélectionnant la table users.

Image non disponible
Création d'un nouveau profil

III-B-3-e. Onglet Schedules

Cet onglet permet de programmer l'exécution des sauvegardes automatiques.

Image non disponible

Ce message indique qu'il faut définir un chemin vers le système privé de fichier. Pour cela, cliquez sur le menu Configuration - lien Système de fichiers ou sur le lien contenu dans le message affiché par Backup and Migrate.
Image non disponible
Ajout du chemin

Vous pouvez également utiliser une autre destination (chap. Onglet destinationOnglet Destinations ).

-> Lien + Add Schedule

Image non disponible
Page d'ajout d'une sauvegarde automatique

Voici les différents champs à remplir :

Activé Si la case est décochée, la sauvegarde ne s'effectuera pas.
Settings Profile Choix d'un profil créé dans l'onglet Profils.
Sauvegarder toutes les Fréquence de sauvegarde.
Nombre de sauvegardes à conserver Indiquer ici le nombre de sauvegardes à conserver avant que la plus ancienne ne soit supprimée. Pour la copie d'écran précédente, les sauvegardes seront gardées 3 heures au maximum.
Destination Choix de la destination de la sauvegarde créée dans l'onglet Destinations.
Image non disponible
Liste des sauvegardes automatiques définies

III-B-4. Features : transférez la configuration de votre site

La base de données de Drupal regroupe à la fois le contenu du site (utilisateurs, nodes, etc.) et également sa configuration (types de contenus, vues, taxonomie).

Cela pose problème lorsqu'un site est en production, que du contenu y est régulièrement ajouté par des utilisateurs et que dans le même temps des fonctionnalités doivent y être ajoutées. Vous n'avez pas le choix : vous devez travailler directement en production.

Le module Features tente de combler cette faiblesse en permettant d'exporter des composants d'un site vers un autre. Ces composants peuvent être un type de contenu, un vocabulaire, une vue, etc.

Le module transforme alors l'ensemble des composants sélectionnés en un module Drupal que vous pouvez installer sur un autre site.

Pour réaliser l'exemple suivant, il faut que vous ayez deux sites Drupal sur votre installation. Le premier sera le site de test sur lequel vous effectuerez vos développements, le second le site de production sur lequel vous installerez les modules du site de test créés par Features.

Voici les sauvegardes qui seront utilisées pour les exemples de ce chapitre :

  • site de test : sauvegarde après Content UI ;
  • site de production : installation après Partie I.

Le but de cet exemple est de transférer les composants suivants du site de test vers le site de production :

  • le type de contenu recette ;
  • les vocabulaires de taxonomie difficulté et provenance ;
  • le menu liens divers.

Création d'une fonctionnalité

Allez sur la page de configuration de Features :

-> Menu Structure - lien Fonctionnalités ;

-> Lien Créer une fonctionnalité.

Définissez les caractéristiques du module features qui sera créé :

-> Nom : À vos toques - partie 2 ;

-> Description : Fonctionnalités de la partie 2 du livre Atelier Drupal 7 ;

-> Version : 7.x-1.0.

Vous devez ajouter des composants :

-> dans la liste Éditer les composants, choisissez Types de contenu ;

-> cochez Recette.

Image non disponible
Ajout d'un type de contenu

Dans la partie droite de l'écran, s'affichent toutes les dépendances du composant sélectionné. Ici, les champs du type de contenu sont automatiquement ajoutés.

Ajoutez les vocabulaires de taxonomie :

-> dans la liste Éditer les composants, choisissez Taxonomie ;

-> cochez Difficulté et Provenance.

Et enfin le menu :

-> dans la liste Éditer les composants, choisissez Menus ;

-> cochez Liens divers

Image non disponible
La fonctionnalité est complète

-> bouton Télécharger la fonctionnalité.

Il vous est alors proposé de télécharger un fichier .tar (archive) qui contient le module Drupal.

Installation du module créé

Sur le site de production, installez le module A vos toques - partie 2 précédemment téléchargé :

-> extrayez le module dans le répertoire sites\all\modules\ de votre site de production (vous devriez obtenir un répertoire sites\all\modules\a_vos_toques_partie_2) ;

-> menu Modules.

À la section Features, le module doit apparaître :

Image non disponible
Le module créé

-> Installez les dépendances (Features et Email).

-> Activez le module A vos toques - partie 2.

Vous pouvez maintenant constater que le type de contenu, les vocabulaires et le menu ont été créés lors de l'installation du module.

Vous pouvez activer le module via la page de configuration de Features :
-> menu Structure - lien Fonctionnalités
Image non disponible
Liste des fonctionnalités du site

Mise à jour d'une fonctionnalité

Vous possédez maintenant un site de test et un autre de production. Vous pouvez donc modifier le type de contenu recette sur le site de test et transférer cette modification sur le site de production en proposant une mise à jour de votre module créé par features.

Il faut commencer par installer le module A vos toques - partie 2 précédemment créé sur le site de test. L'idée étant ensuite de le recréer lorsque des mises à jour seront faites sur le type de contenu.

-> Extrayez le module dans le répertoire sites\all\modules\ de votre site de test

Activez par l'interface de features :

-> menu Structure - lien Fonctionnalités ;

-> cochez la case A vos toques - partie 2 ;

-> bouton Enregistrer les paramètres.

Puis modifiez le type de contenu Recette :

-> menu Structure - lien Types de contenu ;

-> lien gérer l'affichage du type de contenu Recette ;

-> inversez l'ordre des champs Temps de préparation et Prix par personne ;

-> bouton Enregistrer.

Il faut maintenant recréer votre module :

-> menu Structure - lien Fonctionnalités.

L'état de la fonctionnalité est maintenant Supplanté, c'est-à-dire qu'elle a été modifiée.

Image non disponible
Cette fonctionnalité a été modifiée

-> Lien Recréer.

-> Version : 7.x-1.1.

-> Bouton Télécharger la fonctionnalité.

Mettez à jour votre fonctionnalité sur le site de production :

-> Extrayez le module dans le répertoire sites\all\modules\ de votre site de production en remplacement de l'ancien (vous pouvez écraser directement les fichiers).

-> Menu Structure - lien Fonctionnalités.

-> Décochez l'option du module pour le désactiver.

-> Réactivez le module.

Ainsi, la modification a été appliquée sur le site de production.

Le module Features tente de pallier un défaut bien connu de Drupal. Il est parfois délicat à utiliser et n'est pas parfait.
Un groupe de travail a été lancé pour que ce module ne soit plus nécessaire avec Drupal 8.

III-B-5. Sauvegarde/restauration d'une vue

Le module Views propose un système de Restauration/Sauvegarde très simple à utiliser.

Exporter une vue

-> Menu Structure - lien Views.

-> Cliquez sur le lien Exporter d'une vue

Image non disponible

-> Copiez le code de la zone de texte Exporter

Image non disponible
Exporter une vue

Vous pouvez maintenant coller ce script dans un éditeur de texte et sauvegarder le fichier.

Importer une vue

-> Menu Structure - lien Views.

-> Lien + Importer.

-> Entrez le nom de la vue.

-> Collez le code précédemment sauvegardé dans la zone Paste view code here

Image non disponible
Importer une vue

-> Bouton Importer.

III-C. Outils d'administration

III-C-1. Optimisation des performances

Drupal est parfois critiqué pour le nombre de requêtes SQL qu'il génère pour l'affichage d'une page. Il propose pourtant un système de cache efficace et facile à configurer qui permet d'améliorer ses performances.

Lorsque le cache est activé, Drupal enregistre dans la base de données du code HTML généré par PHP. Si une requête identique est rencontrée par la suite, Drupal retourne alors directement le code HTML sans exécuter à nouveau le code PHP.

Voici une description de la page qui permet d'optimiser les performances dans Drupal :

-> Menu Configuration - lien Performance.

Même si aucune option n'est activée pour le cache des pages, Drupal utilise quand même le cache pour les menus, les thèmes, le système de fichiers, etc. Donc, si vous faites des modifications sur un site et que ces modifications ne sont pas prises en compte, videz le cache.

Voici la liste des options disponibles pour la Mise en cache : 

Pages en mémoire cache pour les utilisateurs anonymes Les pages mises en caches dans leur intégralité sont servies uniquement pour les visiteurs anonymes. En effet, lorsque l'utilisateur est identifié, il y a au moins le bloc affichant le nom de l'utilisateur qui diffère.
Si vous avez un site vitrine visité uniquement par des anonymes, cette option est fortement recommandée pour améliorer les performances.
Cache des blocs Le code HTML des blocs peut ne pas varier d'un utilisateur identifié à l'autre. Ce cache permet donc d'améliorer les performances pour un site communautaire.
Durée de vie minimale de la mémoire cache Temps minimum avant que les pages ne soient recréées. Choisir <aucun> est une bonne solution ici.
Expiration des pages en cache Durée de vie maximale d'une page dans le cache.

Il est préférable de n'activer aucune option de cette page lorsque votre site est en cours de développement.

Voici la liste des options disponibles pour l'Optimisation de la bande passante :

Compression des pages cachées Compresser les données permet de gagner du temps de chargement des pages et d'économiser de la bande passante.
Agréger et compresser les fichiers CSS Cette option permet de réduire la taille des fichiers CSS en les réunissant en un seul et en supprimant les caractères de mise en forme (commentaires, retour à la ligne, etc.).
Cela peut être pénalisant lors du développement de nouveaux thèmes.
Cela peut également être une bonne solution pour contourner la limite des 32 fichiers CSS d'Internet Explorer.
Agréger les fichiers JavaScript Idem à l'option précédente, mais pour les fichiers .js

Il existe de nombreux projets visant à créer du cache au niveau du serveur Apache.

III-C-2. Update Status : mettre à jour Drupal

Le module Update Status vérifie régulièrement si votre installation (cœur de Drupal, modules installés et thèmes installés) possède de nouvelles versions disponibles sur drupal.org.

Update Status peut ralentir l'affichage de certaines pages de votre site, notamment la page Configuration. Vous pouvez désactiver ce module pour retrouver une vitesse d'affichage normale.

III-C-2-a. Mise à jour des modules

Lorsque Update Status rencontre un problème de mise à jour, un message s'affiche en haut de différentes pages.

Image non disponible
Message d'avertissement sur la page des modules

-> Vous pouvez en savoir plus sur le problème rencontré en cliquant sur le lien mises à jour disponibles du message.

Ou accéder directement à la page en cliquant sur :

-> menu Modules - lien Mettre à jour

Image non disponible
Mise à jour recommandée pour Video Filter et conseillée pour Adresse Field et Entity API

-> cochez les modules que vous souhaitez mettre à jour ;

-> Cliquez sur le bouton Télécharger ces mises à jour.

Après le téléchargement et avant l'installation, il se peut que la nouvelle version du module impose une modification de la structure de la base de données. Drupal conseille alors de faire une sauvegarde de celle-ci.

Image non disponible
Sauvegardez la base avant la mise à jour

-> Cliquez sur le bouton Continuer.

Une fois la mise à jour effectuée, Drupal propose un lien pour mettre à jour la base si celle-ci doit être modifiée. Ne pas effectuer cette mise à jour peut provoquer des erreurs de fonctionnement.

Image non disponible
Installation réussie, mais mise à jour de la base nécessaire

-> Lien Run database updates.

Il est possible de faire les mises à jour de la base en lançant l'URL http://drupal.tld/update.php (drupal.tld étant l'adresse de votre site).

-> Suivre les différentes étapes de la mise à jour de la base.

Votre module est alors mise à jour !

III-C-2-b. Mise à jour du cœur de Drupal

Le cœur de Drupal (Drupal et les modules installés par défaut) ne peuvent être mis à jour automatiquement, Update Status le signale ainsi :

Image non disponible
Une mise à jour du cœur de Drupal est disponible

-> Faites une sauvegarde de votre site en cas de problème lors de la mise à jour.

-> Cliquez sur le lien Drupal core et téléchargez la dernière version.

-> Extrayez l'archive dans le répertoire de votre installation et écrasez tous les fichiers.

-> Lancez le script de mise à jour de la base de données Drupal en faisant pointer un navigateur vers le fichier update.php (http://localhost/drupal/update.php).

-> Bouton Continue.

Le script indique alors les mises à jour qui seront appliquées.

Image non disponible
Mise à jour de la base de données

-> Bouton Apply pending updates.

Votre site est maintenant à jour !

III-C-2-c. Configuration

Vous pouvez configurer le module Update Status via le lien suivant :

-> menu Rapports - lien Mises à jour disponibles.

S'affiche alors le rapport complet de la vérification des mises à jour de votre installation.

-> Onglet Paramètres.

Cette page permet de définir la fréquence de vérification, l'envoi de mail en fonction des mises à jour trouvées et si les modules installés, mais non activés doivent être vérifiés.

III-C-2-d. Le mode maintenance

Lors de la mise à jour de modules ou du cœur de Drupal, il est préférable de mettre votre site en mode maintenance. Ce mode permet aux visiteurs du site de voir une page d'information plutôt qu'une liste d'erreurs PHP.

Image non disponible
Le site est en cours de maintenance

-> Pour configurer la page maintenance, menu Configuration - lien Mode maintenance

Image non disponible
Page de configuration du mode maintenance

Vous pouvez sur cette page mettre le site en mode maintenance et modifier le message d'information.

Si par accident, vous êtes bloqué en mode maintenance, voici la requête SQL à exécuter pour en sortir (dans phpMyAdmin par exemple) :
 
Sélectionnez
UPDATE variable SET value = 's:1:"0"'; WHERE name= 'site_offline';
 
DELETE FROM cache WHERE cid = 'variables';

III-C-3. Le Cron

Cron est un programme qui permet d'exécuter automatiquement des tâches à une date ou à une heure spécifiée à l'avance ou avec un intervalle de temps régulier. Drupal a besoin d'exécuter régulièrement des tâches de maintenance : vérifier la présence de mises à jour, purger des fichiers de log et bien d'autres choses demandées par différents modules. Pour cela, Drupal utilise le programme cron.

Pour exécuter ces tâches, vous pouvez cliquer sur le lien Vous pouvez lancer le cron manuellement depuis le tableau de bord.

Cron peut-être configuré via la page :

-> menu Configuration - lien Cron

Image non disponible
Page de configuration du Cron

Vous pouvez ici lancer manuellement le cron et configurer sa fréquence de lancement automatique.

III-D. La base de données de Drupal

Ce chapitre présente comment sont organisées une partie des données de Drupal. Vous pouvez lire ce chapitre pour mieux comprendre le fonctionnement interne de Drupal ou pour pouvoir importer ou exporter des données depuis ou vers Drupal.

III-D-1. Gestion des utilisateurs

La gestion des utilisateurs dans Drupal a été décrite au chap. User : gestion des utilisateursUser : gestion des utilisateurs . Les données des utilisateurs étant organisées de façon simple, ce premier chapitre donnera les clés pour mieux comprendre les schémas de cet ouvrage par la suite.

Une base de données est composée de tables, chaque table est composée de champs, et chaque champ contient des données.

III-D-1-a. La table users

La table users contient les données relatives aux utilisateurs.

Extrait de la table users
uid name pass mail
0      
1 admin $P$C3L98Cx2qHW9r0XoLfsCXM4eBZ9KWh1 test@laposte.net
2 bertrand $P$CGpxQP8ipe1066j.oFT7Vz0B5fdOQT1 bertrand@atelierdrupal.net
3 Benoit $P$Cvez9GgGmZq/KjiYp4XTVTMueC79KR. benoit@atelierdrupal.net

Cette table contient le nom de l'utilisateur (name), son mot de passe (pass), son mail, sa signature, son numéro (uid), etc. Ces colonnes sont appelées des champs.

Dans cet exemple, il y a quatre utilisateurs, l'utilisateur ayant le numéro 1 est admin, le numéro 2 est bertrand et il a pour mail bertrand@atelierdrupal.net. Chaque utilisateur possède un numéro unique (uid) attribué par Drupal appelé clé primaire.

Le champ mot de passe n'est pas lisible directement dans la base pour des raisons de sécurité (une personne pouvant lire la base ne peut ainsi pas connaître le mot de passe de l'administrateur de Drupal), il est crypté par la fonction drupal_hash_base64.

La table Users et ses champs seront schématisés ainsi :

Image non disponible
La table users (gestion des utilisateurs)

Cette table contient d'autres champs (language, signature, etc.) qui ne seront pas détaillés ici.

Exemple de requêtes SQL

Une requête SQL interroge la base pour récupérer une certaine partie des données.

Par exemple, la requête suivante affiche le nom et le mail de chaque utilisateur :

 
Sélectionnez
SELECT name, mail
 
FROM users

Vous pouvez exécuter cette requête dans phpMyAdmin :

-> rendez-vous sur phpMyAdmin (http://drupal.tld/phpmyadmin) ;

-> dans la colonne de gauche, sélectionnez la base drupal ;

-> onglet SQL ;

-> entrez la requête

Image non disponible
La requête dans phpMyAdmin

-> bouton Exécuter.

Le résultat s'affiche alors.

Image non disponible
Résultat de la requête

III-D-1-b. Les tables role et role_permission

Chaque utilisateur possède un ou plusieurs rôles qui lui procurent des permissions. La liste des rôles est stockée dans la table role et la liste des permissions dans la table role_permission.

Voici le contenu de ces tables :

La table role
rid name
1 anonymous user
2 authenticated user
3 administrator
4 rédacteur de recettes

Ici, il existe donc quatre rôles différents, le rôle numéro 3 est le rôle administrateur.

Extrait de la table role_permission
rid permission
3 access administration pages
2 access comments
3 access comments
1 access content
2 access content
3 access content
4 access content
3 access content overview

Chaque permission est décrite par une phrase dans le champ permission. Le champ rid indique le numéro du rôle ayant le droit d'exécuter la permission.

Le rôle numéro 3 (rôle administrateur) peut accéder aux pages d'administration (access administration pages).

Les rôles 1 (utilisateur anonyme), 2 (utilisateur authentifié), 3 (administrateur) et 4 (Rédacteur) peuvent accéder au contenu (access content).

On dit donc que le champ rid de la table role_permission est une clé étrangère liée au champ rid de la table role. Voici comment cela sera représenté dans cet ouvrage :

Image non disponible
Liste des champs de role et role_permissions

Les schémas de ce livre ont été réalisés grâce au Concepteur de phpMyAdmin. Dans Drupal, aucune relation n'existe entre les tables, elles ont été créées pour faciliter la compréhension.

Exemple de requêtes SQL

Vous pouvez effectuer des requêtes sur plusieurs tables.

Afficher les permissions accordées au rôle « Rédacteur » :

 
Sélectionnez
SELECT role.name, role_permission.permission
FROM role
JOIN role_permission ON role.rid = role_permission.rid
WHERE role.name = "Rédacteur"

III-D-1-c. La table users_roles

Des rôles sont attribués aux utilisateurs. Un utilisateur peut posséder plusieurs rôles et un rôle peut être possédé par un utilisateur. Il est donc nécessaire d'avoir une table contenant tous les couples utilisateur/rôle possibles. Cette table est la table users_roles.

Contenu de la table users_roles
uid rid
2 4
3 3
3 4

L'utilisateur numéro 2 possède le rôle numéro 4 (Rédacteur).

L'utilisateur numéro 3 possède les rôles numéro 3 (Administrateur) et 4 (Rédacteur).

La table users_roles contient donc deux clés étrangères. Elle est appelée table intermédiaire.

Image non disponible
Schéma de la gestion des utilisateurs, des rôles et des permissions sous Drupal

Exemple de requêtes SQL

Afficher les rôles associés à l'utilisateur Benoit :

 
Sélectionnez
SELECT users.name, role.name
FROM users
JOIN users_roles ON users.uid = users_roles.uid
JOIN role ON role.rid = users_roles.rid
WHERE users.name = "Benoit"

Afficher les permissions de Benoit :

 
Sélectionnez
SELECT DISTINCT users.name, role_permission.permission
FROM users
JOIN users_roles ON users.uid = users_roles.uid
JOIN role ON role.rid = users_roles.rid
JOIN role_permission ON role.rid=role_permission.rid
WHERE users.name = "Benoit"

III-D-2. Gestion des nodes

Une ligne est créée dans la table node pour chaque nouvelle node ajoutée au site.

III-D-2-a. Types de nodes

Image non disponible
Gestion des nodes

Dans la table node, vous trouverez des informations telles que le langage, le numéro de l'utilisateur qui a créé la node (uid), son titre (title), ses options de publication (sticky, promote), etc. Dans cette table, le seul champ présent est le titre, les autres champs sont stockés dans d'autres tables qui seront étudiées au prochain chapitre.

Node est reliée à la table node_type qui définit les types de nodes (article, page, sondage, recette de cuisine).

Exemple de requêtes SQL

Afficher le titre de toutes les nodes du site :

 
Sélectionnez
SELECT title
FROM node

Afficher le titre de toutes les nodes et leur auteur :

 
Sélectionnez
SELECT title, users.name
FROM node
JOIN users ON node.uid=users.uid

Afficher le nombre de nodes par type :

 
Sélectionnez
SELECT type, count(*) AS "Nombre nodes"
FROM node
GROUP BY type

III-D-2-b. Commentaires

Image non disponible
La table comment des commentaires

La table comment contient les informations liées aux commentaires. Elle contient deux clés étrangères, uid qui indique quel est l'auteur du commentaire et nid qui indique à quelle node se rattache le commentaire.

Le champ pid est également une clé étrangère de la table comment elle-même qui indique quel est le commentaire (cid) parent (dans le cas ou les commentaires sont hiérarchisés).

Exemple de requêtes SQL

Afficher le nombre de commentaires par node :

 
Sélectionnez
SELECT node.title, count(*) AS "Nombre Commentaires"
FROM node
RIGHT JOIN comment ON comment.nid=node.nid
GROUP BY node.title

III-D-3. Gestion des champs

Le contenu d'une node dépend des champs qui composent le type de contenu (chap. Field UI : Types de contenus personnalisés4 - Field UI : types de contenus personnalisés ).

III-D-3-a. Les tables field_data_*

Tous les champs se rapportant aux nodes se trouvent dans les tables préfixées par la chaine field_data_*. Lorsqu'un nouveau champ est créé, une table est créée (champ body => field_data_body, champ prix => field_data_prix).

Image non disponible
Contenu des nodes

Le champ entity_type de chaque table field_data_* indique quel est le type d'entité (node, users, comment) à laquelle il se rattache. Le champ bundle lui, stocke le type de contenu (article, page, recette) lorsque entity_type est une node. Le champ entity_id contient le numéro de l'entité (nid lorsque entity_type est une node).

Les tables field_data peuvent avoir des champs différents en fonction du type de champ, voici trois exemples de tables :

  • le contenu du champ body, de type Texte long et résumé, est stocké dans la table field_data_body. Le contenu (body_value), le résumé (body_summary) et le format d'entrée sous forme de clé étrangère (body_format) sont stockés dans la table ;
Extrait du contenu de la table field_data_body
entity_type bundle entity_id body_value
node article 1 Voilà, c'est une version estivale de ma recette au
node article 2 Risotto à la bière blanche et Stilton et tranches de
node article 3 ------- Ingrédients (pour 1 pers.) -------
node article 5 Voilà  une recette toute simple pour faire de
node recette 6 Si je devais choisir mon légume fétiche du mo
  • le contenu du champ image, de type image, est stocké dans la table field_data_field_image. Cette table contient un lien vers le fichier sous forme de clé étrangère (field_image_fid) et les paramètres alt (field_image_alt) et title (field_image_title) ;
  • le contenu du champ Prix, de type réel à virgule flottante, est stocké dans la table field_data_field_prix. Cette table contient uniquement le réel stocké (field_prix_value).

Exemple de requêtes SQL

Afficher le nombre de caractères du body des nodes de type « article » :

 
Sélectionnez
SELECT title, CHAR_LENGTH(body_value)
FROM field_data_body
JOIN node ON field_data_body.entity_id=node.nid
WHERE node.type="article"

Afficher le titre des recettes triées par prix :

 
Sélectionnez
SELECT node.title, field_prix_value
FROM field_data_field_prix
JOIN node ON field_data_field_prix.entity_id=node.nid
ORDER BY field_prix_value

III-D-3-b. Cas d'un champ contenant plusieurs valeurs

Un champ peut contenir un nombre de valeurs illimité comme le champ ingrédients que vous avez créé pour le type Recettes.

Dans ce cas, le schéma relationnel entre les tables est identique :

Image non disponible
Gestion d'un champ à valeurs multiples

Il y aura donc plusieurs lignes dans la table field_data_field_ingredients qui auront un champ entity_id identique. Le champ delta permet de connaître l'ordre des lignes.

Exemple de requêtes SQL

Affiche le nombre d'ingrédients pour chaque recette :

 
Sélectionnez
SELECT node.title, count(*) as "Nombre d'ingrédients"
FROM node
LEFT JOIN field_data_field_ingredients ON field_data_field_ingredients.entity_id=node.nid
WHERE node.type="recette"
GROUP BY node.nid

Liste des ingrédients de la recette « Gnocchis à la courge, sauce mandarine et parmesan » :

 
Sélectionnez
SELECT field_ingredients_value
FROM node
LEFT JOIN field_data_field_ingredients ON field_data_field_ingredients.entity_id=node.nid
WHERE node.title="Gnocchis à la courge, sauce mandarine et parmesan"
ORDER BY field_data_field_ingredients.delta

III-D-3-c. Les formats d'entrée

Un champ personnalisé peut être associé à un format d'entrée. C'est le cas par exemple du champ body d'un article ou d'une page.

Image non disponible
Gestion des formats d'entrée

Un champ contenant un format d'entrée possède une clé étrangère (ici, body_format) la liant à la table filter_format. Chaque format d'entrée contient ensuite un ou plusieurs filtres de la table filter.

III-D-3-d. Paramètres des champs

Chap. Ajout du champ photo de l'articleAjout du champ photo de l'article, vous avez ajouté le champ field_image du type article au type recette. Les informations relatives aux photos des articles et des recettes sont donc stockées dans la table field_data_field_image. Cependant, il est possible de définir certaines options spécifiquement pour chaque champ, voici comment cela est organisé dans la base de données.

Image non disponible
Champs liés aux entités

Les champs field_id et field_name indiquent le numéro et le nom du champ (body, field_prix, field_photo, etc.), entity_type le type d'entité et bundle le nom de l'entité.

id field_id field_name entity_type bundle
1 2 body node page
2 1 comment_body comment comment_node_page
3 2 body node article
4 1 comment_body comment comment_node_article
5 3 field_tags node article
6 4 field_image node article
7 2 body node recette
8 1 comment_body comment comment_node_recette
9 5 field_preparation node recette
10 6 field_ingredients node recette
11 7 field_etapes node recette
12 8 field_photo node recette

Exemple de requêtes SQL

Afficher les champs attachés au type de contenu « recette » :

 
Sélectionnez
SELECT field_name
FROM field_config_instance
WHERE entity_type = "node" AND bundle = "recette"

III-D-3-e. Les champs des autres types d'entité

Dans la base de données Drupal, une entité est un élément auquel il est possible d'ajouter des champs personnalisés. Cela peut être une node, un terme de taxonomy, un commentaire, etc.

Image non disponible
Les tables field_data_* avec différentes entités

Les tables sont organisées de la même façon que pour les entités node : une table field_data_* par champ et un numéro d'entité dans le champ entity_id (nid pour les nodes, tid pour les vocabulaires, cid pour les commentaires, etc.).

Le champ bundle change alors selon le type d'entité : type de node, nom du vocabulaire, etc.

Il est possible de connaître le type d'entité grâce au champ etid de chaque table.

Chaque numéro est décrit dans la table field_config_entity_type.

La table field_config_entity_type
etid type
2 comment
1 node
3 taxonomy_term

III-D-3-f. Les révisions des champs

Chaque node peut avoir une révision ou version (géré par l'onglet horizontal Révisions).

Image non disponible
Révisions des champs personnalisés

La table node contient deux clés : nid (numéro de la node) et vid (numéro de révision en cours). Elle est reliée à la table node_revision qui contient les données des différentes révisions de node.

Pour chaque table field_data_*, une table field_revision_* existe. Ces deux tables sont reliées de la même manière que les tables node et node_revision. Elles permettent de stocker les révisions de chaque champ.

III-D-3-g. Relation entre les vocabulaires et les nodes

Image non disponible
Organisation des données pour la taxonomie

La table taxonomy_vocabulary contient la description des vocabulaires. La table taxonomy_term_data contient les descriptions de chaque terme.

La table taxonomy_index est une table de transition entre taxonomy_term_data et node car une node peut avoir plusieurs termes et un terme peut être relié à plusieurs nodes.

Comme vu au chap. Les champs des autres types d'entitéLes champs des autres types d'entité taxonomy_term_data peut-être relié aux tables field_data_*

Exemple de requêtes SQL

Liste des termes de la node « Gnocchis à la courge, sauce mandarine et parmesan » :

 
Sélectionnez
SELECT taxonomy_term_data.name
FROM taxonomy_term_data
JOIN taxonomy_index ON taxonomy_term_data.tid = taxonomy_index.tid
JOIN node ON node.nid = taxonomy_index.nid
WHERE node.title = "Gnocchis à la courge, sauce mandarine et parmesan"

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Licence Creative Commons
Le contenu de cet article est rédigé par Cyprien Roudet et est mis à disposition selon les termes de la Licence Creative Commons Attribution 3.0 non transposé.
Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright © 2013 Developpez.com.