Global Search in Multiple Resources

Global Search in Multiple Resources

2024-10-16 وقت القراءه : 2 دقائق

في هذا الدرس سوف نتعرف على بعض الإعدادات التي تطبق بشكل global على لوحة التحكم، على سبيل المثال إذا كنا نريد إضافة global search

لتطبيق ذلك، نذهب لأي resource نريد أن نبحث بداخله، ونضيف الدالة $recordTitleAttribute ومن ثم نمرر إسم الحقل فإذا كنا نريد البحث عن اسم مستخدم معين نمرر الحقل name

class UserResource extends Resource
{
    protected static ?string $model = User::class;
    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

    protected static ?string $recordTitleAttribute = 'name';
}

هنا يظهر input بوكس بالأعلى، ويظهر في جميع الصفحات يمكن من خلاله البحث عن اسم user معين.

أما إذا كنا نريد البحث في أكثر من model مثلا للبحث أيضا عن إسم منتج معين، فيجب إضافة الدالة recordTitleAttribute للـ ProductResource

class ProductResource extends Resource
{
    protected static ?string $model = Product::class;
    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

    protected static ?string $recordTitleAttribute = 'name';
}

كما نلاحظ أنه تمت عملية البحث في الـ User Model, Product Model

وإذا إردنا ان يتم البحث أيضا في Voucher Model حسب code

class VoucherResource extends Resource
{
    protected static ?string $model = Voucher::class;
    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

    protected static ?string $recordTitleAttribute = 'code';
}


كذلك يمكن البحث في أكثر من حقل، على سبيل المثال في User Model نريد ان يتم البحث في حقلي name, email

لتحديد الحقول نحتاج لإضافة الدالة getGloballySearchableAttributes في UserResource وهي تأخذ مصفوفة من الحقول

public static function getGloballySearchableAttributes() :array
{
    return ['name', 'email'];
}


صفحة UserResource

<?php
namespace App\Filament\Resources;

use App\Filament\Resources\UserResource\Pages;
use App\Filament\Resources\UserResource\RelationManagers;
use App\Models\User;
use Filament\Forms;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletingScope;


class UserResource extends Resource
{
    protected static ?string $model = User::class;
    protected static ?string $recordTitleAttribute = 'name';
    protected static ?string $navigationIcon = 'heroicon-o-rectangle-stack';

    public static function form(Form $form): Form
    {
        return $form
            ->schema([
                Forms\Components\TextInput::make('name')
                    ->required(),
                Forms\Components\TextInput::make('email')
                    ->email()
                    ->unique()
                    ->required(),
            ]);
    }

    public static function table(Table $table): Table
    {
        return $table
            ->columns([
                Tables\Columns\TextColumn::make('id')
                    ->sortable()
                    ->label('ID'),
                Tables\Columns\TextColumn::make('name')->sortable(),
                Tables\Columns\TextColumn::make('email')->sortable(),
                Tables\Columns\TextColumn::make('created_at')
                    ->date('d/m/Y H:i')
                    ->sortable(),
            ])
            ->defaultSort('id','desc')
            ->filters([
                //
            ])
            ->actions([
                Tables\Actions\EditAction::make(),
            ])
            ->bulkActions([
//                Tables\Actions\BulkActionGroup::make([
//                    Tables\Actions\DeleteBulkAction::make(),
//                ]),
            ]);
    }


    public static function getRelations(): array
    {
        return [
            //
        ];
    }


    public static function getPages(): array
    {
        return [
            'index' => Pages\ListUsers::route('/'),
            //'create' => Pages\CreateUser::route('/create'),
            'edit' => Pages\EditUser::route('/{record}/edit'),
        ];
    }


    public static function canCreate() :bool
    {
        return false;
    }


    public static function canDelete(Model $user) :bool
    {
        return false;
    }


    public static function canDeleteAny() :bool
    {
        return false;
    }


    public static function getGloballySearchableAttributes() :array
    {
        return ['name', 'email'];
    }
}


إضافة تعليق
Loading...