show_title-8.x-1.5/show_title.module

show_title.module
<?php

/**
 * @file
 * Module Show Title.
 */

use Drupal\block\Entity\Block;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Core\Session\AccountInterface;
use Drupal\Core\Template\Attribute;
use Drupal\node\Entity\NodeType;
use Drupal\taxonomy\Entity\Vocabulary;

/**
 * Implements hook_help().
 */
function show_title_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    case 'help.page.show_title':
      $text = file_get_contents(dirname(__FILE__) . '/README.md');
      if (!\Drupal::moduleHandler()->moduleExists('markdown')) {
        return '<pre>' . $text . '</pre>';
      }
      else {
        // Use the Markdown filter to render the README.
        $filter_manager = \Drupal::service('plugin.manager.filter');
        $settings = \Drupal::configFactory()->get('markdown.settings')->getRawData();
        $config = ['settings' => $settings];
        $filter = $filter_manager->createInstance('markdown', $config);
        return $filter->process($text, 'en');
      }
  }
  return NULL;
}

/**
 * Implements hook_entity_extra_field_info().
 */
function show_title_entity_extra_field_info() {

  $extra = [];

  // Nodes.
  foreach (NodeType::loadMultiple() as $bundle) {
    $extra['node'][$bundle->id()]['display']['show_title'] = [
      'label' => t('Title'),
      'description' => t('Show Title'),
      'weight' => 100,
      'visible' => TRUE,
    ];
  }

  // Taxonomy terms.
  foreach (Vocabulary::loadMultiple() as $vocabulary) {
    $extra['taxonomy_term'][$vocabulary->id()]['display']['show_title'] = [
      'label' => t('Name'),
      'description' => t('Show Name'),
      'weight' => 100,
      'visible' => TRUE,
    ];
  }

  return $extra;
}

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function show_title_node_view(
  array &$build,
  EntityInterface $node,
  EntityViewDisplayInterface $display,
  $view_mode) {

  $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();

  if ($display->getComponent('show_title')) {

    // Add attributes for quickedit.
    $attributes = [
      'data-quickedit-field-id' => 'node/' . $node->id() . '/title/' . $langcode . '/' . $view_mode,
      'class' => 'field field--name-title-text field--type-string quickedit-field quickedit-candidate quickedit-editable',
    ];

    $build['show_title'] = [
      '#type' => 'markup',
      '#markup' => '<div' . new Attribute($attributes) . '>' . $node->getTitle() . '</div>',
    ];
  }
}

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function show_title_taxonomy_term_view(
  array &$build,
  EntityInterface $taxonomy_term,
  EntityViewDisplayInterface $display,
  $view_mode) {

  $langcode = \Drupal::languageManager()->getCurrentLanguage()->getId();

  if ($display->getComponent('show_title')) {
    // Add attributes for quickedit.
    $attributes = [
      'data-quickedit-field-id' => 'taxonomy_term/' . $taxonomy_term->id() . '/name/' . $langcode . '/' . $view_mode,
      'class' => 'field field--name-name-text field--type-string quickedit-field quickedit-candidate quickedit-editable',
    ];

    $build['show_title'] = [
      '#type' => 'markup',
      '#markup' => '<div' . new Attribute($attributes) . '>' . $taxonomy_term->getName() . '</div>',
    ];
  }
}

/**
 * Implements hook_block_access().
 */
function show_title_block_access(Block $block, $operation, AccountInterface $account) {
  if ($operation == 'view' && $block->getPluginId() == 'page_title_block') {
    if (!show_title_block()) {
      return AccessResult::forbidden();
    }
  }
}

/**
 * Define if the block title need to show.
 *
 * @return bool
 *   For show block.
 */
function show_title_block() {
  $show_block_title = TRUE;
  if (\Drupal::service('router.admin_context')->isAdminRoute()) {
    return $show_block_title;
  }
  if (\Drupal::service('path.matcher')->isFrontPage()) {
    $show_block_title = FALSE;
  }
  if (show_title_is_in_display_mode()) {
    $show_block_title = FALSE;
  }
  return $show_block_title;
}

/**
 * Check if the extra field is used.
 *
 * @return bool
 *   Is used.
 */
function show_title_is_in_display_mode() {
  $entities = [];
  foreach (\Drupal::routeMatch()->getParameters() as $param) {
    if ($param instanceof EntityInterface) {
      $entities[] = $param;
    }
  }
  if (!empty($entities)) {
    $entity = $entities[0];
    $display = \Drupal::entityTypeManager()
      ->getStorage('entity_view_display')
      ->load($entity->getEntityTypeId() . '.' . $entity->bundle() . '.default');
    if (!empty($display)) {
      $content = $display->get('content');
      if (!empty($content['show_title'])) {
        return TRUE;
      }
    }
  }
  return FALSE;
}

/**
 * Implements hook_preprocess_HOOK().
 */
function show_title_preprocess_page(&$variables) {
  $variables['show_title'] = FALSE;
  if (!show_title_block()) {
    $variables['show_title'] = TRUE;
  }
}

/**
 * Implements hook_theme_registry_alter().
 */
function show_title_theme_registry_alter(&$theme_registry) {

  $active_theme = \Drupal::theme()->getActiveTheme();

  // Check if file not exist in active theme.
  if (!file_exists($active_theme->getPath() . '/templates/node.html.twig')) {

    // Check if theme has base theme to select the right overrided template.
    // Base theme stable is default core template.
    $base_theme = 'stable';
    if (!empty($active_theme->getExtension()->base_theme)) {
      $base_theme = $active_theme->getExtension()->base_theme;
    }

    // Set the branding block template.
    $module_path = \Drupal::service('extension.list.module')->getPath('show_title');
    $theme_registry['node']['path'] = implode(
      '/',
      [$module_path, 'templates', $base_theme]
    );
  }
}

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

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