Passer de SPIP à Drupal
Comment imiter le comportement de SPIP et découvrir Drupal pour les amateurs de ce CMS.
Comment imiter le comportement de SPIP et découvrir Drupal pour les amateurs de ce CMS.
Bien que de nombreux articles existent déjà et que régulièrement de nouveaux en sont écrits sur ce qu'est Composer et comment s'en servir avec Drupal, voici un petit rappel.
Composer est un outil de gestion de paquets PHP, il permet de :
télécharger des librairies (principalement) PHP avec leurs lots de dépendances,
gérer les mises à jour de ces librairies,
exécuter des scripts, renseignés dans son fichier composer.json.
Nous avions abordé dans un précédent billet (Une feuille de route pour Drupal 8, et après ?) la nouvelle politique de Drupal 8 en matière de gestion de version, de support et de maintenance de ses versions mineures et majeures. Cette politique a quelque peu évoluée depuis la dernière conférence DrupalCon Baltimore en avril 2017. Et cette évolution de la stratégie de Drupal mérite qu'on s'y attarde quelque peu car elle peut amener un nouvel éclairage à ceux qui hésitent à migrer leur site sur Drupal 8.
Let's Encrypt est une autorité de certification (CA) qui fournit un moyen facile d'obtenir et d'installer des certificats TLS et SSL gratuitement, ce qui permet d'appliquer le protocole HTTPS sur les serveurs WEB.
Il simplifie le processus en fournissant un logiciel, le Certbot, qui permet d'automatiser la plupart des étapes d'installation.
Du 21 au 25 mars 2017 ont eu lieu les Drupal Developer Days à Séville. Environ 280 personnes y ont participé.
Cela était très sympathique et enrichissant d'être au contact avec la communauté internationale et des nombreux français sur place :).
L'ambiance est bien différente d'une DrupalCon, on est moins noyé dans la masse et il est plus facile d'aborder et discuter avec des personnes « influentes/connues » dans la communauté.
Les nouveautés de Drupal 8.3.0
admin
jeu 06/04/2017 - 18:30
Depuis le 6 avril 2017 la nouvelle version mineure de Drupal, 8.3.0, est disponible. Bien que de nombreuses initiatives se développent rapidement, le contenu du cœur n'a, cette fois-ci, pas énormément évolué.
Depuis le 6 avril 2017 la nouvelle version mineure de Drupal, 8.3.0, est disponible. Bien que de nombreuses initiatives se développent rapidement, le contenu du cœur n'a, cette fois-ci, pas énormément évolué. Comme pour la sortie de Drupal 8.2.0, cet article vous dévoilera les détails de cette nouvelle mise à jour.
Après un an de développement et de tests, le module expérimental BigPipe est le premier à être reconnu comme stable et à intégrer officiellement le cœur. Celui-ci, dont on vous a déjà parlé à chaque version mineure depuis la 8.1.0, permet d'améliorer l'expérience des utilisateurs en réduisant le temps passé à attendre le chargement de la page en apparence. En effet, il fournit au navigateur du contenu à afficher le plus rapidement possible tout en continuant de calculer l'affichage des zones complexes ou spécifiques à l'utilisateur⋅rice en parallèle.
Particulièrement efficace dans le cadre d'un trafic d'utilisateur⋅rice⋅s connecté⋅e⋅s, BigPipe souffrait d'un défaut lorsqu'il fallait servir une page anonyme pour la première fois, avant même sa mise en cache. Heureusement, ce cas précis se résout maintenant très simplement à l'aide du module Sessionless BigPipe.
Dans le cadre de l'avancement de la Workflow Initiative qui vise à intégrer un système générique de gestion d'états et de transitions dans le cœur, le module Content Moderation a été créé et intégré en tant que module expérimental dans la version 8.2.0. Initialement, ce module ne permettait que de gérer un workflow de publication appliqué aux nœuds. Dans cette nouvelle mouture, tout le code générique concernant la création et l'organisation d'un workflow a été déplacé dans le module Workflow. Le module Content Moderation, lui, ne contient plus que le code spécifique pour gérer le workflow de publication des nœuds et, en bonus, des commentaires.
Avec ce nouveau découpage, de nombreux bugs ont été corrigés et une nouvelle interface d'administration, simplifiée, a été mise en place.
D'abord abandonnée lors de la phase de développement initial de Drupal 8, la Layout Initiative refait son entrée dans le cœur à l'initiative des mainteneur⋅euse⋅s de quelques uns des modules les plus utilisés de Drupal 7 : Display Suite, Field Group et Panels. En effet, lors du portage de leurs modules vers Drupal 8, tou⋅te⋅s ont dû commencer à développer le même type d'interface et ils et elles ont rapidement constaté qu'il serait préférable de faire converger leurs besoins communs pour mutualiser le code au sein du cœur. Ainsi est né le module Layout Discovery, qui permet de définir et de manipuler de nouveaux objets de configuration, associés à des templates, les Layouts. Une fois n'est pas coutume, Display Suite en a profité pour se décharger d'une partie de ses fonctionnalités dans le cœur, sous la forme du module Field Layout. Ce dernier permet, comme Display Suite en Drupal 7, d'organiser les champs des entités pour les placer dans diverses zones, définies par le Layout sélectionné.
Bien qu'en alpha, ces deux modules aux fonctionnalités relativement simples remplissent déjà plutôt bien leur office et n'ont à ce jour aucun bug majeur de connu.
Le module Migrate passe enfin en bêta ! Cela signifie que les tâches majeures ont été effectuées et qu'il proposera désormais des chemins de migration d'une version bêta à la suivante si jamais un changement devait casser la compatibilité descendante.
En parallèle, Migrate Drupal et Migrate Drupal UI avancent doucement. La migration de sites Drupal 6 vers Drupal 8 sera bientôt en bêta. Celle de sites Drupal 7 est toujours à la traîne mais c'est normal car les dites Drupal 7 ont encore de beaux jours devant eux.
On a pu également constater de nombreuses améliorations du côté du module Content Moderation pour rendre la modération disponible pour toutes les entités. Attention toutefois, du fait de son statut d'alpha, la version 8.3 ne contient pas de chemin de mise à jour depuis les versions antérieures !
Le module DateTime Range, nécessaire aux modules contribués de calendriers notamment, avance sûrement vers une version stable qui devrait arriver prochainement.
Enfin, les modules Settings Tray, Place Block et Inline Form Errors n'ont pas connu de changements majeurs depuis la dernier version mineure.
Du côté des créateur⋅rice⋅s de contenus, pas grand chose à se mettre sous la dent si ce n'est la mise à jour de la librairie CKEditor qui fournit l'éditeur de texte riche par défaut de Drupal 8. Celle-ci apporte un nouveau thème visuel, plus léger et moderne, permettant de se concentrer plus sur le contenu. Elle fait désormais également apparaître les raccourcis clavier des différents boutons lorsqu'ils sont survolés avec votre souris, elle s'ajuste automatiquement en hauteur à mesure que vous rédigez du contenu (jusqu'à une taille maximale lui permettant de tenir dans l'écran) et intègre enfin la possibilité de coller du contenu depuis le web ou depuis Word en préservant la mise en page ou en le purifiant (selon le bouton utilisé).
Hormis la mise à jour de l'éditeur, une petite nouveauté pratique fait son apparition dans l'édition rapide du contenu. En effet, les champs de type image permettent désormais de faire glisser une image directement dans le navigateur au lieu de passer par le bouton "Parcourir" (qui reste cependant accessible en cliquant directement sur la zone).
Pour avoir à l'œil son site, Drupal dispose d'une page dans les rapports contenant un récapitulatif de l'état général du site. Cette page, nommée "Tableau de bord d'administration", contient des informations sur le serveur mais aussi sur diverses options de configuration importantes et sur des points d'attention généraux soulevés par le cœur et les modules. Auparavant, cette page était une longue liste de points classés par ordre alphabétique. Désormais, les informations les plus utiles sont mises en avant et sont classées par leur criticité.
D'autres améliorations diverses ont été apportées à l'interface d'administration pour la rendre plus fluide :
Comme à chaque version mineure, les fonctionnalités liées au webservices ont fait un bond en avant :
Côté architecture et industrialisation, Drupal 8 incite les projets à utiliser le système de gestion de paquets Composer. C'est donc tout naturellement que le packagist de drupal.org a été ajouté au composer.json du cœur, de même que les types de packages drupal-module, drupal-theme, drupal-profile, drupal-drush, drupal-custom-module et drupal-custom-theme ont été ajoutés, permettant à Composer de placer les paquets dans les bons répertoires.
Enfin, côté code et notamment côté standards, la syntaxe de tous les arrays du cœur a été modernisée pour passer à la notation avec crochets. De plus, la majorité des constantes utilisées par le cœur ont été intégrées dans des classes pour éviter le risque de conflit avec des librairies tierces et respecter les bonnes pratiques de la profession.
Photo de couverture © Mark Robinson, retouchée par Happyculture
Une année de plus dans l'histoire de l'association vient de se clôturer par cette assemblée générale. Nous étions 14 participants/votants à ce rendez-vous, sur 43 adhérents à jour de cotisation.
Profitant de nos nouveaux supports de communication, nous avons présenté le bilan de l'année avec le nouveau format de présentation de l'association. Ce format, nouvellement disponible, est à disposition de tous ceux souhaitant présenter l'association ou présenter des sujets liés à Drupal lors de meetups et rencontres, à but Open Source bien entendu.
Comment ne pas mentionner le Drupalcamp Nantes 2016 ?
Le bureau de l'association remercie toute l'équipe bénévole de l'évènement et particulièrement Sébastien Corbin qui a porté ce groupe vers cet évènement.
Le bureau a donc décidé en conséquence de remettre à Sébastien le prix Drupal France 2017 pour le remercier, pour toutes ses actions et le temps qu'il a consacré à Drupal et à la communauté.
A noter que cette année encore, l'association a été présente à d'autres évènements : WordCamp, AgoraCMS, JDLL, Drupagora, OSS Paris, Symfony Live ... Ces types de représentation seront toujours à l'honneur pour l'année à venir et nous en sommes très fiers.
Les évènements de l'association se sont aussi les rencontres locales dans toute la France, par le biais des meetups. Cette année nous avons noté plus de 25 rencontres, 11 drinks, et plusieurs sprints.
L'association et tous les membres du bureau avaient suivi l'évolution du parcours de Cellou Diallo, c'est avec un grand regret que nous le voyons quitter la France, mais gardons en secret espoir qu'il puisse monter à son tour une association Drupal au Sénégal.
La communauté c'est aussi de l'entraide et cette année se sont déroulés plusieurs sprints d'un sprint "premiers patchs". Il y a toujours un bon moment pour commencer à contribuer !
A noter les autres sprints : média et traduction.
L'année dernière nous présentions notre nouveau logo, cette année encore nous avons poursuivis nos travaux. En plus des slides nommé, le site a reçu quelques améliorations. Donc le changement de nom de domaine, pour le très officiel drupal.fr.
Innovation aussi que le Grand Sondage Drupal France lancé en fin d'année. Nous remercions toutes les personnes ayant donné de leur temps pour nous aider. Nous avons reçu de nombreuses et qualitatives idées. Nous referons sans doute un sondage de ce type.
Il nous reste encore quelques sujets à traiter et des sujets en cours. Nous avons engagé cette année une discussion avec Dries et la Drupal Association à propos des noms de domaines. Nous espérons vous informer de ces avancées le plus tôt possible.
Et pour revenir sur les commissions, un premier groupe a lancé des projets sur la refonte du site drupal.fr, toujours en cours de conception, nous espérons vous dévoiler le plus tôt possible cette nouvelle version, qui proposera, sur un socle Drupal 8, de nouveaux contenus à destination des débutants et de tous ceux qui souhaitent en savoir plus sur Drupal.
Autre travail commencé, celui d'une charte pour l'organisation des meetups. Ce document encore en cours de rédaction à pour but de fédérer l'organisation des meetups en protégeant les organisateurs, les participants et l'association.
Après l'heure du bilan, nous avons procédé à l'élection du nouveau bureau de l'association. Plusieurs membres ont décidés de laisser leur place.
Après délibération, voici la composition du nouveau bureau :
Toute l'équipe du nouveau bureau, remercie très chaleureusement Léon pour son implication et le temps qu'il a offert à l'association.
50 ways to slide your images
I recently had to create a slideshow for a special project. What's so special about that you say. Indeed, everywhere you look you see slideshows. If there's one thing that's common to 99% of all websites today it's a slideshow. Almost boring. That is until you actually decide to implement one. There must be 50 ways to slide your images - and I don't mean the transition effects. There's a page with extensive documentation just for that (see References in the sidebar). Picking and choosing the right module and library is almost a burden.
There are various scenarios where you would want to display a slideshow. The most common is the home page. I've used the venerable Views Slideshow module (2007) in the past for this purpose. It's simple enough to implement and is available for D7, D8 as well as Backdrop.
ren.admin
jeu 23/03/2017 - 14:34
50 ways to slide your images
I recently had to create a slideshow for a special project. What's so special about that you say. Indeed, everywhere you look you see slideshows. If there's one thing that's common to 99% of all websites today it's a slideshow. Almost boring. That is until you actually decide to implement one. There must be 50 ways to slide your images - and I don't mean the transition effects. There's a page with extensive documentation just for that (see References in the sidebar). Picking and choosing the right module and library is almost a burden.
There are various scenarios where you would want to display a slideshow. The most common is the home page. I've used the venerable Views Slideshow module (2007) in the past for this purpose. It's simple enough to implement and is available for D7, D8 as well as Backdrop.
ren.admin
Jeu 23/03/2017 - 14:34
Chers adhérents,
Nous avons le plaisir de vous convier à l'assemblée générale ordinaire de notre association mercredi 5 avril 2017, conformément à l'article 8 des statuts, qui se tiendra à 18h30 à la Maison des Associations du 3ème, 5 rue Perrée, 75003 Paris.
J'attire votre attention sur le fait que l'assemblée générale a besoin d'un taux de participation ou représentation (pouvoirs) suffisant pour atteindre le quorum nécessaire au vote. Votre participation marque aussi votre soutien à l'association et à ses actions.
Vous devez être adhérent à jour de votre cotisation pour participer à cette assemblée générale et voter.
L'assemblée générale ordinaire aura à l'ordre du jour suivant :
Le bureau doit se renouveler
L'actuel bureau est en place depuis 3 ans et il est temps de faire une rotation. Nous sommes donc à la recherche de candidats pour les 3 postes du bureau : secrétaire, trésorier et président.
Pour aider ceux qui le souhaitent, les membres sortant pourront se présenter à un poste d'adjoint pour accompagner la transition.
Alors si vous avez quelques heures par mois pour discuter du fonctionnement de l'association et pour suivre les projets du bureau, nous attendons vos candidatures par email à bureau@listes.drupalfr.org
Le vote
Si vous ne pouvez être physiquement présent lors du vote, vous pouvez vous faire représenter par un autre membre de l'association muni d'un pouvoir régulier (ou en l'envoyant à l'adresse de l'association au minimum 4 jours avant l'assemblée générale ou par scan signé à bureau@listes.drupalfr.org). Le pouvoir est disponible ci-dessous.
Comment assister à distance à l'assemblée générale ?
Vous pouvez également participer à l'assemblée générale par un moyen de communication électronique permettant de vous identifier formellement. Dans ce cas, si vous souhaitez participer aux votes vous devrez renoncer à l'anonymat des votes afin de les transmettre.
Mise à jour de Drupaloscopy
Drupaloscopy est un service permettant de savoir si un site utilise Drupal, connaitre la version utilisée et test quelques configurations de base tels que l'aggrégation, la protection de fichiers TXT, l'utilisation de cache.
Le service fonctionne via des scripts bashs qui se basent sur le hash des fichiers css et js pour déterminer la version du site Drupal.
GoZ
dim 12/03/2017 - 18:32
Happyculture aux Drupal Developer Days Séville
admin
ven 10/03/2017 - 14:31
Du 21/03/2017 au 25/03/2017 se tiendra la nouvelle édition des Drupal Dev Days à Séville. Si vous nous suivez, vous savez que nous sommes des fidèles de l'événement puisque nous n'en avons raté aucun depuis leur création ! Milan l'année dernière, Montpellier l'année d'avant...
Cette année l'équipe se rendra au sud de l'Espagne pour retrouver la communauté, débattre des sujets du moment et sprinter pendant la semaine. Nous ne serons pas au grand complet malheureusement pour une raison tout à fait valable mais nous serons tout de même bien présents pour vous permettre d'être bien éveillés tout au long de la semaine grâce à notre package de sponsoring café !
Il reste des places pour vous inscrire, vous pouvez également consulter le programme. Si vous n'avez jamais participé à un événement du genre, c'est toujours une parfaite occasion de rejoindre la communauté et de prendre part aux nombreux sprints.
En espérant vous y voir, n'hésitez pas à venir nous dire coucou sur place.
Flag est un module drupal 7 et 8 permettant de « Marquer » du contenu.
Pour avoir une idée simple de ce que cela veut dire, on peut penser au « j'aime » de facebook. Si un utilisateur clique sur le « J'aime » en dessous d'une photo, alors il la flag.
Par défaut un flag est personnel, donc chacun possède ses propres contenus flagués ou non. Mais un flag peut aussi être global, et dans ce cas, un contenu flagué le sera pour l'ensemble des membres.
Via l'interface d'administration du module, on peut gérer autant de type de flag que l'on veut :
Un flag ne peut s'appliquer qu'à un type d'entité, mais par contre peut s'appliquer à l'ensemble de ses bundles, ou non. Par exemple on peut créer un type de flag pour les nœuds, mais le restreindre à certains types de contenus.
Ensuite le flag peut se comporter comme un champs que l'on choisi d'afficher ou non suivant les view mode, on peut personnaliser pas mal d'option d'affichage :
Flag s'intègre bien avec actions, rules, views...
Les flags sont des types d'entités auxquels on peut ajouter des champs. Si par exemple on l'utiliser pour faire du reporting de contenu non légal, il est utile d'ajouter une zone de texte pour que l'utilisateur explique pourquoi il reporte le contenu.
Pour installer le module deux options, soit via composer avec :
composer require drupal/flag
Soit en le téléchargeant directement sur la page du module sur drupal.org : https://www.drupal.org/project/flag
Un point qui revient souvent lors du développement est la gestion des paramètres de configuration (MySQL par exemple) sur les différents environnements (production, préproduction, local…) et entre différents développeurs d'une même équipe.
Si l’on est tout seul à travailler sur un projet avec un seul environnement (la production) alors la question ne se pose pas, on met les paramètres dans le fichier de configuration (wp-config.php pour wordpress, settings.php pour drupal…) et ça fonctionne.
Mais si l’on utilise un système de gestion de version (git avec gitlab / github par exemple) alors cela veut dire que nos identifiants de connexion à la base de données de notre site en production sont stockés sur d’autres serveurs que l’unique sur lequel il devrait être...
Github et Gitlab sont des solutions éprouvées, mais on est jamais à l’abri d’une fuite ou d’un piratage, ou tout bêtement de l’oubli de désactiver l’accès au dépôt à un ancien collaborateur avec qui l’histoire s’est mal terminée et qui a une éthique pro douteuse.
Autre potentiel problème, imaginons une équipe de deux personnes (A et B) qui travaillent en local sur un site en développement.
A travaille sous windows avec wamp, par défaut l’identifiant de connexion à la base de données sous wamp est «root», il n’y a pas de mot de passe.
B travaille sous macos avec mamp, par défaut l’identifiant de connexion à la base de données sous mamp est «root», le mot de passe est lui «root».
On voit vite le jeu que cela va être à chaque commit, A et B s'écrasant mutuellement le fichier de configuration de l’autre.
En plus, notre sysadmin étant moins drôle, il refuse de définir le mot de passe de mysql en production sur «root», encore moins marrant, il refuse de ne pas en définir… Donc on se retrouve avec un troisième jeu d'identifiants que l’on devra (re)mettre à chaque mise à jour du site en production…
Note : évidement utiliser "root" comme idenfiant ou mot de passe, ailleurs qu'en local est évidement à éviter impérativement ! Il faut créer un utilisateur qui n'a la main que sur la (ou les) base(s) de données du site. Bonne pratique à utiliser aussi en local, même si c'est moins «dangereux».
En plus des différences d’identifiants de base de données, il existe souvent d’autres divergences entre deux environnements d’un même site.
Généralement notre site ne fonctionne pas exactement pareil en local, sur notre serveur de développement, sur notre préproduction et sur notre serveur de production.
Par exemple, si l'on travail sur un site d'e-commerce, on aura pas forcément la même brique de paiement, ou il faudra lui passer des paramètres différents pour activer le mode test.
Autres exemples : l'affichage des messages d'erreurs, la désactivation du cache en local pour éviter d’avoir à le vider manuellement à chaque modification...
Enfin, On peut (doit ?) aussi désactiver ou intercepter les envois de mail sur les autres serveurs que celui de production.
Les solutions décrites ici sont des solutions que j'ai trouvées, expérimentées, modifiées... Je n'en réclame ni la paternité ni leur supériorité sur une autre solution, d'ailleurs, si vous faites autrement, n'hésitez-pas à en parler.
Un première possibilité serait, au sein même du fichier de configuration, d’ajouter des conditions en fonction de l’url par exemple.
Ainsi si l’url du site est “monsite.dev” on sait que l’on est en local, si c’est "monsite.com" alors on est en production.
Exemple de code :
//Paramètres par défaut = production $databases = array ( 'default' => array ( 'default' => array ( 'database' => 'monsite.com', 'username' => 'monsite', 'password' => 'loremipsum', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '', ), ), ); $conf['site_env'] = 'PROD'; // Si l'url se termine par .mapreprod.monentreprise.com" // par exemple monsite.mapreprod.monentreprise.com // alors on est en préproduction if(preg_match('`\.mapreprod.monentreprise.com$`',$_SERVER['HTTP_HOST'])) { $conf['site_env'] = 'PREPROD'; $databases['default']['default']['database'] = 'monsite.com'; $databases['default']['default']['username'] = 'monsite_preprod'; $databases['default']['default']['password'] = '123456789'; } // Si l'url se termine par .dev" // par exemple monsite.dev // alors on est en local if(preg_match('`\.dev$`',$_SERVER['HTTP_HOST'])) { $conf['site_env'] = 'DEV'; $conf['theme_debug'] = true; $conf['hybridauth_debug'] = 1; $databases['default']['default']['database'] = 'monsite.com'; $databases['default']['default']['username'] = 'root'; $databases['default']['default']['password'] = 'mysql'; }
Par défaut, je définis les paramètres de production de mon site, ensuite, je me base sur le HTTP_HOST (l'adresse de notre site) pour déterminer l'environnement (ici préproduction ou local).
Et en fonction j'ajuste à la fois ma configuration mysql ainsi que différents paramètres de configuration pour mon site.
À noter, je définis aussi une variable qui contient l'environnement dans lequel je suis (ici : $conf['site_env']) ce qui peut être utile dans notre code pour savoir si l'on doit par exemple envoyer mail, sms, notification...
Quelques inconvénients à cette solution :
C'est la solution que j'utilise maintenant, on se base non plus sur l'url mais sur un fichier supplémentaire, qui défini la configuration spécifique et écrase potentiellement la configuration selon l'environnement.
Exemple :
Le fichier de configuration commun et versionné :
// La configuration de la base de donnée n'est pas définie car elle // spécifique à chaque environnement $databases = array(); // On inclue le fichier settings.local.php s'il existe if (file_exists(__DIR__ . '/settings.local.php')) { include __DIR__ . '/settings.local.php'; }
Le fichier de configuration settings.local.php en production (lui non versionné) :
<?php $conf['site_env'] = 'PROD'; $databases['default']['default']['database'] = 'monsite.com'; $databases['default']['default']['username'] = 'monsite'; $databases['default']['default']['password'] = 'loremipsum';
Le fichier de configuration settings.local.php en local (lui non versionné non plus) :
<?php $conf['site_env'] = 'DEV'; $conf['theme_debug'] = true; $conf['hybridauth_debug'] = 1; $databases['default']['default']['database'] = 'monsite.com'; $databases['default']['default']['username'] = 'root'; $databases['default']['default']['password'] = 'mysql';
Les fichiers settings.local.php ne sont pas versionnés grâce au fichier .gitignore et cette ligne (ici pour un drupal, mais à adapter en fonction de votre configuration) :
web/sites/*/settings.local.php
Avantages de cette solution :
Je vois un inconvénient principal : quand un nouveau développeur arrive sur le projet, il faut qu'il comprenne cette organisation, c'est pourquoi généralement je crée un fichier settings.local.example.php qui lui est versionné et j'ajoute les lignes suivantes au readme du projet :
Pour ne pas risquer d'altérer la configuration de la base de données en production,
les identifiants de base de données doivent être renseignés dans un fichier `sites/default/settings.local.php`,
vous pouvez copier le fichier `sites/default/settings.local.example.php` en le renommant pour avoir un exemple
de fichier local.Le fichier settings.php ne doit jamais être modifié directement, sauf cas très particulier.
La solution décrite juste au-dessus me convient bien, et semble bien marcher aussi pour les personnes avec qui je travaille. Néanmoins, ça n'est évidemment pas la solution universelle et vous avez peut-être mieux, si c'est le cas, n'hésitez-pas à venir en discuter dans les commentaires !
Cela fait des années que nous développons des sites web sur la base d'un CMS ou d'un framework, qu'il s'agisse du monde PHP (Drupal, Symfony) ou Python (Plone, Wagtail, Django).
Trop souvent, le cadre technique nous est imposé dans le cahier des charges et à la fin du projet il s'avère que le choix n'était pas judicieux. Parlons-en !