Planète

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Changer le thème de Drupal en fonction d'un contexte

Drupal propose par défaut deux thèmes aux utilisateurs. Le thème général du site qui peut être Bartik, Unami (Drupal Core), un thème de la communauté ou votre thème personnel. Puis il y a le thème de l'administration, qui est souvent le thème Seven présent dans le cœur de Drupal. Il est donc possible de demander à ce que tel ou tel thème soit utilisé lors du rendu. Voyons ça un peu plus précisément ...

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Drupal propose par

Drupal propose par défaut deux thèmes aux utilisateurs. Le thème général du site qui peut être Bartik, Unami (Drupal Core), un thème de la communauté ou votre thème personnel. Puis il y a le thème de l'administration, qui est souvent le thème Seven présent dans le cœur de Drupal. Il est donc possible de demander à ce que tel ou tel thème soit utilisé lors du rendu. Voyons ça un peu plus précisément ...

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Exemple d'utilisation simple du cache

Drupal 8 propose un système de cache très puissant et à plusieurs niveaux.

Ici nous allons voir comment stocker simplement le résultat d'une requête en cache afin de ne pas avoir à la lancer la requête SQL à chaque appel.

Commençons par définir notre « conteneur » de cache dans le fichier mon_module.services.yml :

  1. cache.mon_module:
  2.   class: Drupal\Core\Cache\CacheBackendInterface
  3.   tags:
  4.   - { name: cache.bin }
  5.   factory: cache_factory:get
  6.   arguments: [mon_module]

mon_module sera le nom de notre conteneur de cache.

Cela permettra de distinguer les données que nous mettrons dedans et de ne pas écraser d'autres caches d'autres modules. Si vous utilisez le cache en base de données (par défaut) vous verrez qu'une nouvelle table cache_mon_module a été créée.

Ensuite voici un exemple de lecture du cache, et d'écriture si la donnée n'est pas présente :

  1. public function getVersion() {
  2. // On teste si la clé « database.version » est présente dans le conteneur de cache « mon_module »
  3. if ($results = \Drupal::cache('mon_module')->get('database.version')) {
  4. // Si c'est le cas, les données stockées sont dans l'attribut « data »
  5. return $results->data;
  6. }
  7. // Sinon on effectue la requête désirée
  8. $version = $this->connection->select('version', 'v')->fields('v', ['version'])->execute()->fetch();
  9. // Et on met la valeur en cache
  10. \Drupal::cache('mon_module')->set('database.version', $version->version);
  11.  
  12. return $version->version;
  13. }

Il est possible aussi de donner date d'expiration afin que cette clé de cache ne soit plus valable une fois cette date passée :

  1. // cache valable 1 h (3600 secondes)
  2. \Drupal::cache('mon_module')->set('database.version', $version->version, date('U') + 3600);

 

Par Kgaut
Adhérent
Kevin Gautreau

Drupal - Drush - Appeler un script php et lui passer un argument

Il est possible via drush d’exécuter un script php et de profiter de toute l'API de drupal pour effectuer des traitements (création / suppression de contenu, modification, import de traductions...)

On utilise pour cela la commande drush php-script en lui passant le chemin vers le script relatif à la racine de drupal :

  1. # Exemple d'appel d'un script
  2. drush @alias php-script ../scripts/process/import-translations.php

Mais il est aussi possible de passer des arguments à ce script :

  1. #Je passe ici le chemin vers le fichier à importer
  2. drush @alias php-script ../scripts/process/import-translations.php --file=../files/translations/imports/2019-05-14-translations.csv

Et voici comment le récupérer dans notre script drush :

  1. # Récupération du paramètre file
  2. $file = drush_get_option('file');

À noter que l'on peut aussi fournir une valeur par défaut :

  1. # ici, si --lang n'est pas passé lors de l'appel du script
  2. # alors $lang prendra la valeur « en »
  3.  
  4. $lang = drush_get_option('lang', 'en');

 

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Se connecter à une base de données tierce

Outre la base de données « classique » de drupal, il est aussi possible de se connecter à une autre base de données.

Pour cela dans le fichier de settings il faut définir les identifiants :

  1. $databases['seconde_db'] = $databases['default'];
  2. $databases['seconde_db']['default']['host'] = 'HOST_SECONDE_DB';
  3. $databases['seconde_db']['default']['database'] = 'SECONDE_DB';
  4. $databases['seconde_db']['default']['username'] = 'USER_SECONDE_DB';
  5. $databases['seconde_db']['default']['password'] = 'PASSWORD_SECONDE_DB';

