diff --git a/app/Http/Controllers/SearchController.php b/app/Http/Controllers/SearchController.php index 861d672..b2e2655 100644 --- a/app/Http/Controllers/SearchController.php +++ b/app/Http/Controllers/SearchController.php @@ -9,7 +9,6 @@ use App\Http\Resources\EventSearchResource; use App\Http\Resources\FacultySearchResource; use App\Http\Resources\PageSearchResource; use App\Http\Resources\PostSearchResource; -use App\Http\Resources\StaticPageSearchResource; use App\Http\Resources\UserSearchResource; use App\Models\AdditionalEducation; use App\Models\EducationalGroup; @@ -35,9 +34,9 @@ class SearchController extends Controller EducationalGroup::class => EducationGroupSearchResource::class, EducationalProgram::class => EducationalProgramSearchResource::class, Event::class => EventSearchResource::class, - AdditionalEducation::class => AdditionalEducationSearchResource::class, - User::class => UserSearchResource::class, - Faculty::class => FacultySearchResource::class, + AdditionalEducation::class => AdditionalEducationSearchResource::class, //?? + User::class => UserSearchResource::class, //?? + Faculty::class => FacultySearchResource::class, //?? ]; public function index(Request $request) { diff --git a/app/Http/Controllers/StaticSearchController.php b/app/Http/Controllers/StaticSearchController.php index 8848b9c..7398a6a 100644 --- a/app/Http/Controllers/StaticSearchController.php +++ b/app/Http/Controllers/StaticSearchController.php @@ -12,10 +12,7 @@ class StaticSearchController extends Controller public function search(Request $request) { return app(StaticFileSearch::class) - ->search( - $request->input('search'), - $request->input('page', 1) - ); + ->search($request); } public function getCategories() diff --git a/app/Http/Resources/AdditionalEducationSearchResource.php b/app/Http/Resources/AdditionalEducationSearchResource.php index af8cdaf..b5c26a0 100644 --- a/app/Http/Resources/AdditionalEducationSearchResource.php +++ b/app/Http/Resources/AdditionalEducationSearchResource.php @@ -14,6 +14,10 @@ class AdditionalEducationSearchResource extends JsonResource */ public function toArray(Request $request): array { - return parent::toArray($request); + return [ + 'id' => $this->id, + 'title' => $this->title, + 'slug' => $this->slug, + ]; } } diff --git a/app/Http/Resources/EventSearchResource.php b/app/Http/Resources/EventSearchResource.php index 8ea9663..8fece5d 100644 --- a/app/Http/Resources/EventSearchResource.php +++ b/app/Http/Resources/EventSearchResource.php @@ -14,6 +14,12 @@ class EventSearchResource extends JsonResource */ public function toArray(Request $request): array { - return parent::toArray($request); + return [ + 'id' => $this->id, + 'title' => $this->title, + 'slug' => $this->slug, + 'event_date_start' => $this->event_date_start, + 'event_time_start' => $this->event_time_start + ]; } } diff --git a/app/Http/Resources/FacultySearchResource.php b/app/Http/Resources/FacultySearchResource.php index a394f9c..eccc9ff 100644 --- a/app/Http/Resources/FacultySearchResource.php +++ b/app/Http/Resources/FacultySearchResource.php @@ -14,6 +14,10 @@ class FacultySearchResource extends JsonResource */ public function toArray(Request $request): array { - return parent::toArray($request); + return [ + 'id' => $this->id, + 'title' => $this->title, + 'slug' => $this->slug, + ]; } } diff --git a/app/Http/Resources/UserSearchResource.php b/app/Http/Resources/UserSearchResource.php index 3cd9da9..325b065 100644 --- a/app/Http/Resources/UserSearchResource.php +++ b/app/Http/Resources/UserSearchResource.php @@ -14,6 +14,10 @@ class UserSearchResource extends JsonResource */ public function toArray(Request $request): array { - return parent::toArray($request); + return [ + 'id' => $this->id, + 'name' => $this->name, + 'slug' => $this->slug, + ]; } } diff --git a/app/Services/Filament/Services/HtmlContentExtractorService.php b/app/Services/Filament/Services/HtmlContentExtractorService.php new file mode 100644 index 0000000..954876f --- /dev/null +++ b/app/Services/Filament/Services/HtmlContentExtractorService.php @@ -0,0 +1,26 @@ +first('.vikon-content'); + $breadcrumb = $content->first('.row'); + $content->firstInDocument('.row')->remove(); + + return [$content->html(), $breadcrumb->html()] ?? null; + } + + +} \ No newline at end of file diff --git a/app/Services/Filament/Services/StaticFileSearch.php b/app/Services/Filament/Services/StaticFileSearch.php index 58fdb0b..0b0cdad 100644 --- a/app/Services/Filament/Services/StaticFileSearch.php +++ b/app/Services/Filament/Services/StaticFileSearch.php @@ -2,7 +2,7 @@ namespace App\Services\Filament\Services; -use Illuminate\Http\Client\Request; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; @@ -17,14 +17,19 @@ class StaticFileSearch const CACHE_TTL = 86400; // 24 часа const PER_PAGE = 10; // Количество результатов на страницу - public function search(string $query): array + public function search(Request $request): array { + $query = $request->input('search'); + $category = $request->input('category'); + $page = request()->input('page', 1); + + if ($query === null) { return [ - 'data' => null + 'data' => [] ]; } - $page = request()->input('page', 1); + try { $index = $this->getIndex(); $results = []; @@ -40,7 +45,21 @@ class StaticFileSearch ]; } } - return $this->paginateResults($results, $page); + + $categories = array_values(array_unique(array_filter(array_column($results, 'category')))); + + + if ($category !== null) { + $results = array_filter($results, function($item) use ($category) { + return $item['category'] === $category; + }); + + // Переиндексировать массив + $results = array_values($results); + } + + + return $this->paginateResults($results, $page, $categories); } catch (\Exception $e) { Log::error('Search error: ' . $e->getMessage()); return [ @@ -55,7 +74,7 @@ class StaticFileSearch } } - protected function paginateResults(array $results, int $page): array + protected function paginateResults(array $results, int $page, ?array $categories): array { $total = count($results); $lastPage = max(1, ceil($total / self::PER_PAGE)); @@ -71,7 +90,8 @@ class StaticFileSearch 'total' => $total, 'per_page' => self::PER_PAGE, 'last_page' => $lastPage - ] + ], + 'categories' => $categories ]; } @@ -94,9 +114,10 @@ class StaticFileSearch foreach ($iterator as $file) { if ($file->isFile() && $this->isHtmlFile($file)) { - $content = file_get_contents($file->getPathname()); + $html = file_get_contents($file->getPathname()); + [$content, $breadcrumb] = app(HtmlContentExtractorService::class)->getContent($html); if ($content !== false) { - $breadcrumb = app(BreadcrumbFinderService::class)->isSameCategory($content); + $breadcrumb = app(BreadcrumbFinderService::class)->isSameCategory($breadcrumb); $text = $this->normalizeText(strip_tags($content)); $index[$file->getPathname()] = [ 'title' => $this->getFirstH1Content($content), diff --git a/public/logos/ntspi.svg b/public/logos/ntspi.svg new file mode 100644 index 0000000..336dbdd --- /dev/null +++ b/public/logos/ntspi.svg @@ -0,0 +1,78 @@ + diff --git a/public/logos/ntspi_white.svg b/public/logos/ntspi_white.svg new file mode 100644 index 0000000..de9db77 --- /dev/null +++ b/public/logos/ntspi_white.svg @@ -0,0 +1,78 @@ + diff --git a/resources/js/Navbars/MainPageNavbar.vue b/resources/js/Navbars/MainPageNavbar.vue index b524d8a..ce37127 100644 --- a/resources/js/Navbars/MainPageNavbar.vue +++ b/resources/js/Navbars/MainPageNavbar.vue @@ -96,8 +96,8 @@ export default { headerFilter: false, underSliderHeader: true, logos: { - default: '/logos/white_ntspi_logo.svg', - alternate: '/logos/ntspi-logo.svg', + default: '/logos/ntspi_white.svg', + alternate: '/logos/ntspi.svg', }, } }, @@ -113,7 +113,7 @@ export default { } } - this.headerFilter = this.scrollPosition > 50; + this.headerFilter = this.scrollPosition > 5; }, }, watch: { diff --git a/resources/js/Pages/Page.vue b/resources/js/Pages/Page.vue index 87cdcb9..a506de6 100644 --- a/resources/js/Pages/Page.vue +++ b/resources/js/Pages/Page.vue @@ -6,11 +6,11 @@
{{ match }}
-{{ match }}
-