Mercurial > hg > isophonics-drupal-site
diff core/lib/Drupal/Core/Breadcrumb/Breadcrumb.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/lib/Drupal/Core/Breadcrumb/Breadcrumb.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,88 @@ +<?php + +namespace Drupal\Core\Breadcrumb; + +use Drupal\Core\Cache\RefinableCacheableDependencyInterface; +use Drupal\Core\Cache\RefinableCacheableDependencyTrait; +use Drupal\Core\Link; +use Drupal\Core\Render\RenderableInterface; + +/** + * Used to return generated breadcrumbs with associated cacheability metadata. + */ +class Breadcrumb implements RenderableInterface, RefinableCacheableDependencyInterface { + + use RefinableCacheableDependencyTrait; + + /** + * An ordered list of links for the breadcrumb. + * + * @var \Drupal\Core\Link[] + */ + protected $links = []; + + /** + * Gets the breadcrumb links. + * + * @return \Drupal\Core\Link[] + */ + public function getLinks() { + return $this->links; + } + + /** + * Sets the breadcrumb links. + * + * @param \Drupal\Core\Link[] $links + * The breadcrumb links. + * + * @return $this + * + * @throws \LogicException + * Thrown when setting breadcrumb links after they've already been set. + */ + public function setLinks(array $links) { + if (!empty($this->links)) { + throw new \LogicException('Once breadcrumb links are set, only additional breadcrumb links can be added.'); + } + + $this->links = $links; + + return $this; + } + + /** + * Appends a link to the end of the ordered list of breadcrumb links. + * + * @param \Drupal\Core\Link $link + * The link appended to the breadcrumb. + * + * @return $this + */ + public function addLink(Link $link) { + $this->links[] = $link; + + return $this; + } + + /** + * {@inheritdoc} + */ + public function toRenderable() { + $build = [ + '#cache' => [ + 'contexts' => $this->cacheContexts, + 'tags' => $this->cacheTags, + 'max-age' => $this->cacheMaxAge, + ], + ]; + if (!empty($this->links)) { + $build += [ + '#theme' => 'breadcrumb', + '#links' => $this->links, + ]; + } + return $build; + } + +}