diff --git a/app/Http/Controllers/ClientDepartmentController.php b/app/Http/Controllers/ClientDepartmentController.php index 7f3b49e..212f3fe 100644 --- a/app/Http/Controllers/ClientDepartmentController.php +++ b/app/Http/Controllers/ClientDepartmentController.php @@ -34,6 +34,7 @@ class ClientDepartmentController extends Controller } ); + // Кешируем список активных кафедр факультета $departments = Cache::remember( CacheKeys::DEPARTMENTS_PREFIX->value . 'active_' . $faculty->id, diff --git a/app/Http/Controllers/PersonController.php b/app/Http/Controllers/PersonController.php index 93888c8..3a4ccd9 100644 --- a/app/Http/Controllers/PersonController.php +++ b/app/Http/Controllers/PersonController.php @@ -4,15 +4,8 @@ namespace App\Http\Controllers; use App\Enums\CacheKeys; use App\Http\Resources\ClientFullInfoPersonResource; -use App\Http\Resources\ClientNavigationResource; -use App\Http\Resources\MainSectionResource; -use App\Http\Resources\UserDetailResource; -use App\Http\Resources\UserResource; -use App\Models\MainSection; use App\Models\User; -use App\Models\UserDetail; use App\Services\App\Seo\SeoPageProvider; -use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Inertia\Inertia; @@ -25,7 +18,7 @@ class PersonController extends Controller $cacheKey = CacheKeys::USER_PREFIX->value . md5($slug); [$person, $seo] = Cache::remember($cacheKey, now()->addHours(24), function () use ($slug) { - $person = User::query()->with(['userDetail', 'departments_work.faculty', 'departments_teach.faculty', 'divisions', 'faculties', 'seo']) + $person = User::query()->with(['userDetail', 'departments_work.faculty', 'departments_teach.faculty', 'divisions', 'faculties']) ->where('slug', $slug) ->firstOrFail(); $seo = $this->seoPageProvider->getSeoForModel($person); @@ -35,6 +28,8 @@ class PersonController extends Controller ]; }); + + return Inertia::render('Client/Persons/Show', compact('person', 'seo')); } } diff --git a/app/Http/Resources/ClientPersonDepartmentPreviewResource.php b/app/Http/Resources/ClientPersonDepartmentPreviewResource.php index 2faad3a..97ffa85 100644 --- a/app/Http/Resources/ClientPersonDepartmentPreviewResource.php +++ b/app/Http/Resources/ClientPersonDepartmentPreviewResource.php @@ -18,11 +18,11 @@ class ClientPersonDepartmentPreviewResource extends JsonResource 'id' => $this->id, 'name' => $this->name, 'slug' => $this->slug, - 'academicTitle' => $this->userDetail->academicTitle, + 'academicTitle' => $this->userDetail->academicTitle ?? null, 'contactPhone' => $this->pivot->service_phone, 'contactEmail' => $this->pivot->service_email, 'cabinet' => $this->pivot->cabinet, - 'photo' => $this->userDetail->photo, + 'photo' => $this->userDetail->photo ?? null, 'position' => $this->pivot->position, ]; } diff --git a/app/Services/App/Breadcrumb/BreadcrumbService.php b/app/Services/App/Breadcrumb/BreadcrumbService.php index e499abe..170eb75 100644 --- a/app/Services/App/Breadcrumb/BreadcrumbService.php +++ b/app/Services/App/Breadcrumb/BreadcrumbService.php @@ -19,14 +19,19 @@ class BreadcrumbService // Пытаемся найти index-версию маршрута $indexRouteName = $this->getIndexRouteName($routeName); + if ($indexRouteName === null) { return null; } - // Используем index-версию, если она существует - $finalRouteName = Route::has($indexRouteName) ? $indexRouteName : $routeName; + // Используем index-версию, если она существует + $finalRouteName = Route::has($indexRouteName) ? $indexRouteName : null; + + if ($finalRouteName === null) { + return null; + } $path = $this->generatePath($finalRouteName); @@ -72,6 +77,7 @@ class BreadcrumbService // Заменяем последнюю часть на index $parts[count($parts) - 1] = 'index'; + return implode('.', $parts); } } \ No newline at end of file diff --git a/app/Services/App/Seo/SeoPageProvider.php b/app/Services/App/Seo/SeoPageProvider.php index 1e2e7a2..51e3ca1 100644 --- a/app/Services/App/Seo/SeoPageProvider.php +++ b/app/Services/App/Seo/SeoPageProvider.php @@ -24,7 +24,7 @@ class SeoPageProvider fn() => Page::where('path', $path)->first() ); - return $page->seo?->toArray(); // Предполагается, что у модели Page есть поле `seo` (JSON или массив) + return $page->seo?->toArray(); } private function getCurrentPath(): string