PHP code example of doriiaan / filament-astrotomic
1. Go to this page and download the library: Download doriiaan/filament-astrotomic library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
doriiaan / filament-astrotomic example snippets
'locales' => [
'uk',
'en',
],
use Doriiaan\FilamentAstrotomic\FilamentAstrotomicPlugin;
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugins([
FilamentAstrotomicPlugin::make(),
]);
}
use Doriiaan\FilamentAstrotomic\Resources\Concerns\ResourceTranslatable;
use Filament\Resources\Resource;
class CourseResource extends Resource
{
use ResourceTranslatable;
// ...
}
use Doriiaan\FilamentAstrotomic\Resources\Pages\ListTranslatable;
use Filament\Resources\Pages\ListRecords;
class ListProducts extends ListRecords
{
use ListTranslatable;
// ...
}
use Doriiaan\FilamentAstrotomic\Resources\Pages\CreateTranslatable;
use Filament\Resources\Pages\CreateRecord;
class CreateProduct extends CreateRecord
{
use CreateTranslatable;
// ...
}
use Doriiaan\FilamentAstrotomic\Resources\Pages\EditTranslatable;
use Filament\Resources\Pages\EditRecord;
class EditProduct extends EditRecord
{
use EditTranslatable;
// ...
}
use Doriiaan\FilamentAstrotomic\Resources\Pages\ViewTranslatable;
use Filament\Resources\Pages\ViewRecord;
class ViewProduct extends ViewRecord
{
use ViewTranslatable;
// ...
}
use CactusGalaxy\FilamentAstrotomic\Resources\Concerns\ResourceTranslatable;
use Filament\Resources\Resource;
class CourseResource extends Resource
{
use ResourceTranslatable;
// ...
public static function getTranslatableLocales(): array
{
return ['uk', 'en'];
}
}
namespace App\Filament\Admin\Resources\Courses\Schemas;
use Doriiaan\FilamentAstrotomic\Schemas\Components\TranslatableTabs;
use Doriiaan\FilamentAstrotomic\TranslatableTab;
use Filament\Forms\Components\Textarea;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class CourseForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
TranslatableTabs::make()
->localeTabSchema(fn (TranslatableTab $tab) => [
TextInput::make($tab->makeName('title'))
->
TranslatableTabs::make()
// plain syntax
->makeNameUsing(fn (string $name, string $locale) => "{$name}:{$locale}")
// or use an alias
->makeNameUsingPlainSyntax()
// ..
use App\Filament\Admin\Resources\Courses\CourseResource;
use App\Models\Course;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class CoursesTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('translation.title'),
])
->filters([
//
])
->recordActions([
EditAction::make()->mutateRecordDataUsing(function (Course $record, array $data) {
return CourseResource::mutateTranslatableData($record, $data);
})->mutateDataUsing(function (Course $record, array $data) {
$record->unsetRelation('translation');
return $data;
}),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}
namespace App\Filament\Admin\Resources\Categories\Schemas;
use Doriiaan\FilamentAstrotomic\Schemas\Components\TranslatableTabs;
use Doriiaan\FilamentAstrotomic\TranslatableTab;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;
class CategoryForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
TranslatableTabs::make()
->localeTabSchema(fn (TranslatableTab $tab) => [
TextInput::make($tab->makeName('name'))
->
namespace App\Filament\Admin\Resources\Courses\Schemas;
use App\Filament\Admin\Resources\Categories\CategoryResource;
use App\Filament\Admin\Resources\Categories\Schemas\CategoryForm;
use App\Models\Category;
use Filament\Forms\Components\Select;
use Filament\Schemas\Schema;
class CourseForm
{
public static function configure(Schema $schema): Schema
{
return $schema
->components([
Select::make('category_id')
-> ->createOptionUsing(function (array $data) {
$optionRecord = Category::create($data);
return $optionRecord->id;
})
// Configure edit action - https://filamentphp.com/docs/4.x/forms/select#editing-the-selected-option-in-a-modal
->editOptionModalHeading('Edit')
->editOptionForm(fn (Schema $schema) => CategoryForm::configure($schema))
->fillEditOptionActionFormUsing(function (string $state) {
if (!$state) {
return [];
}
$optionRecord = Category::find($state);
return CategoryResource::mutateTranslatableData($optionRecord, $optionRecord->attributesToArray());
})
->updateOptionUsing(function (array $data, string $state) {
$optionRecord = Category::find($state);
$optionRecord->update($data);
return $optionRecord->id;
})
]);
}
}
TextColumn::make('translation.name'),
namespace App\Filament\Admin\Resources\Courses\Tables;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Table;
class CoursesTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('translations.title')
->limitList(1)
->label('Title')
->searchable(query: function ($query, string $search) {
$query->whereTranslationLike('title', '%'.$search.'%');
}),
])
->filters([
//
])
->recordActions([
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
DeleteBulkAction::make(),
]),
]);
}
}