ldc-groupe/routes/breadcrumbs-front.php

81 lines
2.9 KiB
PHP

<?php
use App\Enums\DynamicPages\PageStatusEnum;
use App\Helpers\RouteHelper;
use App\Models\DynamicPage;
use App\Models\News;
use Diglactic\Breadcrumbs\Breadcrumbs;
use Diglactic\Breadcrumbs\Generator;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Str;
use Mcamara\LaravelLocalization\Facades\LaravelLocalization;
if (!Schema::hasTable('dynamic_pages')) {
return;
}
$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))
);
}
);
});
});
// * 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));
}
});