metatag-8.x-1.x-dev/metatag_page_manager/metatag_page_manager.module

metatag_page_manager/metatag_page_manager.module
<?php

/**
 * @file
 * Contains metatag_page_manager.module.
 */

use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\metatag\Entity\MetatagDefaults;
use Drupal\page_manager\Entity\PageVariant;

/**
 * Implements hook_form_FORM_ID_alter().
 */
function metatag_page_manager_form_metatag_defaults_add_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $variants_options['Page Variants'] = _metatag_page_manager_get_variants();
  $form['id']['#options'] = array_merge($form['id']['#options'], $variants_options);
}

/**
 * Returns all available page variants.
 *
 * @return string[]
 *   A list of page variants keyed by label.
 */
function _metatag_page_manager_get_variants() {
  /** @var \Drupal\page_manager\Entity\PageVariant[] $variants */
  $variants = PageVariant::loadMultiple();
  $variant_options = [];
  // Load all metatag defaults so we can filter the variants which already have
  // a metatag default configured.
  $metatag_defaults = MetatagDefaults::loadMultiple();
  foreach ($variants as $key => $variant) {
    $id = $variant->getEntityType()->id() . '__' . $key;
    if (!isset($metatag_defaults[$id])) {
      $label = $variant->getPage()->label() . ' : ' . $variant->label();
      $variant_options[$id] = $label;
    }
  }
  return $variant_options;
}

/**
 * Implements hook_metatag_alter().
 */
function metatag_page_manager_metatags_alter(array &$metatags, array &$context) {
  if (!$context['entity'] instanceof PageVariant) {
    return;
  }

  $key = $context['entity']->getEntityType()->id() . '__' . $context['entity']->id();
  $metatag_variant = MetatagDefaults::load($key);
  if ($metatag_variant) {
    $metatags = array_merge($metatags, $metatag_variant->get('tags'));
  }
}

/**
 * Implements hook_metatag_route_entity().
 */
function metatag_page_manager_metatag_route_entity(RouteMatchInterface $route_match) {
  if ($variant = $route_match->getParameter('page_manager_page_variant')) {
    return $variant;
  }

  if (strpos($route_match->getRouteName(), 'page_manager.page_view') === 0) {
    $page_variant_id = $route_match->getRouteObject()->getDefault('_page_manager_page_variant');
    return PageVariant::load($page_variant_id);
  }
}

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

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