PHP code example of wsmallnews / filament-nestedset
1. Go to this page and download the library: Download wsmallnews/filament-nestedset 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/ */
wsmallnews / filament-nestedset example snippets
return [
/**
* Restrict deletion of nodes with children
*/
'allow_delete_parent' => false,
/*
* Restrict deletion of root nodes, even if 'allow_delete_parent' is true, root nodes can be deleted.
*/
'allow_delete_root' => false,
/**
* create action show parent select field
*/
'create_action_modal_show_parent_select' => true,
/**
* Display the "Create Child Node" action in each row (if 'create_action_modal_show_parent_select' is false, This field should be set to true)
*/
'show_create_child_node_action_in_row' => true,
/**
* By default, the CSS file will be automatically loaded globally. If you use a filament custom theme, you can disable the automatic loading of the CSS file
*/
'autoload_assets' => true,
];
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Kalnoy\Nestedset\NodeTrait;
...
class YouModel extends Model
{
use NodeTrait;
...
}
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('your_model_table', function (Blueprint $table) {
...
$table->nestedSet();
...
});
}
};
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::table('your_model_table', function (Blueprint $table) {
$table->nestedSet();
});
}
};
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static string $recordTitleAttribute = 'name';
...
}
namespace App\Filament\Pages;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\HtmlString;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
public function getRecordLabel(Model $item): HtmlString | string
{
return $item->{static::getRecordTitleAttribute()} ?? ' ';
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected function schema(array $arguments): array
{
return [
//
];
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected function createSchema(array $arguments): array
{
return [
//
];
}
protected function editSchema(array $arguments): array
{
return [
//
];
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static ?string $emptyLabel = 'no test data';
protected static ?string $emptyTipLabel = 'no test data available';
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static ?int $level = 3;
// Alternatively, you may use the getLevel() to define a dynamic level
public function getLevel(): ?int
{
return static::$level;
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected function infolistSchema(): array
{
return [];
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static string $infolistHiddenEndpoint = 'lg';
...
}
namespace App\Filament\Pages;
use Filament\Support\Enums\Alignment;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static Alignment $infolistAlignment = Alignment::Left;
...
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
...
class YouModel extends Model
{
...
public function getScopeAttributes(): array
{
return ['team_id', ...];
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static bool $isScopedToTenant = false;
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
protected static ?string $tabFieldName = 'type';
public function getTabs(): array
{
return [
'web' => Tab::make()->label('Website Navigation'),
'shop' => Tab::make()->label('Shop Navigation')
];
}
...
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
...
class YouModel extends Model
{
...
public function getScopeAttributes(): array
{
return ['type', ...];
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
public function nestedScoped()
{
return ['category_id' => 5];
}
...
}
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
...
class YouModel extends Model
{
...
public function getScopeAttributes(): array
{
return ['category_id', ...];
}
...
}
namespace App\Filament\Pages;
use Wsmallnews\FilamentNestedset\Pages\NestedsetPage;
class Test extends NestedsetPage
{
...
public function getEloquentQuery($query)
{
return $query->where('status', 'normal');
}
...
}
namespace App\Livewire\Components;
use App\Models\Category;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\HtmlString;
use Livewire\Attributes\On;
use Wsmallnews\FilamentNestedset\Livewire\Components\Nestedset;
use function Filament\Support\generate_href_html;
class Categories extends Nestedset
{
public function getRecordLabel(Model $record): HtmlString | string
{
return $record->name_label;
}
public function getHasActive(Model $record): bool
{
return $record->has_active;
}
#[On('sn-filament-nestedset-leaf-click')]
public function clickCategory($recordId)
{
$this->categoryId = $recordId;
}
// ... or
public function getRecordUrl(Model $record): string | HtmlString | null
{
return generate_href_html(route('categories.show', $record->id), false);
}
public function getNestedset()
{
return Category::normal()->defaultOrder()
->get()->toTree();
}
}