ldc-groupe/routes/breadcrumbs-front.php

96 lines
No EOL
3.6 KiB
PHP

<?php
use App\Enums\DynamicPages\PageStatusEnum;
use App\Enums\Contact\ContactFormType;
use App\Helpers\RouteHelper;
use App\Models\DynamicPage;
use App\Models\News;
use Diglactic\Breadcrumbs\Breadcrumbs;
use Diglactic\Breadcrumbs\Generator;
use Illuminate\Support\Str;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
$currentLocale = app()->getLocale();
$supportedLocales = LaravelLocalization::getSupportedLanguagesKeys();
$pageHome = DynamicPage::getModelsCached()
->where('status', PageStatusEnum::published)
->where('isRoot', true)
->first();
// * DYNAMIC PAGES.
DynamicPage::getModelsCached()->map(function (DynamicPage $dynamicPageModel) use ($supportedLocales, $pageHome) {
collect($supportedLocales)->map(function (string $locale) use ($dynamicPageModel, $pageHome) {
Breadcrumbs::for(
sprintf("front.dynamic-pages.%s.%s", $dynamicPageModel->id_key, $locale),
function (Generator $trail) use ($locale, $dynamicPageModel, $pageHome) {
if (!is_null($dynamicPageModel->page_id)) {
$trail->parent(sprintf("front.dynamic-pages.%s.%s", $dynamicPageModel->parentPage->id_key, $locale));
} elseif (isset($pageHome) && $dynamicPageModel->id_key !== $pageHome->id_key) {
$trail->parent(sprintf("front.dynamic-pages.%s.%s", $pageHome->id_key, $locale));
}
$trail->push($dynamicPageModel->title, RouteHelper::routeNameChecker(sprintf("front.dynamic-pages.%s", $dynamicPageModel->id_key)));
}
);
});
});
// * CONTACT INDEX.
Breadcrumbs::for('front.contact.index', function (Generator $trail) use ($pageHome, $currentLocale) {
if ($pageHome) {
$trail->parent(sprintf("front.dynamic-pages.%s.%s", $pageHome->id_key, $currentLocale));
}
$trail->push(
Str::of(trans('front.contact.index'))->ucfirst(),
route('front.contact.index')
);
});
// * CONTACT SHOW.
Breadcrumbs::for('front.contact.show', function (Generator $trail) {
$trail->parent('front.contact.index');
$slug = \request()->route()->parameters['slug'];
// je sais que je suis dans une conact
$enumType = collect(ContactFormType::all())->first(function ($enum) use ($slug) {
return $enum->slug() === $slug;
});
if ($enumType) {
$trail->push(
Str::of(trans($enumType->label()))->ucfirst()
);
}
});
// * SEARCH INDEX.
Breadcrumbs::for('front.search', function (Generator $trail) use ($pageHome, $currentLocale) {
if ($pageHome) {
$trail->parent(sprintf("front.dynamic-pages.%s.%s", $pageHome->id_key, $currentLocale));
}
$trail->push(
Str::of(trans('front.search.trans'))->ucfirst(),
route('front.search')
);
});
// NEWS SHOW.
$pageActualites = DynamicPage::getModelsCached()
->where('status', PageStatusEnum::published)
->where('id_key', 'actualites')
->first();
Breadcrumbs::for('front.news.show', function (Generator $trail) use ($currentLocale, $pageActualites) {
if ($pageActualites) {
$trail->parent(sprintf("front.dynamic-pages.%s.%s", $pageActualites->id_key, $currentLocale));
}
if (request()->news instanceof News) {
$trail->push(
Str::of(request()->news->title)->ucfirst()
);
}
});
// * DOCUMENT SHOW.
// Need it for the search page.
Breadcrumbs::for('front.documents.show', function (Generator $trail) use ($pageHome, $currentLocale) {
if ($pageHome) {
$trail->parent(sprintf("front.dynamic-pages.%s.%s", $pageHome->id_key, $currentLocale));
}
});