Ensuite dans le code de notre drupal on peut sélectionner cette seconde base de données :

  1. # On sélectionne la base secondaire
  2. Database::setActiveConnection('seconde_db');

Pour ensuite effectuer les requêtes que l'on souhaite, via la database API de drupal.

Attention à la fin ne pas oublier de rebasculer sur la base de données par défaut afin de ne pas casser tout le drupal :

  1. # On bascule sur la base de données par défaut
  2. Database::setActiveConnection();

 

Par Kgaut
Adhérent
Kevin Gautreau

Optimiser les tâches lourdes de composer avec Drupal

Une petite dépendance à ajouter à son composer.json qui permet d'économiser pas mal de ram lors des taches lourdes de composer (update notamment)

  1. composer require zaporylie/composer-drupal-optimizations:^1.1

Simplement en supprimant des anciens tags des package de symfony, cela peut diviser par deux la mémoire vive nécessaire.

Plus d'informations : https://github.com/zaporylie/composer-drupal-optimizations

 

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Lors d'une manipulation

Lors d'une manipulation de formulaire, il est assez fréquent de vouloir la main sur la structure HTML. Par défaut les champs s'affichent les uns en dessous des autres avec uniquement le balisage des éléments du formulaire.

Pour gérer facilement la structure HTML d'un Form sous Drupal 8, il faut se tourner vers les thèmes ...

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Lors d'une manipulation

Lors d'une manipulation de formulaire, il est assez fréquent de vouloir la main sur la structure HTML. Par défaut les champs s'affichent les uns en dessous des autres avec uniquement le balisage des éléments du formulaire.

Pour gérer facilement la structure HTML d'un Form sous Drupal 8, il faut se tourner vers les thèmes ...

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Lors d'une manipulation

Lors d'une manipulation de formulaire, il est assez fréquent de vouloir la main sur la structure HTML. Par défaut les champs s'affichent les uns en dessous des autres avec uniquement le balisage des éléments du formulaire.

Pour gérer facilement la structure HTML d'un Form sous Drupal 8, il faut se tourner vers les thèmes ...

Par flocondetoile
Adhérent

Mettre en place un système de notifications sur Drupal 8

Pour bon nombre de projets Drupal 8 qui disposent d'un minimum d'interactions avec ses utilisateurs, le besoin de mettre en place un système de notifications arrive rapidement sur le devant de la scène. Etre notifié d'un nouveau commentaire, d'une réponse à un commentaire, d'une nouvelle publication sur tel ou tel sujet, ou de tel utilisateur, sont des besoins récurrents. Découvrons le module Entity Activity dont la vocation est de journaliser tout type d'action effectuée, sur tout type d'entité de contenu, par utilisateur, selon ses abonnements, sur un projet.

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Migrate - Aide mémoire

Afficher la liste des destinations de migration :

drupal debug<span class="sy0">:</span>plugin migrate<span class="sy0">.</span>destination

 

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Personaliser le rendu d'un formulaire sous Drupal 8

Lors d'une manipulation de formulaire, il est assez fréquent de vouloir la main sur la structure HTML. Par défaut les champs s'affichent les uns en dessous des autres avec uniquement le balisage des éléments du formulaire.

Pour gérer facilement la structure HTML d'un Form sous Drupal 8, il faut se tourner vers les thèmes ...

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Template - Spécifier un thème spécifique

Quand un template est appelé via un « reder array », le template va être cherché en priorité dans le thème actif, puis dans le module qui déclare ce template.

Dans certains cas, cela peut poser problème : Si un template peut-être appelé dans un contexte back ou front, les thèmes sont la plupart du temps différents. La solution de feignant pourrait être de dupliquer ce template dans les deux thèmes. Mais c'est évidement pas une bonne solution.

Dans la déclaration du template on peut spécifier où trouver le template en question :

  1. $themes['xml_sitemap'] = [
  2. '#template' => 'xml-sitemap',
  3. 'path' => drupal_get_path('theme', 'mon_theme_back') . '/templates',
  4. 'variables' => [
  5. 'urls' => [],
  6. ],
  7. ];

Ainsi peut importe si mon template est appelé depuis le front ou depuis le back ça sera toujours le fichier :

themes/custom/mon_theme_back/templates/xml-sitemap.html.twig qui sera utilisé.

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Créer un fichier avec le « résultat » d'un template

