Drupal : partage de configuration entre plusieurs sites.
Le développement d'un site est une tache qui reste ardu surtout repetitive. La plupart des sites ont des informations communes tels que le teasers, model de page, sections, profil, profil compact, dashbord.
Nous gagnerons un temps important, si l'on pouvant importer la plupart des configurations, soit pendant le development ou pendant le processus d'installation de Drupal ou d'un module.
L’équipe de Drupal s'est penché sur ces questions et nous offrent des outils de base permettant de réssoudre ces problèmes. Le module se nomme config et fait partie du cœur, il est installé par default dans le profil standard. Avec ce dernier nous pouvons exporter les configurations et les importer par la suite.
Afin de mieux comprendre le fonctionnement de ce dernier nous allons définir une situation de travail:
Scenario :
Nous avons le layout suivant :
qui contient 3 regions :
- un region pour le menu
- un region pour le bouton call to action
- une region pour les informations du profiles.
Les informations du profil apparraissent au hover :
Nous souhaitons avoir cette configuration du profile à l'installation du module.
Nous creons le layout : hot_models/src/Plugin/Layout/Sections/Menus/HotModelsHotlockMenu.php
Au niveau interface, nous creons un rendu specifique 'hot_models_hotlock_menu__user' et nous chargeans ce rendu si l'utilisateur est connecté :
/**
* On ajoute le rendu compact de l'utilisateur s'il est connecté.
*/
$uid = \Drupal::currentUser()->id();
if ($uid) {
$user = \Drupal\user\Entity\User::load($uid);
$viewEntity = \Drupal::entityTypeManager()->getViewBuilder('user');
$build['user_compact'] = $viewEntity->view($user, 'hot_models_hotlock_menu__user');
}
Sur une installation de base de drupal le mode 'hot_models_hotlock_menu__user' n'existe pas, donc il faudrait que lors de l'installation cela soit creer et que les necessaires soit aussi ajouter.
Pour y parvenir nous devons exporter le model d'affichage 'hot_models_hotlock_menu__user':
Le nom de cette configuration est diponible sur la page de l'export tout au fond. Nous devons creer un fichier avec ce nom et y ajouté le contenu de la configuration :
Pour ce cas le fichier se nomme : core.entity_view_display.user.user.hot_models_hotlock_menu__user.yml
Ce fichier doit etre dans hot_models/config/install
Dans le contenu de la configuration il y'a une section importante : "dependencies:" qui contient generalement deux entrées, config: qui contient les configurations qui sont obligatoires et "module:" qui contient les modules obligatoires.
Dans notre cas, on a :
...
dependencies:
config:
- core.entity_view_mode.user.hot_models_hotlock_menu__user
- field.field.user.user.user_picture
- image.style.thumbnail
module:
- hot_models
- image
- layout_builder
- user
...
La dessus nous devons importer 'core.entity_view_mode.user.hot_models_hotlock_menu__user' car ce dernier n'existe pas sur drupal, pour le reste cela existe sur une installation standart de drupal.
La prochaine configuration : (core.entity_view_mode.user.hot_models_hotlock_menu__user.yml )
uuid: 6fa85a79-970e-4d1c-9b29-9a3ab6eab2e4
langcode: fr
status: true
dependencies:
module:
- user
id: user.hot_models_hotlock_menu__user
label: 'User model flat (hot_models module)'
targetEntityType: user
cache: true
NB: cette configuration etant lier au module il faut qu'elle soit supprimer lorsque le module est desintallé, pour cela vous devez ajouter enforced au niveau de la clée dependencies :
...
status: true
dependencies:
config:
- core.entity_view_mode.user.hot_models_hotlock_menu__user
- field.field.user.user.user_picture
- image.style.thumbnail
module:
- hot_models
- image
- layout_builder
- user
enforced:
module:
- hot_models
third_party_settings:
layout_builder:
...
Et voilà, lors de l'installation de votre module, vous aurrez ce block qui serra automatiquement configuré.
Ressources :