1. Go to this page and download the library: Download tgeorgel/filament-tree 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/ */
tgeorgel / filament-tree example snippets
return [
/**
* Tree model fields
*/
'column_name' => [
'order' => 'order',
'parent' => 'parent_id',
'title' => 'title',
],
/**
* Tree model default parent key
*/
'default_parent_id' => -1,
/**
* Tree model default children key name
*/
'default_children_key_name' => 'children',
];
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use SolutionForest\FilamentTree\Concern\ModelTree;
class ProductCategory extends Model
{
use ModelTree;
protected $fillable = ["parent_id", "title", "order"];
protected $table = 'product_categories';
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use SolutionForest\FilamentTree\Concern\ModelTree;
class ProductCategory extends Model
{
use ModelTree;
protected $fillable = ["parent_id", "title", "order"];
protected $table = 'product_categories';
// Default if you need to override
// public function determineOrderColumnName(): string
// {
// return "order";
// }
// public function determineParentColumnName(): string
// {
// return "parent_id";
// }
// public function determineTitleColumnName(): string
// {
// return 'title';
// }
// public static function defaultParentKey()
// {
// return -1;
// }
// public static function defaultChildrenKeyName(): string
// {
// return "children";
// }
}
namespace App\Filament\Resources\ProductCategoryResource\Pages;
use App\Filament\Resources\ProductCategoryResource;
use App\Filament\Widgets\ProductCategory;
use Filament\Pages\Actions;
use Filament\Resources\Pages\ListRecords;
class ListProductCategories extends ListRecords
{
protected static string $resource = ProductCategoryResource::class;
protected function getActions(): array
{
return [
Actions\CreateAction::make(),
];
}
protected function getHeaderWidgets(): array
{
return [
ProductCategory::class
];
}
}
use Filament\Pages\Actions\CreateAction;
protected function getActions(): array
{
return [
CreateAction::make(),
// SAMPLE CODE, CAN DELETE
//\Filament\Pages\Actions\Action::make('sampleAction'),
];
}
use Filament\Pages\Actions\Action;
protected function getTreeActions(): array
{
return [
Actions\ViewAction::make(),
Actions\EditAction::make(),
Actions\DeleteAction::make(),
];
}
public function getTreeRecordIcon(?\Illuminate\Database\Eloquent\Model $record = null): ?string
{
// default null
return 'heroicon-o-cake';
}
public function getNodeCollapsedState(?\Illuminate\Database\Eloquent\Model $record = null): bool
{
// All tree nodes will be collapsed by default.
return true;
}
public function getTreeRecordTitle(?\Illuminate\Database\Eloquent\Model $record = null): string
{
if (! $record) {
return '';
}
$id = $record->getKey();
$title = $record->{(method_exists($record, 'determineTitleColumnName') ? $record->determineTitleColumnName() : 'title')};
return "[{$id}] {$title}";
}
use Filament\Actions\LocaleSwitcher;
use SolutionForest\FilamentTree\Concern\ModelTree;
use Spatie\Translatable\HasTranslations;
class Category extends Model
{
use HasTranslations;
use TreeModel;
protected $translatable = [
'title',
];
}
use App\Models\Category as TreePageModel;
use SolutionForest\FilamentTree\Concern\TreeRecords\Translatable;
use SolutionForest\FilamentTree\Pages\TreePage as BasePage;
class Category extends BasePage
{
use Translatable;
protected static string $model = TreePageModel::class;
public function getTranslatableLocales(): array
{
return ['en', 'fr'];
}
protected function getActions(): array
{
return [
LocaleSwitcher::make(),
];
}
}