Désigner /spécifier/choisir le thème par route/chemin Drupal 8/9/10

Spécifier thème admin par chemin échantillon/exemple de code

Énigme; vous avez créé un webform qui dépend sur votre thème pour le contenu , votre thème admin dans ce cas n'est pas votre préférence désiré.

Solution: un theme_negotiator

 

ajoute une classe dans

mon_module/src/Theme/Negotiatrice.php

une service dans:

mon_module/mon_module.service.yml

Dans le fichier mon_module.service.yml ajoute le yml suivant:

service:
  theme.negotiator.mon_module:
    class: Drupal\mon_module\Theme\Negotiatrice
    tags:
      - { name: theme_negotiator, priority: -29 }

Dans la classe, ajoute le code php suivant:

<?php
/**
 * @file
 * Contains \Drupal\mon_module\Theme\Negotiatrice
 */

namespace Drupal\mon_module\Theme;

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Theme\ThemeNegotiatorInterface;

class Negotiatrice implements ThemeNegotiatorInterface
{

  /**
   * {@inheritdoc}
   */
  public function applies(RouteMatchInterface $route_match)
  {
    $current_route = $route_match->getRouteName();
    // Nécéssaire et correspond à la condition dans determineActiveTheme.
    if ($current_route == 'entity.webform_submission.edit_form') {
      return TRUE;
    }
    // Comme d'habitude.
    return FALSE;
  }

  /**
   * {@inheritdoc}
   */
  public function determineActiveTheme(RouteMatchInterface $route_match)
  {
    // Cette condition semble faire ce que je m'attends.
    if ($route_match->getRouteName() == 'entity.webform_submission.edit_form')
    {
      // Utilisent le thème 'bootstrap' pour cette route/ce chemin.
      return 'bootstrap';
    }
    // Sinon, claro comme d'habitude.
    return 'claro';
  }

}