class TaxonomyThemeHooks

Hook implementations for taxonomy.

Hierarchy

Expanded class hierarchy of TaxonomyThemeHooks

1 file declares its use of TaxonomyThemeHooks
taxonomy.module in core/modules/taxonomy/taxonomy.module

File

core/modules/taxonomy/src/Hook/TaxonomyThemeHooks.php, line 12

Namespace

Drupal\taxonomy\Hook
View source
class TaxonomyThemeHooks {
  public function __construct(protected readonly RouteMatchInterface $routeMatch) {
  }
  
  /**
   * Implements hook_theme().
   */
  public function theme() : array {
    return [
      'taxonomy_term' => [
        'render element' => 'elements',
        'initial preprocess' => static::class . ':preprocessTaxonomyTerm',
      ],
    ];
  }
  
  /**
   * Implements hook_theme_suggestions_HOOK().
   */
  public function themeSuggestionsTaxonomyTerm(array $variables) : array {
    $suggestions = [];
    /** @var \Drupal\taxonomy\TermInterface $term */
    $term = $variables['elements']['#taxonomy_term'];
    $suggestions[] = 'taxonomy_term__' . $term->bundle();
    $suggestions[] = 'taxonomy_term__' . $term->id();
    return $suggestions;
  }
  
  /**
   * Prepares variables for taxonomy term templates.
   *
   * Default template: taxonomy-term.html.twig.
   *
   * By default this function performs special preprocessing to move the name
   * base field out of the elements array into a separate variable. This
   * preprocessing is skipped if:
   * - a module makes the field's display configurable via the field UI by means
   *   of BaseFieldDefinition::setDisplayConfigurable()
   * - AND the additional entity type property
   *   'enable_base_field_custom_preprocess_skipping' has been set using
   *   hook_entity_type_build().
   *
   * @param array $variables
   *   An associative array containing:
   *   - elements: An associative array containing the taxonomy term and any
   *     fields attached to the term. Properties used:
   *     - #taxonomy_term: A \Drupal\taxonomy\TermInterface object.
   *     - #view_mode: The current view mode for this taxonomy term, e.g.
   *       'full' or 'teaser'.
   *   - attributes: HTML attributes for the containing element.
   */
  public function preprocessTaxonomyTerm(array &$variables) : void {
    $variables['view_mode'] = $variables['elements']['#view_mode'];
    $variables['term'] = $variables['elements']['#taxonomy_term'];
    /** @var \Drupal\taxonomy\TermInterface $term */
    $term = $variables['term'];
    $variables['url'] = !$term->isNew() ? $term->toUrl()
      ->toString() : NULL;
    // Make name field available separately.  Skip this custom preprocessing if
    // the field display is configurable and skipping has been enabled.
    // @todo https://www.drupal.org/project/drupal/issues/3015623
    //   Eventually delete this code and matching template lines. Using
    //   $variables['content'] is more flexible and consistent.
    $skip_custom_preprocessing = $term->getEntityType()
      ->get('enable_base_field_custom_preprocess_skipping');
    if (!$skip_custom_preprocessing || !$term->getFieldDefinition('name')
      ->isDisplayConfigurable('view')) {
      // We use name here because that is what appears in the UI.
      $variables['name'] = $variables['elements']['name'];
      unset($variables['elements']['name']);
    }
    // The page variable is deprecated.
    $variables['deprecations']['page'] = "'page' is deprecated in drupal:11.3.0 and is removed in drupal:13.0.0. Use 'view_mode' instead. See https://www.drupal.org/node/3542527";
    $variables['page'] = FALSE;
    if ($variables['view_mode'] == 'full' && ($this->routeMatch
      ->getRouteName() == 'entity.taxonomy_term.canonical' && $this->routeMatch
      ->getRawParameter('taxonomy_term') == $term->id())) {
      $variables['page'] = TRUE;
    }
    // Helpful $content variable for templates.
    $variables['content'] = [];
    foreach (Element::children($variables['elements']) as $key) {
      $variables['content'][$key] = $variables['elements'][$key];
    }
  }

}

Members

Title Sort descending Modifiers Object type Summary
TaxonomyThemeHooks::preprocessTaxonomyTerm public function Prepares variables for taxonomy term templates.
TaxonomyThemeHooks::theme public function Implements hook_theme().
TaxonomyThemeHooks::themeSuggestionsTaxonomyTerm public function Implements hook_theme_suggestions_HOOK().
TaxonomyThemeHooks::__construct public function

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.