Voici comment écrire un fichier dans drupal 8 :

  1. $sitemaps_path = 'public://sitemaps/';
  2. // création du dossier
  3. if(file_prepare_directory($sitemaps_path, FILE_CREATE_DIRECTORY)) {
  4. // écriture du fichier (s'il existe, on le remplace)
  5. file_save_data($content, $sitemaps_path . 'sitemap.xml', FILE_EXISTS_REPLACE);
  6. }
  7. else {
  8. \Drupal::logger('sitemap')->error(t('Problem creating the folder @folder', ['@folder' => $sitemaps_path]));
  9. }

Imaginons que l'on veuille écrire dans un fichier le contenu d'un renderable array voici comment l'on définit $content :

  1. $datas = [
  2. '#theme' => 'xml_sitemap',
  3. '#urls' => [
  4. ['title' => 'test'],
  5. ['title' => 'test 2'],
  6. ],
  7. ];
  8.  
  9. // Ici si on ne peut pas utiliser l'injection de dépendance, on pourrait remplacer la ligne suivante par :
  10. // \Drupal::service('renderer')->renderPlain($datas);
  11. $content = $this->renderer->renderPlain($datas);

 

Par KarimB
Karim Boudjema
Je suis Karim Boudjema ou KarimB en ligne. Je suis belge, développeur Drupal et aussi administrateur d'entreprises. Je vis pour l'instant à Cochabamba, en Bolivie. Quand j'ai découvert Drupal 4.7 en 2008 (et oui… il y a 10 ans), j'ai tout suite senti que ce serait un changement important dans le monde du développement web. Et ce fut le cas!

VideoDrupal.org: Un nouveau site de vidéos tutoriels de Drupal

Après trois mois de dur labeur, surtout la nuit et les weekends, nous avons finalement lancé la première version de VideoDrupal.org (beta 1.0), une mashup supervisée de vidéos et tutoriels de Drupal publiées sur Youtube afin de les rendre plus accessibles pour tout un chacun que ce soit à des fins personnelles, éducatives ou professionnelles.

Pour cette année 2019, je m'étais fixés trois objectifs : améliorer mon anglais, trouver un job dans une "vraie" agence Drupal et lancé ce site pour la communauté. Donc, j'ai déjà atteint un de mes objectifs. L'année commence bien ! Honnêtement, je pense que c'était le plus simple à atteindre. Améliorer  mon anglais et trouver une agence tournée vers la communauté Drupal, sera sans doute plus difficile. Mais je m'y attache ! Et sérieusement...

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Promotion des autres blogs Drupaliste

Pour ce premier billet de blog, j'ai envie de faire la promotion des blogs de drupalistes. À force de lire des articles de ces personnes j'ai eu envie à mon tour, d'en écrire afin d'essayer d'apporter un peu plus de contenu francophone concernant Drupal.
Voici les blogs que je fréquente et que je lis dès qu'un nouvel article sort.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Gestion du titre de page

Le titre d'une page est capitale pour le référencement et l'intérêt que vous susciterez auprès de vos visiteurs. Sous Drupal, les titres des pages affichant des entités de contenu sont gérés automatiquement grâce au champ 'title'. Ce billet va traiter de la gestion des titres des autres types de pages.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Pour ce premier

Pour ce premier billet de blog, j'ai envie de faire la promotion des blogs de drupalistes. À force de lire des articles de ces personnes j'ai eu envie à mon tour, d'en écrire afin d'essayer d'apporter un peu plus de contenu francophone concernant Drupal.
Voici les blogs que je fréquente et que je lis dès qu'un nouvel article sort.

Par Mixalis44
Mickael Zafiriou
Développeur Drupal depuis 2013.

Le titre d'une

Le titre d'une page est capitale pour le référencement et l'intérêt que vous susciterez auprès de vos visiteurs. Sous Drupal, les titres des pages affichant des entités de contenu sont gérés automatiquement grâce au champ 'title'. Ce billet va traiter de la gestion des titres des autres types de pages.

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - Entité - Champ de base « texte long avec résumé »

Voici comment ajouter un champ texte formaté avec résumé à un type d'entité :

  1. $fields['synospis'] = BaseFieldDefinition::create('text_with_summary')
  2. ->setLabel(t('Synopsis'))
  3. ->setSetting('text_processing', TRUE)
  4. ->setDisplayConfigurable('view', TRUE)
  5. ->setDisplayConfigurable('form', TRUE)
  6. ->setTranslatable(TRUE);

À noter que j'ai maintenant pris l'habitude de ne plus configurer les options d'affichage en mode formulaire et front dans mon type d'entité, mais je le fais directement en backoffice du site.

Voir des exemples d'affichages sur un texte long.

Pages