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 LaurentJames
Laurent James
Je suis formateur en marketing digital et j'accompagne les professionnels de l'immobilier dans la mise en place d'une stratégie digitale globale. Expert en communication immobilière, nous bénéficions d'une vision du métier nous permettant de comprendre les besoins des agences immobilières. Soit nous les coachant en présentiel ou à distance ou quand ils le souhaitent, nous les

L’exponentielle transformation des réseaux sociaux depuis plus de 15 ans.

Nouvel article à lire sur Formation Loi Alur | Marketing Immobilier et Communication immobilière : L’exponentielle transformation des réseaux sociaux depuis plus de 15 ans.

De Friendster à Facebook en passant par Google Buzz et MySpace : découvrez l’évolution des réseaux sociaux en vidéo, de 2003 à nos jours.

L’évolution des réseaux sociaux depuis plus de 15 ans en vidéo.

Une très bonne vidéo a été réalisée par The Next Web afin de montrer la mutation opérée dans l’univers des réseaux sociaux depuis 2003.

De Friendster à Facebook en passant par Google Buzz et MySpace : découvrez l’évolution des réseaux sociaux en vidéo, de 2003 à nos jours.

Vous ne vous souvenez peut-être plus (ou si vous êtes plus jeune, vous n’avez pas connu) des plateformes tels que :

  • MySpace
  • Google Buzz
  • Friendster

Le marketing digital en constante évolution.

Cette vidéo va vous rappeler à quel point l’évolution a été rapide.

Les nouvelles générations qui ont délaissé Facebook, sont aujourd’hui de grands consommateurs de services tels qu’Instagram ou débutent sur TikTok.

Le fossé des générations existe aussi au sein du digital et de ses usages.

Il est important aujourd’hui de maitriser ces différents canaux d’acquisition afin de délivrer le bon contenu en fonction de votre audience.

N’hésitez pas à consulter à nous contacter pour nos formations Loi Alur dédiées au réseaux sociaux si vous voulez en savoir plus à ce sujet.  

Lire l’article complet ici Blog du modérateur

L’article L’exponentielle transformation des réseaux sociaux depuis plus de 15 ans. est apparu en premier sur Formation Loi Alur | Marketing Immobilier et Communication immobilière.

Par Kgaut
Adhérent
Kevin Gautreau

Drupal 8 - rendre un formulaire dans un template

La form api de drupal est très puissante, mais pour jouer avec le markup html avec les #prefix et #suffix peut s'avérer rapidement complexe en plus d'être un peu sale au niveau du code.

Dans drupal 8 il est possible de facilement utiliser un template pour un formulaire. Pour cela il faut se baser sur le nom machine du formulaire.

Cela fonctionne pour nos formulaires custom, mais aussi pour les formulaires des modules tiers ou du core. Je vais ici utiliser un template pour le formulaire user_form qui correspond au formulaire de modification du compte utilisateur. Le nom machine de ce formulaire est user_form.

Définition du template :

Fichier : mon_module.module

  1. function mon_module_theme() {
  2. $theme = [];
  3. $theme['user_form'] = [
  4. 'render element' => 'form',
  5. ];
  6. return $theme;
  7. }

J'utilise comme clé de thème le nom machine du formulaire.

