Créer un pied de page pour un micro site avec Drupal 8

Une usine

Le module Micro Site permet de mettre en place une usine à site Drupal, depuis une seule instance Drupal 8, pour propulser une multitude de sites, de nature différente si besoin. Micro Site fournit une nouvelle entité de contenu permettant de personnaliser à volonté, avec les API disponibles sur Drupal 8, ces différents types de site, et modifier leur comportement selon les besoins métier. Détaillons comment nous pouvons procéder, au travers d'un exemple de base consistant à fournir un pied de page modulaire sur différents sites propulsés, et l'afficher sur toutes les pages pouvant constituer le site.

Cette opération se résume au final à un peu de site building, par l'ajout et la configuration de quelques champs, et un zeste de theming en adaptant le template général des pages d'un site pour être en mesure d'afficher ce pied de page.

Site building

Add field on site type

Par exemple, sur un type de site intitulé Generic nous pouvons créer un nouveau champ de type Paragraphs intitulé Site Footer.

field site footer

Puis nous pouvons renseigner au niveau du micro site le pied du page, depuis un certain nombre de paragraphes configurés (de type liens permettant d'ajouter une liste de liens, ou encore de type texte pour mettre du texte libre, ou pourquoi pas un paragraphe permettant de charger un formulaire d'inscription, etc.).

Footer exemple

Nous utilisons dans cet exemple des paragraphes pour alimenter le pied de page du micro site, pour permettre une grande modularité pour chaque micro site de personnaliser son pied de page selon ses besoins. Mais nous aurions tout aussi bien pu utiliser des champs plus simples, plus contraints, pour limiter les possibles pouvant être renseignés dans le pied de page. C'est ici à l'appréciation des besoins métier de chaque type de site qu'on souhaite mettre en place.

Theming

Nous n'allons pas annoncer une grande innovation, ni une tonitruante astuce, pour la suite. Une fois le (ou les) champs créés qui vont permettre d'alimenter le pied de page du micro site, il ne reste plus qu'à l'afficher au niveau du template page.html.twig, ou sur un surcharge spécifique au type de site : page--site.html.twig ou une surcharge plus spécifique au type de site, par exemple page--site--generic.html.twig.

Tout d'abord, nous implémentons une fonction de prepocess au niveau des pages du site pour fournir au template la variable site_footer.

/**
 * Implements hook_preprocess_HOOK().
 *
 * Provide site variables to override footer, menu in the page template
 * dedicated to site entities.
 */
function micro_drupal_preprocess_page(&$variables) {
  $negotiator = \Drupal::service('micro_site.negotiator');
  /** @var \Drupal\micro_site\Entity\SiteInterface $site */
  $site = $negotiator->getActiveSite();
  if ($site instanceof SiteInterface) {
    if ($site->hasField(MicroDrupalConstant::SITE_FOOTER)) {
      if (!$site->get(MicroDrupalConstant::SITE_FOOTER)->isEmpty()) {
        $viewBuilder = \Drupal::entityTypeManager()->getViewBuilder('site');
        $field_footer = $site->get(MicroDrupalConstant::SITE_FOOTER);
        $site_footer = $viewBuilder->viewField($field_footer, 'footer');
        $variables['page']['site_footer'] = $site_footer;
      }
    }
  }
}

Puis au niveau du template page--site.html.twig, nous affichons cette nouvelle variable.

{% if page.site_footer %}
  <!-- #site-footer -->
  <footer id="site-footer" class="clearfix site-footer-wrapper">
    <div class="site-footer-wrapper-inside clearfix">
      <div class="container">
        <div class="row">
          <div class="col-xs-12">
            <div class="site-footer">
              {{ page.site_footer }}
            </div>
          </div>
        </div>
      </div>
    </div>
  </footer>
  <!-- EOF: #site-footer -->
{% endif %}

Et c'est fini. Le reste n'est plus qu'un peu de mise en forme avec quelques règles magique de CSS.

Et pour une barre latérale ?

Nous avons la possibilité en utilisant le système de positionnement des blocs de Drupal 8, de pouvoir placer autant de blocs que nécessaires dans une région de type barre latérale, et de contrôler la visibilité par site, ou type de site, selon le besoin. Mais cette configuration doit être faite alors au niveau de l'administrateur de l'instance Maître Drupal et non au niveau de chaque micro site.

En suivant la même logique, nous pouvons très bien mettre en place des champs dédiés (modulaires ou non) pour alimenter une barre latérale présente sur chaque micro site, et ensuite permettre cette fois l'administration et la gestion au niveau de chaque micro site du contenu de ces barres latérales et de contrôler leur visibilité à ce niveau. La mise en place sera légèrement plus complexe, pour donner tout pouvoir de contrôle à un administrateur d'un micro site sur les règles de visibilité des contenus créés, mais le principe de base reste le même : une touche de site building et un zeste de theming pour personnaliser autant que de besoin un micro site.

 

Ajouter un commentaire