protected function BreadcrumbBuilder::applyBreadcrumb in Custom Breadcrumbs 1.x
Apply breadcrumb per settings.
Parameters
\Drupal\Core\Breadcrumb\Breadcrumb $breadcrumb: Breadcrumb object.
\Drupal\custom_breadcrumbs\Entity\CustomBreadcrumbs $customBreadcrumbs: Breadcrumb settings.
mixed $entity: Entity.
Throws
\Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
\Drupal\Component\Plugin\Exception\PluginNotFoundException
2 calls to BreadcrumbBuilder::applyBreadcrumb()
- BreadcrumbBuilder::applyContentEntityBreadcrumb in src/
BreadcrumbBuilder.php - Added breadcrumbs based content entity.
- BreadcrumbBuilder::build in src/
BreadcrumbBuilder.php - Builds the breadcrumb.
File
- src/
BreadcrumbBuilder.php, line 270
Class
- BreadcrumbBuilder
- Class BreadcrumbBuilder.
Namespace
Drupal\custom_breadcrumbsCode
protected function applyBreadcrumb(Breadcrumb &$breadcrumb, CustomBreadcrumbs $customBreadcrumbs, $entity) {
$paths = $customBreadcrumbs
->getMultiValues('breadcrumbPaths');
$titles = $customBreadcrumbs
->getMultiValues('breadcrumbTitles');
$extraContexts = $customBreadcrumbs
->getMultiValues('extraCacheContexts');
$token_vars = [];
if ($entity instanceof EntityInterface) {
$token_vars = [
CustomBreadcrumbsForm::getTokenEntity($entity
->getEntityTypeId()) => $entity,
];
}
foreach ($paths as $key => $path) {
if (isset($titles[$key])) {
$href = file_url_transform_relative($this->token
->replace($path, $token_vars, [
'clear' => TRUE,
]));
$link_title = $this->token
->replace($titles[$key], $token_vars, [
'clear' => TRUE,
]);
$link_title = Html::decodeEntities($link_title);
// Skip empty href, for example when token is empty.
if (empty($href) || empty($link_title)) {
continue;
}
if ($href === '<nolink>') {
$link = Link::createFromRoute($this
->prepareTitle($link_title), $href);
$breadcrumb
->addLink($link);
}
else {
if ($this
->checkHierarchyToken($href)) {
$field_name = explode(':', $href)[1];
$field_name = str_replace('>', '', $field_name);
if ($entity instanceof EntityInterface) {
if ($entity
->hasField($field_name)) {
$term = $entity
->get($field_name)->entity;
if ($term instanceof TermInterface) {
$parents = $this
->getAllParents($term
->id());
foreach (array_reverse($parents) as $parent) {
$link = $parent
->toLink($this
->prepareTitle($parent
->label()));
$breadcrumb
->addLink($link);
$breadcrumb
->addCacheableDependency($parent);
}
}
}
}
continue;
}
else {
$url = Url::fromUserInput($href);
$link = Link::fromTextAndUrl($this
->prepareTitle($link_title), $url);
$breadcrumb
->addLink($link);
}
}
$breadcrumb
->addCacheableDependency($entity);
$breadcrumb
->addCacheableDependency($customBreadcrumbs);
}
}
if (array_filter($extraContexts)) {
$breadcrumb
->addCacheContexts($extraContexts);
}
}