navigation_extra-1.0.x-dev/src/Plugin/Navigation/Extra/MediaPlugin.php

src/Plugin/Navigation/Extra/MediaPlugin.php
<?php

namespace Drupal\navigation_extra\Plugin\Navigation\Extra;

use Drupal\Core\Form\FormStateInterface;
use Drupal\navigation_extra\NavigationExtraPluginBase;

/**
 * An NavigationExtraPlugin for media navigation links.
 *
 * @NavigationExtraPlugin(
 *   id = "media",
 *   name = @Translation("Media"),
 *   description = @Translation("Provides navigation links for media."),
 *   weight = 3,
 *   entity_type = "media",
 *   dependencies = {
 *     "media"
 *   }
 * )
 */
class MediaPlugin extends NavigationExtraPluginBase {

  /**
   * {@inheritdoc}
   */
  public function buildConfigForm(array &$form, FormStateInterface $form_state): array {
    $elements = parent::buildConfigForm($form, $form_state);

    if ($this->isRouteAvailable('view.media_library.page')) {
      $elements['link_media_library'] = [
        '#type' => 'checkbox',
        '#title' => $this->t('Link to media library'),
        '#description' => $this->t('Links media items directly to the media library.'),
        '#default_value' => $this->config->get("plugins." . $this->getPluginId() . '.link_media_library') ?? 0,
      ];
    }

    $elements += $this->buildConfigFormCreateItems($form, $form_state);

    return $elements;
  }

  /**
   * {@inheritdoc}
   */
  public function alterDiscoveredMenuLinks(array &$links): void {
    $link_library = $this->config->get('plugins.media.link_media_library') ?? TRUE;

    // Use Media Library page if library is accessible.
    if ($link_library && $this->isRouteAvailable('view.media_library.page')) {
      $route_name = 'view.media_library.page';
    }
    else {
      $route_name = 'view.media.media_page_list';
    }

    $this->addLink('navigation.media', [
      'route_name' => $route_name,
      'title' => $this->t('Media'),
      'weight' => $this->config->get("plugins.media.weight") ?? 0,
      'options' => [
        'attributes' => [
          'class' => [
            'navigation-extra--media',
          ],
        ],
      ],
    ] + ($links['navigation.media'] ?? []), $links);

    // Create the collections.
    $this->addCollectionLinks(
      'navigation.media',
      fn($collection) => ([
        'route_name' => $route_name,
        'route_parameters' => [
          'collection' => $collection['id'],
        ],
      ]),
      $links
    );

    $this->addItemLinks(
      'navigation.media',
      'media_type',
      fn($item) => ([
        'route_name' => $route_name,
        'route_parameters' => [
          'type' => $item->id(),
        ],
      ]),
      $links
    );

    $this->addCreateEntityLinks(
      'navigation.media',
      $route_name,
      'entity.media.add_form',
      'media_type',
      $links
    );

  }

}

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

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