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.
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
sudo a2enmod rewrite
-> Puis modifiez le fichier de configuration d'Apache situé dans le répertoire de Drupal :
sudo gedit /etc/apache2/apache2.conf
-> Ajoutez à la fin de ce fichier les lignes suivantes :
<Directory /var/www/drupal>
AllowOverride all
</Directory>
-> Redémarrez Apache
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.
-> 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
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
<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 :
sudo gedit /etc/apache2/sites-enabled/drupal.conf
-> Insérez-y les lignes suivantes :
<VirtualHost *:80>
DocumentRoot /var/www/drupal
ServerName drupal.tld
</VirtualHost>
-> Redémarrez Apache :
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.
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.
Sous Windows :
Dans une Invite de commandes
c:\wamp\bin\apache\apache2.2.17\bin\httpd.exe -S
Sous Linux :
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.
Sous Linux :
Pour éditer php.ini :
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.
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.
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 :
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
$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. |
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
La page se recharge alors.
-> À la section Privilèges spécifiques à une base de données, choisissez la base de données drupal
La page se recharge une nouvelle fois et affiche les privilèges à donner pour votre seule base drupal.
Lien Tout cocher.
-> 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 :
$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.
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]
-> 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
sudo apt-get install ssmtp
-> Éditez le fichier de configuration de SSMTP :
sudo gedit /etc/ssmtp/ssmtp.conf
-> Modifiez les champs ainsi :
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.
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 :
sudo gedit /etc/postfix/main.cf
-> Complétez le paramètre relayhost par le nom de votre STMP entre crochets :
relayhost = [smtp.free.fr]
-> Enfin, redémarrez postfix
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 ).
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
-> 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
tar -czvf /home/atelier/drupal.tar.gz /home/atelier/drupal
Extrait cette archive :
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.
-> En bas de page, cochez Transmettre.
-> Choisissez aussi gzippé pour gagner du temps et de l'espace disque (ou zippé sous Windows).
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é
-> 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) :
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) :
mysql --user=root --password=atelierdrupal drupal-test<drupal.sql
DROP
DATABASE
drupal-
test
CREATE
DATABASE
drupal-
test
Puis exécuter ce fichier avec la commande :
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.
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. |
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.
III-B-3-e. Onglet Schedules ▲
Cet onglet permet de programmer l'exécution des sauvegardes automatiques.
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.
Vous pouvez également utiliser une autre destination (chap. Onglet destinationOnglet Destinations ).
-> Lien + Add Schedule
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. |
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é
- Sur le site de test, téléchargez et activez le module Features (http://drupal.org/project/features) - Version utilisée pour ce livre 7.x-1.0-beta3.
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.
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
-> 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 :
-> 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.
-> menu Structure - lien Fonctionnalités
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.
-> 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
-> Copiez le code de la zone de texte Exporter
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
-> 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.
-> 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
-> 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.
-> 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.
-> 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 :
-> 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.
-> 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.
-> Pour configurer la page maintenance, menu Configuration - lien Mode maintenance
Vous pouvez sur cette page mettre le site en mode maintenance et modifier le message d'information.
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
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.
uid | name | pass | |
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 :
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 :
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
-> bouton Exécuter.
Le résultat s'affiche alors.
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 :
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.
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 :
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 » :
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.
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.
Exemple de requêtes SQL
Afficher les rôles associés à l'utilisateur Benoit :
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 :
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 ▲
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 :
SELECT
title
FROM
node
Afficher le titre de toutes les nodes et leur auteur :
SELECT
title, users.name
FROM
node
JOIN
users ON
node.uid
=
users.uid
Afficher le nombre de nodes par type :
SELECT
type
, count
(*)
AS
"Nombre nodes"
FROM
node
GROUP
BY
type
III-D-2-b. 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 :
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).
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 ;
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 » :
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 :
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 :
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 :
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 » :
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.
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.
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 » :
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.
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.
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).
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 ▲
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 » :
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"