Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kozhilya/breadcrumbsbundle
Библиотека хлебных крошек
https://github.com/kozhilya/breadcrumbsbundle
breadcrumbs breadcrumbs-generator symfony symfony-7 symfony-bundle
Last synced: about 1 month ago
JSON representation
Библиотека хлебных крошек
- Host: GitHub
- URL: https://github.com/kozhilya/breadcrumbsbundle
- Owner: kozhilya
- Created: 2023-05-01T12:26:14.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-02-06T14:14:26.000Z (9 months ago)
- Last Synced: 2024-10-13T06:21:12.208Z (about 1 month ago)
- Topics: breadcrumbs, breadcrumbs-generator, symfony, symfony-7, symfony-bundle
- Language: PHP
- Homepage:
- Size: 51.8 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Библиотека хлебных крошек
## Установка
```
composer require kozhilya/breadcrumbs-bundle
```## Использование
### Описание крошек
Необходимо сервисом реализовать класс `AbstractDefenision`.
Пример реализации подобного класса:
```php
namespace App\Service\Breadcrumbs;use Kozhilya\BreadcrumbsBundle\Breadcrumbs\AbstractDefinition;
use Kozhilya\BreadcrumbsBundle\Builder\Generator;
use Kozhilya\BreadcrumbsBundle\Builder\Item;
use Kozhilya\BreadcrumbsBundle\Nodes\RootNode;class MainBreadcrumbs extends AbstractDefinition
{
// В этом классе перечисляются доступные крошки
public function getBreadcrumbs(): array
{
return [
new RootNode( // RootNode указывает, что крошка не имеет дополнительных параметров
'index', // Имя хлебной крошки
[$this, 'index'] // Метод, обрабатывающий содержимое
),
new RootNode('login', [$this, 'login']),
new ActionNode( // ActionNode указывает, что крошка относится к объектам некоторого класса
User::class, // Класс, к которому относится крошка
'index', // Имя хлебной крошки может совпадать с другими, при условии, что классы различаются
[$this, 'userIndex'] // Метод, обрабатывающий содержимое
),
];
}public function index(Generator $generator)
{
$path = $this->generateUrl('app_index');
// $generator->append добавляет элемент хлебной крошки
$generator->append("Главная страница", $path);
}public function login(Generator $generator)
{
// $generator->parent указывает, какой элемент продолжает эта хлебная крошка
$generator->parent('index');$path = $this->generateUrl('app_login');
$generator->append("Вход в систему", $path);
}
public function userIndex(Generator $generator, User $user) // Второй аргумент - это объект, к которому относится крошка
{
$generator->parent('index');$name = $this->translator->trans('menu.comics', [], 'app');
$path = $this->generateUrl('comic_list');$generator->append($user->getName(), $path);
}
}
```### Использование крошек
Пример файла `index.html.twig`
```twig
{% extends 'base.html.twig' %}
{% block title %}{% endblock %}{% do set_breadcrumbs('index') %}
{# ... #}
```Пример файла `login.html.twig`
```twig
{% extends 'base.html.twig' %}
{% block title %}Вход в систему{% endblock %}{% do set_breadcrumbs('login') %}
{# ... #}
```Пример файла `user/index.html.twig`
```twig
{% extends 'base.html.twig' %}
{% block title %}{{ user.name }}{% endblock %}{% do set_breadcrumbs('index', user) %}
{# ... #}
```### Вставка крошек
Пример файла `base.html.twig`
```twig{{ breadcrumbs() }}
{% block content %}{% endblock %}```