في هذا الدرس سوف نتعرف على بعض الإعدادات التي تطبق بشكل 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']; } }