| Id | Titolo | Autore | Testo | |
|---|---|---|---|---|
| 3960 | Assumenda maxime ut pariatur quos. | Chanelle | Molestiae corporis explicabo qui quas debitis ut a... | |
| 3959 | Nulla in occaecati omnis aut. | Chanelle | Nihil et aliquam facere officiis dicta animi. Recu... | |
| 3958 | Inventore dolorum qui a est eius velit. | Emerson | Adipisci fuga quo possimus. In natus occaecati ame... | |
| 3957 | Non sed atque et ullam quaerat quae. | Emerson | Cum vel est voluptas et. Rerum incidunt blanditiis... | |
| 3956 | Sed excepturi sunt qui animi voluptas doloribus. | Carol | Et ipsa tempore molestiae sed in at nam dolores. A... | |
| 3955 | Consequuntur temporibus autem laborum pariatur rerum dignissimos sunt. | Carol | Rerum ut molestias accusamus impedit ut. Quae volu... | |
| 3954 | Pariatur ut fugiat quo consequatur nulla quia. | Chyna | Sequi at eaque id qui deleniti harum. Autem ut sed... | |
| 3953 | Maxime nihil eum sunt qui reiciendis molestias. | Chyna | Ut et dolores non iure eaque. Beatae illo sequi ve... | |
| 3952 | Tempore quasi quia qui quo rerum. | Virginie | Iste consectetur consequuntur et pariatur. Cumque... | |
| 3951 | Fugit quam eveniet ipsum aut sequi fugit. | Virginie | Et voluptate eos omnis est aut. Vel et molestiae q... |
tot. 20
struttura del modulo
demo-module/
├─ Livewire/
│ ├─ Home.php
│ ├─ ArticlesTable.php
│ ├─ ArticlesView.php
│ └─ ArticlesEdit.php
├─ Views/
│ ├─ home.blade.php
│ ├─ articles_table.blade.php
│ ├─ articles_view.blade.php
│ ├─ articles_edit.blade.php
│ ├─ menu.blade.php
│ └─ frontend_menu.blade.php
├─ Models/ Article.php, Author.php
├─ Database/ Migrations/, Seeders/
├─ config.php layout, menu entry
├─ routes.php
└─ DemoModuleServiceProvider.php
route
routes.php
Route::get('demo/articles', ArticlesTable::class)
->middleware(['web'])
->name('demo.articles')
->crumbs(fn ($crumbs) => $crumbs->parent('demo')->push(__('Articles'), route_lang('demo.articles')));
componente
Livewire/ArticlesTable.php
<?php
namespace App\Modules\Demo\Livewire;
use App\Modules\Demo\Models\Article;
use App\Modules\Demo\Models\Author;
use Livewire\Component;
use Zofe\Rapyd\Traits\WithDataTable;
class ArticlesTable extends Component
{
use WithDataTable;
public string $search = '';
public ?int $author_id = null;
public function updatedSearch(): void
{
$this->resetPage();
}
public function updatedAuthorId(): void
{
$this->resetPage();
}
public function getDataSet()
{
return Article::ssearch($this->search)
->with('author')
->when($this->author_id, fn ($q) => $q->where('author_id', $this->author_id))
->orderBy($this->sortField, $this->sortAsc ? 'asc' : 'desc')
->paginate($this->perPage);
}
public function render()
{
return view('demo::articles_table', [
'items' => $this->getDataSet(),
'authors' => Author::query()->orderBy('firstname')->pluck('firstname', 'id')->toArray(),
])->layout('layout::admin');
}
}
view
Views/articles_table.blade.php
<x-rpd::card>
<x-rpd::table title="Articles" :items="$items">
<x-slot name="filters">
<x-rpd::input col="col" debounce="350" model="search" placeholder="search..." />
<x-rpd::select col="col-3" model="author_id" :options="$authors" placeholder="author..." addempty />
</x-slot>
<x-slot name="buttons">
<x-rpd::button route="demo.articles" color="outline-dark" label="Reset" />
<x-rpd::button route="demo.articles.edit" color="outline-primary" label="Add" />
</x-slot>
<table class="table">
<thead>
<tr>
<th><x-rpd::sort model="id" label="Id" /></th>
<th><x-rpd::sort model="title" label="Title" /></th>
<th>{{ __('Author') }}</th>
<th>{{ __('Body') }}</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach ($items as $article)
<tr>
<td><x-rpd::nav-link :label="$article->id" route="demo.articles.view" :params="$article->id" /></td>
<td>{{ $article->title }}</td>
<td>{{ $article->author?->firstname }}</td>
<td>{{ Str::limit(strip_tags($article->body), 50) }}</td>
<td class="text-end"><x-rpd::icon name="edit" route="demo.articles.edit" :params="$article->id" /></td>
</tr>
@endforeach
</tbody>
</table>
</x-rpd::table>
</x-rpd::card>