modules
#
Modules#
Core#
statisticsUn patch a été créé pour le projet "Consommateurs & Citoyen". Ce patch permet de réaliser des stats sur toutes les entités et pas seulement les nodes. De plus, l'appel ajax d'incrémentation de la vue renvoie le compte de l'entité.
#
Contrib#
Install and activate a contrib module#
InstallNever download a zip file or a tar.gz file to install a module
- Find your module - ie:
https://www.drupal.org/project/search_api_synonym
- Click on version link you need at the bottom of the page - ie:
8.x-1.2
- Copy the composer command to install the command - ie:
composer require 'drupal/search_api_synonym:^1.2'
- Run this command at the root of the project
Note: The module is installed but not active.
#
Activate- Got to admin of your project -
/admin/modules
- Search you module
- Select it and click on install
- Drupal will activate this module
#
Ajax loaderPour remplacer le loader ajax drupal par un custom loader il faut :
- le module Ajax Loader -
https://www.drupal.org/project/ajax_loader
- On copie le repertoire
modules/contrib/ajax_loader/src/Plugin/ajax_loader
dans le module customizationpublic/sites/default/modules/custom/customization/src/Plugin/ajax_loader
- Les custom Loader commencent par
Trobbernomduloader.php
- Ne garder qu'un seul fichier php et le renommer du nom du loader voulu
Trobbernomduclient.php
et remplacer dans le fichier la class et la fonction pour ne pas provoquer de conflit avec le nom voulu. - Dans la fonction
setMarkup
remplacer lereturn
par votre loader. ie:
- Vider la cache depuis le B.O.
- dans l'admin
admin/config/user-interface/ajax-loader
Choisissez votre loader qui apparait dans la liste déroulante.
#
color field- Installer le module color field (https://www.drupal.org/project/color_field)
- Ajouter le champ color au contenu souhaité et le configurer dans la section "gérer l'affichage du formulaire"
#
cookieconsent- Installer le module Cookie consent (https://www.drupal.org/project/cookieconsent)
- Configurer les donnée de personnalisation (texte, lien vers la page de consentement, css)
#
simple popup blocks- Installer le module simple popup blocks (https://www.drupal.org/project/simple_popup_blocks) Permet de crĂ©er des popin Ă partir de n'importe quel contenu (mĂȘme les formulaires)
#
Simplenews#
Ajouter une vue sur la newsletterCreate a template for the newsletter body simplenews-newsletter-body--[newsletter_id].html.twig (newsletter_id = machine name). and add your view in it where you'd like to:
#
configurer simplenews- installer simplenews et swiftmailer
- Créer mytheme/templates/swiftmailer.html.twig et set mailsystem to use mytheme to render the emails.
- set mailsystem to use swiftmailers default formatter plugin
- set mailsystem to use swiftmailers default sender plugin
#
Pathauto#
Ajouter des conditions sur la création des patterns de pathautosource: https://www.deeson.co.uk/labs/dynamic-patterns-pathauto
Si vous voulez par exemple créer des patterns en fonction d'un type de contenu notice
et d'une valeur de champ de taxonomie type_de_groupe
- Créer une classe de plugin de condition qui s'ajoutera aux conditions des patterns Pathauto
- Déclarer ce plugin à Drupal
- Injecter ce plugin de condition dans le formulaire de création/édition de pattern pathauto
- Traiter la validation du formulaire de création/édition de pattern de pathauto
Dans my_module/src/Plugin/Condition/ProgramGroup
Dans my_module/config/schema/customization.schema.yml
Dans my_module/my_module.module
#
Permettre de gĂ©nĂ©rer plusieurs alias pour un mĂȘme node (Drupal >8.8)(bien penser Ă mettre le canonical sur la bonne URL racine). CrĂ©er plusieurs URL pour un mĂȘme node peut ĂȘtre pertinent.
On utilise le hook HOOK_pathauto_alias_alter
:
#
Metatag- Installer le module metatag
- Pour personnaliser un node, il suffit de créer un nouveau champ de type metatag pour ce type de contenu. Automatiquement, il permettra de personnaliser les meta sur chaque node (dans l'édition du node menu metatag à droite)
- pour placer l'image issue d'un champ du node qui est contenue dans un media :
[node:field_visuel:entity:field_media_image:entity:url]
- pour activer et configurer le partage Facebook et twitter :
- Activer les modules Metatag: Twitter Cards et Metatag: Open Graph
- Aller sous admin/config/search/metatag/settings et activer les options Open Graph et Twitter Cards pour les entités concernées
- Puis modifier les metatag par défaut : sans /admin/config/search/metatag
- pour l'entité concernée cliquer sur modifier
- ajouter la valeur souhaitée pour les différents tag. Exemple pour le metatag MEDIA VIDEO, mettre [media:field_poster:large] pour la version large de l'url du poster
#
Change / add metatags, links, title for a specific page in a controller- make sure that the Metatag module doesn't have a global config for the tags you want to change
- In your Controller, you may create a
$htmlHead
array. Then add your tags and links as follow (such an entry is composed by the array of data + a key (ie 'linkprevious'))
Consider the way we change the title of the page ('#title' => 'Résultats de recherche - '.$input
)
#
ElasticSearchNote: http://letstoob.info/drupal-8/how-to-integrate-elasticsearch-6-3-0-with-drupal-8-5/
2 modules necessaires:
- Elasticsearch connector -
https://www.drupal.org/project/elasticsearch_connector
- Search Api -
https://www.drupal.org/project/search_api
- Go to
admin/config/search/elasticsearch-connector
- Click on ```Add Cluster````
- Fill in
name
and URLhttp://localhost:9200
ouhttp://nameofthedocker:9200
if you use a docker elastic - Select
Select this cluster default connection
- Select
Use multiple nodes connection
- Click
save
#
Videos transcoding#
Cloudstack Trancodinghttps://aws.amazon.com/blogs/networking-and-content-delivery/serverless-video-on-demand-vod-workflow/
- If your s3 bucket is in north US-EAST (N. Virginia)
- You need to apply this patch for s3fs_cors module for drupal cause this is the only region need to be http called without the region in URL
https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro
#
CloudFront and S3 CORS confighttps://stackoverflow.com/questions/50022326/amazon-s3-image-cors-issue
#
S3 CORS Config#
CloudFront Confighttps://stackoverflow.com/questions/50022326/amazon-s3-image-cors-issue
- Got to
Behaviors
tab - Select your distribution but ticking it and click on
Edit
Cache Based on Selected Request Headers
set toWhitelist
Whitelist Headers
addAccess-Control-Request-Headers
,Access-Control-Request-Method
andOrigin
Object Caching
tickUse Origin Cache Headers
#
Drupal 8 Config#
ModulesYou'll need 2 modules
Run
composer require 'drupal/s3fs:^3.0'
Run
composer require 'drupal/s3fs_cors:^1.0'
You'll need you AWS accesskey and secretkey
Edit your
settings.php
#
Drupal admin config#
Media TypeStructure > Types de media > Video > Gérer les champs
or admin/structure/media/manage/video/fields
- Vidéo file > modifier
- Repertoire du fichier must be
input
- ParamĂštres du champs pick
S3 File System
admin/structure/media/manage/video/form-display
- for
Video file
pickS3fs Cors File Upload
- Click on the toothed wheel to setup the FileSize Limit
#
S3 ConfigGo to https://yourdrupalsite/admin/config/media/s3fs
- Fill your bucket previsouly created from AWS cloudstack
- Tick ```Always serve files from S3 via HTTPS````
Go to admin/config/media/s3fs/cors
- tick
https
forUse Https/Http
#
RedisModule Install - https://www.drupal.org/project/redis
- Run
composer require 'drupal/redis:^1.1'
in docroot - Activate module in Back Office
- Clear the cache
- Update
settings.php
with
#
Webform#
Webform childrenLes children de webform sont en fait des contenus déjà préparés. On ne peut donc pas faire de {{for child in children
Pour remplacer, ajouter, supprimer une classe par ex. il suffit juste d'utiliser la fonction replace de twig !
#
Conditionner email destinataire selon options liste déroulante- Structure webform : Créer un formulaire ou modifier le formulaire concerné
- Tab construire : ajouter un champ "liste de selection" et saisir les différentes options
- Tab Handler :
- Ajouter un handler,
- Dans "Envoyer A", sélectionner la liste créer dans le formulaire
- Pour chaque entrée de la liste saisir le destinataire concerné
#
Webform recaptcha- Installer les modules Captcha et reCaptcha (https://www.drupal.org/project/recaptcha)
- Aller dans configuration/personnes/Captcha et configurer Captcha et reCaptcha : Bien créer un reCaptcha Google avec les bonnes clés et autorisant les bons domaines.
- Aller dans le modĂšle du webform et ajouter un champ de type reCaptcha. Enjoy !
- Important décocher
Local domain name validation
dans la configuration drupal si il est cocher cÎtés serveur et inversement
#
Datalayer#
Bug lors de la suppresion d'un inscrit newsletter (via simplenews)attention patch à faire (manuel) sur datalayer.module pour éviter un message d'erreur sur la suppression d'un inscrit newsletter (ligne 331) :
#
AMPPermet de proposer la version AMP pour un node. cf. https://www.drupal.org/docs/8/modules/accelerated-mobile-pages-amp/amp-version-82
Installer composer require 'drupal/schema_metatag:^1.3'
pour les micro-formats AMP
il y a actuellement un bug sur l'install de masterminds. Il faut faire :
#
flag#
Créer ses propres liens de bookmarks par le user- utiliser le module flag(/admin/structure/flags) et:
- créer un type de block (ex. myOwnBookmarks)
- Créer un block de ce type (utilisons aussi myOwnBookmarks comme nom)
- Créer un flag (aussi myOwnBookmarks :) associé au type de bloc myOwnBookmarks.
- Ajouter un champ link à ce flag (qu'on peut limiter à 10 répétitions par ex. dans la config)
- demandons l'affichage du flag en form popin puis sauvegardons le flag
- Si on affiche le bloc myOwnBookmarks dans une région, on aura l'affichage du flag. au clic, popin avec le fomulaire de saisie des links !
- Il ne reste plus qu'à créer une vue qui affiche le contenu du flag, et à utiliser cette vue ou on veut.
https://www.drupal.org/project/flag/issues/2888268#
bug dans le module :Pour que le bon template twig soit utilisé il faut faire ça :
https://www.drupal.org/files/issues/2888268-8-views-link-doesnt-use-twig.patch
#
REQUETES SQL DE STATSLes likes
#
Site settingshttps://www.drupal.org/project/site_settings
Créer les configurations dont vous avez besoin. Aller dans Manage Site setting pour créer vos éléments Aller dans site settings pour renseigner vos éléments
Pour les appeler depuis Twig: Si vous avez plusieurs champs : ``` {{ site_settings.group_name.site_setting_name.field_name }} ````
Si vous avez un seul champ :
{{ site_settings.group_name.site_setting_name }}
Si vous avez une seule variable avec plusieurs champs
{{ site_settings.your_settings_group.your_setting_name.field_title }}
{{ site_settings.your_settings_group.your_setting_name.field_subtitle }}
Si vous avez une seule variable avec plusieurs champs et des champs complexes
{{ site_settings.your_settings_group.your_setting_name.field_date.value }}
{{ site_settings.your_settings_group.your_setting_name.field_date.options }}
Il semble qu'un bug dans site_settings empĂȘche d'utiliser les entity reference normalement. Cela ne retient que l'id de l'entity reference. Il faut donc utiliser twig tweak :
De plus, pour un lien, voici comment générer l'url dans twig, qu'elle soit interne ou externe :
NB : S'il s'agit d'un site settings avec plusieurs champs, il faut que tous les champs soient alimentés pour qu'ils s'affichent en front
#
hierarchical_term_formatterhttps://www.drupal.org/project/hierarchical_term_formatter
Ce module permet d'afficher une taxonomie ainsi que ses parents dans une hiérarchie.
#
taxonomy_menuCe module permet de créer un menu à partir d'une taxonomy.
NB : Pour pouvoir ordonner les termes en drag and drop à partir de la taxonomie concernée, il faut cocher la case "Use term weight order" dans la configuration de Taxonomy menu
#
Maestro : business process workflow- Install all the Maestro module :
- Maestro Engine Module,
- Maestro Task Console,
- Maestro Template Builder,
- Maestro Utility Functions,
- Maestro Webform Integration
- In the Engine module (/admin/config/workflow/maestro) :
- Create a Token that allows to run the orchestrator
- In the template builder (maestro/templates/list):
- Build the template by adding tasks from the starting point to the ending point of the process
- In the edit template option, set the number of stage to show in the process timeline
- In the task settings
- set the workflow stage number of the task in the process
- set Unique identifier = submission
- in the dropdown menu Webform select the concerned webform
- in the assignment details, select the concerned role (or user)
- In the webform settings :
- Add a Spawn Maestro Workflow handler
- In Maestro Workflow Template, select the process created in step 3
- Add an email handler to configure the user email notification :
- In the edit panel, select "current user" in the To email field
- Add an email handler to configure the manager email notification :
- If the email is related to a select of the form, choose the concerned field in the To email list, and set the email adress.
- For fields dedicated to manager, select the acces rights in the access tab.
- champ disabled = settings / form display -> désactivé
- champ valeur par défaut = settings / avancé
- Draft -> in the settings webform / paramĂštres / submission : admin/structure/webform/manage/form_demat/settings/submissions
- Download PDF
- Activer les modules Weform Webform Entity Print (PDF) et Webform Entity Print (PDF) Attachment
- Activer le téléchargement sur le webform admin/structure/webform/manage/form_demat/results/download
- config https://youtu.be/Zj1HQNGTHFI
- Si erreur aprÚs installation des modules, réparer la config /admin/structure/webform/config/advanced
#
RGPD : Tarte au citron- Télécharger le module : https://opt-out.ferank.eu/fr/install/
- Poser les sources dans le dossiers des assets du site
- Coller le
<script>
dans le head (mettre à jour si nécessaire le path vers le .js) :
- Mettre le lien vers la page de politique de cookies
- "privacyUrl": "/{{directory}}/charte-de-confidentialite"
- Pour remplacer la pastille par défaut par un lien (dans footer par exemple) :
- "showAlertSmall": false
- Pour désactiver l'auto consent
- "highPrivacy": true
<a href="#" onclick="tarteaucitron.userInterface.openPanel();">GESTION DES COOKIES</a>
- Sélectionner le(s) service(s) sur le site https://opt-out.ferank.eu/fr/install/ (étape 3)
- Copier le code dans le body
#
Store Locator- Modules :
- Geolocation Field : "https://www.drupal.org/project/geolocation"
- Geocoder : "https://www.drupal.org/project/geocoder"
- Configuration :
- Create a Store content type
- In your Store create an address field
- In your Store create a geolocation field
- Link these two links via geocoder using the provider that you want
- Create a view that list your store content type filtered by proximity on location field (expose this filter if needed)
- Code :
- Use google map autocomplete library:
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&libraries=places"></script>
- Make your input autocomplete with this library.
- In js use geolocate: https://www.googleapis.com/geolocation/v1/geolocate and geocode: https://maps.googleapis.com/maps/api/geocode libraries.
- If you want to search location from address you will transform the address into a lat-lng data with https://maps.googleapis.com/maps/api/geocode/
- Then fill lat field and lng field with the data you fetched from this google API.
- If you want to geolocate the user use https://www.googleapis.com/geolocation/v1/geolocate
- Then fill lat field and lng field with the data you fetched from this google API.
- Use google map autocomplete library:
- Example (cf. krug project: https://gitlab.com/abecms/moet-hennessy/krug) :
- Configuration:
- activate geolocation + geolocation address + geocoder extensions.
- install google map provider using composer.
- In geocoder configuration link google map provider.
- Code (cf. https://developers.google.com/maps/documentation/geocoding /// https://developers.google.com/maps/documentation/geolocation /// https://developers.google.com/maps/documentation/javascript/places-autocomplete):
- Configuration:
#
Shield- Attention si le module du core HTTP BASIC AUTHENTICATION il rentre en conflit avec shield. Solution :
- Installer a derniĂšre version de shield
composer require 'drupal/shield:^1.3'
- Appliquer le patch ci-dessous patch
https://www.drupal.org/files/issues/2019-09-20/2815945-shield-1.3-rc1_basic_auth_compatibility-40.patch
:
Methode pour appliquer le patch title
#
Commerce#
Configurer une variation de produit- aller sous /admin/commerce/config/product-variation-types
- ajouter les champs nécessaires (image, ...)
#
Paiement CB- Pour conserver les infos CB : Saisir une phrase dans "Alias usage" pour afficher la case Ă cocher sur la page ingenico
#
View Mode PageCreate separate pages for different view modes for a given content type. For example use this module if you need to have 2 differents urls for a same media content type :
- One url that display the whole node
- One url that display only the player (for embedding)
https://www.drupal.org/project/view_mode_page
#
Custom#
Instagram- Développement d'un module instagram.
- https://rudrastyh.com/javascript/get-photos-from-instagram.html#tags pour la création du token
- find user id : https://smashballoon.com/instagram-feed/find-instagram-user-id
- Créer la région home_instagram dans theme.info.yml
- Placer le block dans la région home_instagram
- Dans configuration, mettre le token et les username souhaités
- ajout du template block--instagramblock.html.twig dans themes/custom/h1765/templates/block
- ajout du template instagram-block-image.html.twig dans themes/custom/h1765/templates/block ATTENTION: En mode sandbox de l'app Instagram, le plugin ne peut ĂȘtre utilisĂ© car la recherche sur username ne fonctionne pas.
#
view_filterCe module permet de customiser les filtres des formulaires des vues.
Pour créer un template spécifique, il suffit de créer cette fonction dans un module:
Ensuite, pour utiliser les variables définies dans le template, il suffit d'utiliser le '#' (ici ca donne #attributes):
Et ne pas oublier de créer le template view_filter_input.html.twig dans le répertoire 'templates' du module.
On peut définir aussi des templates dans le theme qu'on crée (par exemple pour h1765.theme):
#
simplenews_ajaxCe module permet de compléter simplenewsajax. Il permet de rendre une soumission de formulaire en ajax :
#
facebook_feeds_blockAffichage des feeds FB via un bloc.
Pour obtenir un access de page token : https://elfsight.com/blog/2017/10/how-to-get-facebook-access-token/ Dans le cas de ce block, il faut le page access token.
La solution pour obtenir un jeton qui dure toujours : Here's my solution using only Graph API Explorer & Access Token Debugger:
- Graph API Explorer:
- Select your App from the top right dropdown menu
- Select "Get User Access Token" from dropdown (right of access token field) and select needed permissions
- Copy user access token
- Access Token Debugger:
- Paste copied token and press "Debug"
- Press "Extend Access Token" and copy the generated long-lived user access token
- Graph API Explorer:
- Paste copied token into the "Access Token" field
- Make a GET request with "PAGE_ID?fields=access_token"
- Find the permanent page access token in the response (node "access_token")
- (Optional) Access Token Debugger:
- Paste the permanent token and press "Debug"
- "Expires" should be "Never"
#
view unpublishedLorsque des droits restreints sont appliqués sur des types de contenus pour un rÎle donné, les contenus unpublished ne sont pas visibles de ce rÎle. L'installation du module view_unpublished permet d'appliquer les droits de "voir les contenus non publiés" pour chaque type de contenu (voir "view unpublished" dans admin/people/permissions). Une fois installé, il est nécessaire de recalculer les droits (un message apparaitra en BO).
#
RobotAfin de définir la valeur du fichier robots.txt installer le module "RobotsTxt". A noter : Il est nécessaire de supprimer (ou renommer) le fichier robots.txt déjà présent pour que le module affiche son propre robots.txt
#
Views Reference FieldCe module permet de référencer une vue dans le champs d'un node. Une fois installé :
- Créer la vue
- Créer un nouveau champ dans le contenu concerné
- Type de champ = views reference
- Type d'élément à référencer = vue
- View display plugins to allow = bloc
- Preselect View Options = Sélectionner la vue créer à l'étape 1
#
NodeaccessCe module permet de sécuriser l'accÚs à un node. nodeaccess Voir nodes.