Articles de l'utilisateur

Par Q__nt_n
Adhérent
Quentin Fonteneau

Présentation du module drupal Config Pages

Présentation du module drupal Config Pages
Q__nt_n
ven 11/09/2020 - 13:20

Dans mes précédents sites Drupal, il m'arrivait de développer un formulaire de configuration pour le site (réseaux sociaux, paramètres métier etc...), cela pouvait s'avérer complexe et chronophage dès que le client voulait une personnalisation de ce formulaire. Pour information pour cette solution orientée "développement", vous pouvez retrouver la documentation ici

Cependant, dernièrement, Raphaël Morvan m'a parlé de Config Pages. Ce module fournit une entité qui permet de créer des pages de configuration personnalisables et riches en fonctionnalités et de les placer où l'on souhaite dans le système de menu. On peut également utiliser les widgets de Drag & Drop, Autocomplétion etc... Le gain de temps peut donc devenir très important face à une page de configuration développée de A à Z.

Désormais, j'utilise ce module afin de m'éviter également la création d'un type de contenu 'Homepage'. En effet, généralement, ce type de contenu est instancié une seule et unique fois (Et désormais ça me parait être une aberration de le faire). Chose à noter, les pages de configuration créées grâce à ce module prennent en compte le contexte de langue. 

Voici le formulaire de création d'un type de page de config :

Capture d'écran du formulaire de création d'un type de page de config

Ensuite, la page de config étant une entité, nous pouvons gérer les champs comme dans un type de contenu !

Capture d'écran du formulaire crée

Thématique

Par Q__nt_n
Adhérent
Quentin Fonteneau

Création d'un environnement de développement Drupal (Partie 1)

Création d'un environnement de développement Drupal (Partie 1)
Q__nt_n
jeu 27/08/2020 - 09:34

Création d'un environnement de développement Drupal

Cela fait un certain temps que je souhaitais écrire un article sur la mise en place d'un environnement de développement pour Drupal. Afin de rester le plus clair possible je vais décomposer le sujet en plusieurs parties :

  1. La mise en place d'un environnement de développement via Lando
  2. La création d'un socle Drupal (à venir)
  3. L'utilisation du socle, workflow et bonnes pratiques (à venir)

Mise en place d'un environnement de développement via Lando

Fût un temps, les environnements de développement se résumait à l'installation d'un WAMP / LAMP / MAMP avec les bonnes versions des différents technos (PHP, node etc... ) et c'était tout de même assez fastidieux car il fallait que cette installation et cette configuration soient réalisés sur chacun des postes des développeurs.

Depuis quelques temps maintenant, un petit nouveau est apparu : Docker. Ce dernier permet, entre autres, d'échapper à cette gestion des dépendances et autres extensions... Mais ceci dit, il faut tout de même le faire dans le Dockerfile.

Lors de mon précédent travail, chez Capgemini, nous avions mis en place un environnement de développement à l'aide de Docker. Cependant, je trouvais qu'on avait atteint une certaine limite car je trouve que Docker n'est pas forcément accessible et compréhensible au premier abord. Par ailleurs, j'avais testé le couple traefik et portainer pour gérer plus facilement mes containers / sites mais j'ai rapidement arrêter car c'était assez complexe et trop coûteux en temps.

En arrivant dans mon nouveau travail chez Digital Garden, j'ai pu avoir le temps nécessaire de mettre en place un environnement de développement. Pour cela je me suis basé sur Lando, que j'avais découvert à Capgemini (Merci Nasser ! ;) ). Je l'avais survolé et malheureusement passé à côté du but précis de Lando. 

Lando est une surcouche de Docker permettant de mettre en place, sans effort, un environnement, d'automatiser certaines tâches (les tests par exemple).

La documentation est plutôt bien faite ! Des "recettes" (Drupal 8, Wordpress etc...) sont déjà disponibles permettant d'être encore plus rapide pour installer un environnement. 
Par exemple, la recette Drupal met à disposition Nginx / Apache, MySQL / MariaDB, Composer, Drush... 

La configuration de Lando se résume à la création d'un fichier .lando.yml à la racine du projet.
 

name: socle-drupal

recipe: drupal8

config:
  php: '7.4'
  via: apache
  webroot: web
  xdebug: true

services:
  appserver:
    php: '7.4'
    config:
      php: .lando/config/php.ini
  database:
    type: mariadb:10.1
  phpmyadmin:
    type: phpmyadmin
    hosts:
      - database
  mailhog:
    type: mailhog
    hogfrom:
    - appserver
  node:
    type: node
    globals:
      gulp-cli: "latest"

tooling:
  vim:
    service: appserver
  npm:
    service: node
  node:
    service: node
  gulp:
    service: node
    description: "Compiles SASS"
    cmd: gulp