Je peux ensuite créer dans le dossier templates de mon thème le fichier user_form.html.twig :

  1. Test

  2. {{ form }}
  3. On peut rendre des champs « manuellement », mais il ne faut pas oublier de rendre le formulaire form à la fin : 

    1. Test

    2. {{ form.mon_champ_1 }}
  4. {{ form.mon_champ_2 }}
  • {{ form | without('mon_champ_1', 'mon_champ_2') }}
  •  

  • Par Kgaut
    Adhérent
    Kevin Gautreau

    Drupal 8 - Créer un Event, le lancer et l'intercepter

    Dans Drupal 8, le principe des hooks a été remplacé par un système d'évènement qui est lancé et peut être intercepté, cela se passe en 3 étapes :

    1. Création de l'évènement (classe étendant la classe Event)
    2. Lancer l'évènement
    3. Interception de l'évènement (Classe étendant l'interface EventSubscriberInterface)

    Pour cette évènement, nous allons prendre le contexte de mon site de pronostics sportifs. Je veux lancer un évènement quand un utilisateur fait ses pronostics

    Création de l'évènement

    Fichier : mon_module/src/Event/UserBetEvent.php

    1.  
    2. namespace Drupal\mon_module\Event;
    3.  
    4. use Drupal\mespronos\Entity\Day;
    5. use Drupal\user\UserInterface;
    6. use Symfony\Component\EventDispatcher\Event;
    7.  
    8. class UserBetEvent extends Event {
    9.  
    10. const EVENT_NAME = 'mespronos_user_bet';
    11.  
    12. /**
    13.   * The user account.
    14.   *
    15.   * @var \Drupal\user\UserInterface
    16.   */
    17. public $account;
    18.  
    19. /**
    20.   * The Day the user has bet on
    21.   *
    22.   * @var Day
    23.   */
    24. public $day;
    25.  
    26. public function __construct(UserInterface $account, Day $day) {
    27. $this->account = $account;
    28. $this->day = $day;
    29. }
    30.  
    31. }

    Cette classe est relativement simple, on défini les attributs que l'on veut rendre disponibles lors de l'interception de cet évènement, ici, l'objet User de l'utilisateur qui aura pronostiqué et la journée ($day) de compétition sur laquelle il aura fait ses pronostics.

    Dispatch de l'évènement

    Le code suivant est à placer là où vous souhaiter lancer l'évènement, dans mon cas il s'agit de la méthode submit de mon formulaire de pronostics :

    1. $event = new UserBetEvent($user, $day);
    2. $event_dispatcher = \Drupal::service('event_dispatcher');
    3. $event_dispatcher->dispatch(UserBetEvent::EVENT_NAME, $event);

    Évidement, il ne faut pas oublier de passer les paramètres que l'on a défini dans le constructeur de notre évènement (ici $user et $day)

    Interception de l'évènement

    Définition du subscriber

    Fichier : mon_autre_module/mon_autre_module.services.yml

    1. mon_autre_module.mespronos_user_bet:
    2.   class: 'Drupal\mon_autre_module\EventSubscriber\UserBetSubscriber'
    3.   tags:
    4.   - { name: 'event_subscriber' }

    Code du subscriber

    Fichier : mon_autre_module/src/EventSubscriber/UserBetSubscriber.php

    1.  
    2. namespace Drupal\mon_autre_module\EventSubscriber;
    3.  
    4. use Drupal\mespronos\Event\UserBetEvent;
    5. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
    6.  
    7. class UserBetSubscriber implements EventSubscriberInterface {
    8.  
    9. public function onBet(UserBetEvent $event) {
    10. // On peut récuperer les attributs de l'évènement
    11. $user = $event->account;
    12. $day = $event->day;
    13.  
    14. // À vous de faire ce que vous voulez ici
    15. }
    16.  
    17. public static function getSubscribedEvents() {
    18. // Définition du ou des évènements que l'on écoute et méthode à executer
    19. return [
    20. UserBetEvent::EVENT_NAME => 'onBet',
    21. ];
    22. }
    23.  
    24. }

     

    Par Kgaut
    Adhérent
    Kevin Gautreau

    Drupal 8 - rejouer une fonction d'update

    Drupal tient un registre des versions des modules installés, ces versions correspondent au dernier numéro du hook_update exécuté du module.

    Si par exemple vous venez de lancer le hook 8301 du module field_group et que vous souhaitez le relancer, alors il faudra passer le module en version 8300.

    Voila comment faire avec drush :

    1. drush ev "drupal_set_installed_schema_version('field_group', 8300)"

     

    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 Mixalis44
    Mickael Zafiriou
    Développeur Drupal depuis 2013.

    Créer des liens de menus dynamiquement

    L'élément, selon moi, le plus important d'un site web est la qualité de ses menus. Comme il est possible d'arriver par n'importe quelle page sur un site, il est donc important que l'internaute puisse y naviguer de façon simple et fluide. Voici comment gérer une partie de vos menus dynamiquement sous Drupal 8.

    Par Mixalis44
    Mickael Zafiriou
    Développeur Drupal depuis 2013.

    Créer des liens de menus dynamiquement

    L'élément, selon moi, le plus important d'un site web est la qualité de ses menus. Comme il est possible d'arriver par n'importe quelle page sur un site, il est donc important que l'internaute puisse y naviguer de façon simple et fluide. Voici comment gérer une partie de vos menus dynamiquement sous Drupal 8.

    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 ...

    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é.

    Pages