From e8cdba4fd391f27c2715d693df54aaa6e9be388b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=9Cmit=20Tun=C3=A7?= Date: Thu, 1 Jan 2026 11:13:45 +0300 Subject: [PATCH] Refactor Product and Category Tables for Enhanced Localization: Updated the ProductCategoriesTable and ProductsTable to utilize the getStateUsing method for retrieving translated titles, improving localization support. Enhanced the search functionality to filter by translations, ensuring consistent display of titles across different languages. Additionally, modified the menu-item Blade component to include featured products, improving the layout and user experience. --- .../Tables/ProductCategoriesTable.php | 13 +++-- .../Products/Tables/ProductsTable.php | 16 ++++-- .../components/front/menu-item.blade.php | 53 +++++++++++-------- 3 files changed, 52 insertions(+), 30 deletions(-) diff --git a/app/Filament/Admin/Resources/ProductCategories/Tables/ProductCategoriesTable.php b/app/Filament/Admin/Resources/ProductCategories/Tables/ProductCategoriesTable.php index 05f81dd..d03bcc4 100644 --- a/app/Filament/Admin/Resources/ProductCategories/Tables/ProductCategoriesTable.php +++ b/app/Filament/Admin/Resources/ProductCategories/Tables/ProductCategoriesTable.php @@ -18,14 +18,19 @@ class ProductCategoriesTable ->columns([ TextColumn::make('title') ->label(__('product_categories.title')) - ->formatStateUsing(fn ($state, $record) => $record->translate('title')) - ->searchable() - ->sortable(), + ->getStateUsing(fn ($record) => $record->translate('title')) + ->searchable(query: function ($query, $search) { + return $query->whereHas('translations', function ($q) use ($search) { + $q->where('field_name', 'title') + ->where('field_value', 'like', "%{$search}%") + ->where('language_code', app()->getLocale()); + }); + }), TextColumn::make('slug') ->label(__('product_categories.slug')) ->searchable(), TextColumn::make('parent.title') - ->formatStateUsing(fn ($state, $record) => $record->parent?->translate('title')) + ->getStateUsing(fn ($record) => $record->parent?->translate('title')) ->label(__('product_categories.parent')), TextColumn::make('sort_order') ->label(__('product_categories.sort_order')) diff --git a/app/Filament/Admin/Resources/Products/Tables/ProductsTable.php b/app/Filament/Admin/Resources/Products/Tables/ProductsTable.php index 76f2d8e..688d2df 100644 --- a/app/Filament/Admin/Resources/Products/Tables/ProductsTable.php +++ b/app/Filament/Admin/Resources/Products/Tables/ProductsTable.php @@ -18,12 +18,18 @@ class ProductsTable return $table ->columns([ ImageColumn::make('hero_image') - ->label(__('products.hero_image')), + ->label(__('products.hero_image')) + ->disk('public'), TextColumn::make('title') ->label(__('products.title')) - ->formatStateUsing(fn ($state, $record) => $record->translate('title')) - ->searchable() - ->sortable(), + ->getStateUsing(fn ($record) => $record->translate('title')) + ->searchable(query: function ($query, $search) { + return $query->whereHas('translations', function ($q) use ($search) { + $q->where('field_name', 'title') + ->where('field_value', 'like', "%{$search}%") + ->where('language_code', app()->getLocale()); + }); + }), TextColumn::make('type') ->label(__('products.type')) ->badge() @@ -38,7 +44,7 @@ class ProductsTable default => $state, }), TextColumn::make('category.title') - ->formatStateUsing(fn ($state, $record) => $record->category?->translate('title')) + ->getStateUsing(fn ($record) => $record->category?->translate('title')) ->label(__('products.category')), ToggleColumn::make('is_active') ->label(__('products.is_active')), diff --git a/resources/views/components/front/menu-item.blade.php b/resources/views/components/front/menu-item.blade.php index c007895..52d4acc 100644 --- a/resources/views/components/front/menu-item.blade.php +++ b/resources/views/components/front/menu-item.blade.php @@ -6,9 +6,11 @@ $categories = []; $services = []; + $featuredProducts = []; if($isMegaMenu) { $categories = \App\Models\ProductCategory::where('is_active', true)->orderBy('sort_order')->get(); - $services = \App\Models\Product::where('is_active', true)->orderBy('sort_order')->limit(10)->get(); + $services = \App\Models\Product::where('is_active', true)->where('type', 'service')->orderBy('sort_order')->limit(10)->get(); + $featuredProducts = \App\Models\Product::where('is_active', true)->where('type', '!=', 'service')->inRandomOrder()->limit(6)->get(); } @endphp @@ -18,37 +20,46 @@