Cake\View\Helper\BreadcrumbsHelper(View $view, array $config = [])¶Добавлено в версии 3.3.6.
BreadcrumbsHelper предоставляет возможность легко справиться с созданием и
отображением навигационных цепочек (хлебных крошек) для вашего приложения.
Вы можете добавлять звенья в список, используя метод add(). Он принимает
три аргумента:
title Строка для отображения в качестве заголовка хлебной крошки
url Строка или массив параметров, передаваемых хелперу Url
options Массив атрибутов для шаблонов item и itemWithoutLink.
Смотрите раздел определение атрибутов для элемента для более полной информации.
В дополнение к добавлению элементов в конец цепочки, вы также можете осуществить ряд других операций:
// Добавить элемен в конец цепочки
$this->Breadcrumbs->add(
    'Products',
    ['controller' => 'products', 'action' => 'index']
);
// Добавить несколько элементов в конец цепочки
$this->Breadcrumbs->add([
    ['title' => 'Products', 'url' => ['controller' => 'products', 'action' => 'index']],
    ['title' => 'Product name', 'url' => ['controller' => 'products', 'action' => 'view', 1234]]
]);
// Элементы будут добавлены в начало списка
$this->Breadcrumbs->prepend(
    'Products',
    ['controller' => 'products', 'action' => 'index']
);
// Добавить несколько элементов в начало списка в том порядке,
// в котором они указаны
$this->Breadcrumbs->prepend([
    ['title' => 'Products', 'url' => ['controller' => 'products', 'action' => 'index']],
    ['title' => 'Product name', 'url' => ['controller' => 'products', 'action' => 'view', 1234]]
]);
// Вставка в определенную позицию. Если позиция находится вне диапазона
// допустимых значений, будет выброшено исключение.
$this->Breadcrumbs->insertAt(
    2,
    'Products',
    ['controller' => 'products', 'action' => 'index']
);
// Вставка перед другим элементом, в соответствии с заголовком.
// Если указанный элемент не будет обнаружен,
// будет выброшено исключение.
$this->Breadcrumbs->insertBefore(
    'A product name', // заголовок элемента, перед которым вставлять новый
    'Products',
    ['controller' => 'products', 'action' => 'index']
);
// Вставка после другого элемента, в соответствии с заголовком.
// Если указанный элемент не будет обнаружен,
// будет выброшено исключение.
$this->Breadcrumbs->insertAfter(
    'A product name', // заголовок элемента, после которого вставлять новый
    'Products',
    ['controller' => 'products', 'action' => 'index']
);
Использование этих методов дает вам возможность работать с двухэтапным процессом рендеринга CakePHP. Поскольку шаблоны и макеты визуализируются изнутри (что означает, что включенные элементы отображаются первыми), это позволяет точно определить, где вы хотите добавить хлебную крошку.
После добавления элементов в цепочку, вы можете с легкостью вывести
ее, используя метод render(). Этот метод принимает два массива
в качестве аргументов:
$attributes : Массив атрибутов, которые будут применены к шаблону
wrapper. Это дает вам возможность добавлять атрибуты тегам HTML. Он
принимает специальный ключ templateVars, чтобы позволить вставку
пользовательских переменных в шаблон.
$separator : Массив атрибутов для шаблона separator.
Доступные свойства:
separator Строка для отображения в качестве разделителя
innerAttrs Предоставление атрибутов в случае, если разделитель
разбит на две части
templateVars Позволяет добавить пользовательские переменные в
шаблон
Все другие свойства будут конвертированы как HTML-атрибуты и будут заменять
ключ attrs в шаблоне. Если вы используете значение этой опции по
умолчанию (empty), разделитель не будет выводиться.
Вот пример того, как выводится навигационная цепочка:
echo $this->Breadcrumbs->render(
    ['class' => 'breadcrumbs-trail'],
    ['separator' => '<i class="fa fa-angle-right"></i>']
);
BreadcrumbsHelper внутренне использует StringTemplateTrait, дающий
возможность с легкостью изменять вывод различных строк HTML.
В него входят четыре шаблона, со следующими стандартными значениями:
[
    'wrapper' => '<ul{{attrs}}>{{content}}</ul>',
    'item' => '<li{{attrs}}><a href="{{url}}"{{innerAttrs}}>{{title}}</a></li>{{separator}}',
    'itemWithoutLink' => '<li{{attrs}}><span{{innerAttrs}}>{{title}}</span></li>{{separator}}',
    'separator' => '<li{{attrs}}><span{{innerAttrs}}>{{separator}}</span></li>'
]
Вы можете с легкостью изменять их, используя метод templates(), из
StringTemplateTrait:
$this->Breadcrumbs->templates([
    'wrapper' => '<nav class="breadcrumbs"><ul{{attrs}}>{{content}}</ul></nav>',
]);
Как только ваши шаблоны будут обработаны, опция templateVars позволит
вам добавить ваши собственные переменные в различные шаблоны:
$this->Breadcrumbs->templates([
    'item' => '<li{{attrs}}>{{icon}}<a href="{{url}}"{{innerAttrs}}>{{title}}</a></li>{{separator}}'
]);
Чтобы определить параметр {{icon}}, просто пропишите его при добавлении
элементов в навигационную цепочку:
$this->Breadcrumbs->add(
    'Products',
    ['controller' => 'products', 'action' => 'index'],
    [
        'templateVars' => [
            'icon' => '<i class="fa fa-money"></i>'
        ]
    ]
);
Если вы хотите применить специфические HTML-атрибуты к элементу цепочки, а также
к его дочернему элементу, вы можете использовать ключ innerAttrs, предлагаемый
аргументом $options. Все кроме параметров innerAttrs и templateVars
будет выведено как HTML-атрибуты элемента цепочки:
$this->Breadcrumbs->add(
    'Products',
    ['controller' => 'products', 'action' => 'index'],
    [
        'class' => 'products-crumb',
        'data-foo' => 'bar',
        'innerAttrs' => [
            'class' => 'inner-products-crumb',
            'id' => 'the-products-crumb'
        ]
    ]
);
// В соответствии с шаблоном по умолчанию, это сформирует следующий HTML:
<li class="products-crumb" data-foo="bar">
    <a href="/products/index" class="inner-products-crumb" id="the-products-crumb">Products</a>
</li>
Вы можете очистить хлебные крошки, используя метод reset(). Это может
быть полезным если вы хотите преобразовать крошки и переписать список:
$crumbs = $this->Breadcrumbs->getCrumbs();
$crumbs = collection($crumbs)->map(function ($crumb) {
    $crumb['options']['class'] = 'breadcrumb-item';
    return $crumb;
})->toArray();
$this->Breadcrumbs->reset()->add($crumbs);
Добавлено в версии 3.4.0: Метод reset() был добавлен в версии 3.4.0