Décomposons ce fichier .lando.yml !

  • name: socle-drupal correspond au nom du projet. Par défaut, ce nom sera utilisé pour construire l'URL par défaut du site (socle-drupal.lndo.site).
  • recipe: drupal8 est la recette utilisée, nous ne sommes pas obligés d'en utiliser. Des recettes sont disponibles pour Wordpress, Drupal 6, 7, 8, Laravel, Python, Ruby... 

S'en suit différents "blocs" :

  • config permet de modifier la configuration et d'avoir quelque chose qui répond vraiment à nos besoins : version du PHP, activation de xdebug, apache/nginx
  • services permet l'ajout de services prédéfinis par Lando, d'y gérer une config particulière de l'application (par l'ajout d'un php.ini custom par exemple).
    Je recommande fortement d'ajouter le service `phpmyadmin` et de le brancher sur la base de données, cela évitera de devoir gérer les ports de la base de données (qui, s'ils ne sont pas fixés, seront aléatoires à chaque démarrage du projet.
  • La partie tooling permet d'ajouter des commandes à l'outil lando. Dans notre cas, nous pourrons, par exemple, exécuter la commande lando npm install. Npm étant branché sur le service node, Lando exécutera la commande dans le container node. Nous verrons dans la dernière partie de cette série d'article, l'ajout d'outil très utile pour suivre la qualité du code et le suivi des bonnes pratiques Drupal.

La création de la base de notre environnement de développement est désormais terminée. Nous verrons dans un prochain article, la création du socle Drupal afin d'avoir un environnement de développement Drupal complet !

Thématique

Par Q__nt_n
Adhérent
Quentin Fonteneau

Générer un hashsalt avec Drush

Générer un hashsalt avec Drush
Q__nt_n
mar 25/08/2020 - 11:13

drush eval "var_dump(Drupal\Component\Utility\Crypt::randomBytesBase64(55))"

Thématique

Par Q__nt_n
Adhérent
Quentin Fonteneau

Obtenir un objet URL à partir de l'alias

Obtenir un objet URL à partir de l'alias
Q__nt_n
jeu 25/06/2020 - 11:10

Dans le cadre d'un import où je devais remplir des données pour plusieurs types de contenu (node, taxo etc..), j'ai du me baser sur la seule entrée que j'avais : l'URL de la page.

// Morcellement de l'URL  
$url_parts = explode("/", parse_url($item['new'], PHP_URL_PATH));
// Suppression du langcode
unset($url_parts[1]);
// Reconstruction de l'alias sans le langcode
$alias = implode('/', $url_parts);


$url_object = \Drupal::service('path.validator')->getUrlIfValid($alias);
$route_name = $url_object->getRouteName();
$route_parameters = $url_object->getrouteParameters();

Suite à la récupération de l'objet 'URL', j'ai pu distinguer mes différents cas et faire les traitements adéquats.

Thématique

Par Q__nt_n
Adhérent
Quentin Fonteneau

Obtenir un objet URL à partir de l'alias

Obtenir un objet URL à partir de l'alias
Q__nt_n
lun 22/06/2020 - 10:33

Dans le cadre d'un import où je devais remplir des données pour plusieurs types de contenu (node, taxo etc..), j'ai du me baser sur la seule entrée que j'avais : l'URL de la page.

// Morcellement de l'URL  
$url_parts = explode("/", parse_url($item['new'], PHP_URL_PATH));
// Suppression du langcode
unset($url_parts[1]);
// Reconstruction de l'alias sans le langcode
$alias = implode('/', $url_parts);


$url_object = \Drupal::service('path.validator')->getUrlIfValid($alias);
$route_name = $url_object->getRouteName();
$route_parameters = $url_object->getrouteParameters();

Suite à la récupération de l'objet 'URL', j'ai pu distinguer mes différents cas et faire les traitements adéquats.

Par Q__nt_n
Adhérent
Quentin Fonteneau

Exporter/Importer une base de données avec Drush

Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 28/05/2020 - 11:11

Pour exporter sa base de données :

drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql

Pour importer sa base données :

gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc

Thématique

Par Q__nt_n
Adhérent
Quentin Fonteneau

Exporter/Importer une base de données avec Drush

Exporter/Importer une base de données avec Drush
Q__nt_n
jeu 07/05/2020 - 12:26

Thèmes :

Pour exporter sa base de données :

drush sql-dump --gzip --result-file=../backup/dump_db_$(date +%Y%m%d-%H%M%S).sql

Pour importer sa base données :

gunzip -c dump_db_YYYYMMDD_HHMMSS.sql.gz | drush sqlc