Version 1
[yaffs-website] / web / core / modules / forum / src / Breadcrumb / ForumNodeBreadcrumbBuilder.php
diff --git a/web/core/modules/forum/src/Breadcrumb/ForumNodeBreadcrumbBuilder.php b/web/core/modules/forum/src/Breadcrumb/ForumNodeBreadcrumbBuilder.php
new file mode 100644 (file)
index 0000000..1a35901
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+namespace Drupal\forum\Breadcrumb;
+
+use Drupal\Core\Link;
+use Drupal\Core\Routing\RouteMatchInterface;
+
+/**
+ * Breadcrumb builder for forum nodes.
+ */
+class ForumNodeBreadcrumbBuilder extends ForumBreadcrumbBuilderBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function applies(RouteMatchInterface $route_match) {
+    return $route_match->getRouteName() == 'entity.node.canonical'
+      && $route_match->getParameter('node')
+      && $this->forumManager->checkNodeType($route_match->getParameter('node'));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build(RouteMatchInterface $route_match) {
+    $breadcrumb = parent::build($route_match);
+    $breadcrumb->addCacheContexts(['route']);
+
+    $parents = $this->forumManager->getParents($route_match->getParameter('node')->forum_tid);
+    if ($parents) {
+      $parents = array_reverse($parents);
+      foreach ($parents as $parent) {
+        $breadcrumb->addCacheableDependency($parent);
+        $breadcrumb->addLink(Link::createFromRoute($parent->label(), 'forum.page',
+          [
+            'taxonomy_term' => $parent->id(),
+          ]
+        ));
+      }
+    }
+
+    return $breadcrumb;
+  }
+
+}