monster_menus-9.0.x-dev/src/Breadcrumb/MMBreadcrumbBuilder.php

src/Breadcrumb/MMBreadcrumbBuilder.php
<?php

namespace Drupal\monster_menus\Breadcrumb;

use Drupal\Core\Breadcrumb\Breadcrumb;
use Drupal\Core\Breadcrumb\BreadcrumbBuilderInterface;
use Drupal\Core\Link;
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\monster_menus\Constants;
use Drupal\monster_menus\Entity\MMTree;

/**
 * Provides a custom breadcrumb builder that knows about the MM Tree structure.
 */
class MMBreadcrumbBuilder implements BreadcrumbBuilderInterface {

  /**
   * {@inheritdoc}
   */
  public function __construct() {
  }

  /**
   * {@inheritdoc}
   */
  public function applies(RouteMatchInterface $route_match) {
    return !is_null($route_match->getParameter('mm_tree'));
  }

  /**
   * {@inheritdoc}
   */
  public function build(RouteMatchInterface $route_match) {
    $breadcrumb = new Breadcrumb();

    mm_parse_args($mmtids, $oarg_list);
    if (!$mmtids) {
      return $breadcrumb;
    }

    if (isset($mmtids[0]) && $mmtids[0] == mm_home_mmtid()) {
      array_shift($mmtids);
    }

    $base = mm_content_get(mm_home_mmtid());
    $bread = [mm_home_mmtid() => Link::createFromRoute(mm_content_get_name($base), '<front>')];
    foreach ($mmtids as $mmtid) {
      if (!($tree = mm_content_get($mmtid, Constants::MM_GET_FLAGS))) {
        break;
      }

      if ($mmtid == $mmtids[count($mmtids) - 1] || !isset($tree->flags['no_breadcrumb'])) {
        $bread[$mmtid] = Link::fromTextAndUrl(mm_content_get_name($tree), mm_content_get_mmtid_url($mmtid));
      }

      if (!mm_content_user_can($mmtid, Constants::MM_PERMS_READ)) {
        break;
      }
    }

    $breadcrumb->setLinks($bread);
    foreach (MMTree::loadMultiple(array_keys($bread)) as $mm_tree) {
      $breadcrumb->addCacheableDependency($mm_tree);
    }
    // This breadcrumb builder is based on a route parameter, and hence it
    // depends on the 'route' cache context.
    $breadcrumb->addCacheContexts(['route']);
    return $breadcrumb;
  }

}

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

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