subentity-1.x-dev/subentity.module

subentity.module
<?php

/**
 * @file
 * Hook implementations of subentity module.
 */

use Drupal\Component\Utility\Html;
use Drupal\Core\Render\Element;
use Drupal\subentity\Entity\SubEntityBase;

/**
 * Implements hook_theme().
 */
function subentity_theme(): array {
  $themes = [
    'subentity' => [
      'render element' => 'elements',
    ],
  ];

  $entity_types = \Drupal::entityTypeManager()->getDefinitions();
  foreach ($entity_types as $type_id => $type) {
    if (is_subclass_of($type->get('class'), SubEntityBase::CLASS)) {
      $themes[$type_id] = [
        'render element' => 'elements',
      ];
    }
  }

  return $themes;
}

/**
 * Implements hook_theme_registry_alter().
 */
function subentity_theme_registry_alter(array &$theme_registry): void {
  $entity_types = \Drupal::entityTypeManager()->getDefinitions();
  foreach ($entity_types as $type_id => $type) {
    if (!is_subclass_of($type->get('class'), SubEntityBase::CLASS)) {
      continue;
    }

    // No hook theme for subentity with type_id.
    if (!isset($theme_registry[$type_id])) {
      $theme_registry[$type_id] = $theme_registry['subentity'];
    }
  }
}

/**
 * Implements hook_preprocess_HOOK().
 */
function template_preprocess_subentity(array &$variables): void {
  $entity_type = $variables['elements']['#entity_type'];
  $variables['attributes']['class'][] = Html::cleanCssIdentifier($entity_type);
  $variables += ['content' => []];
  foreach (Element::children($variables['elements']) as $key) {
    $variables['content'][$key] = $variables['elements'][$key];
  }
}

/**
 * Implements hook_theme_suggestions_alter().
 */
function subentity_theme_suggestions_alter(array &$suggestions, array $variables, string $hook): void {
  if (isset($variables['elements']['#' . $hook]) && $variables['elements']['#' . $hook] instanceof SubEntityBase) {
    $subentity = $variables['elements']['#' . $hook];

    if (!empty($variables['elements']['#view_mode'])) {
      $view_mode = $variables['elements']['#view_mode'];

      $suggestions[] = $hook . '__' . $view_mode;
    }
    if ($subentity->bundle() !== 'subentity') {
      $bundle = $subentity->bundle();

      $suggestions[] = $hook . '__' . $bundle;
      if (!empty($view_mode)) {
        $suggestions[] = $hook . '__' . $bundle . '__' . $view_mode;
      }
    }
  }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc