id | title | author | body |
---|---|---|---|
20 | Placeat et doloremque ipsa omnis commodi. | D'angelo | Aut vero est sit perferendis. Ratione et doloribus... |
19 | Debitis ut voluptatum laudantium amet eos doloremque. | D'angelo | Quos ab quasi facere corporis unde nihil. Rerum su... |
18 | Voluptatem a aut minima voluptatem ea tenetur. | Gwendolyn | Neque eos qui ab et. Dolores impedit non est omnis... |
17 | Ducimus quis repellat velit magnam deserunt. | Gwendolyn | Dicta eaque eveniet voluptas. Quam sint accusantiu... |
16 | Animi temporibus ad recusandae quo harum quis voluptas. | Sadie | Deleniti ab eaque reiciendis placeat aut error. Vo... |
15 | Occaecati quasi omnis voluptates. | Sadie | Eum aut suscipit aperiam ut et ut officia ut. Sit... |
14 | Hic excepturi fugiat aliquam ratione officiis quia occaecati eos. | Mervin | Quod sint repellat est illo quo iusto enim. Qui fu... |
13 | Ipsam recusandae et expedita aliquam molestiae. | Mervin | Neque qui ipsam ratione at id est dolores. Volupta... |
12 | Praesentium explicabo ut dicta qui ab non dolore. | Lamont | Veritatis nihil aspernatur nemo qui assumenda assu... |
11 | Harum adipisci deleniti delectus aliquid sit commodi. | Lamont | Distinctio ea occaecati atque quam aut asperiores.... |
tot. 20
module structure
laravel/
├─ app/
│ ├─ Modules/
│ │ ├─ Demo/
│ │ │ ├─ Livewire/
│ │ │ │ ├─ Articles/
│ │ │ │ │ ├─ views/
│ │ │ │ │ │ ├─ articles_edit.blade.php
│ │ │ │ │ │ ├─ articles_table.blade.php
│ │ │ │ │ │ ├─ articles_view.blade.php
│ │ │ │ │ ├─ ArticlesEdit.php
│ │ │ │ │ ├─ ArticlesTable.php
│ │ │ │ │ ├─ ArticlesView.php
│ │ │ │ ├─ routes.php
route
Livewire/routes.php
Route::get('demo/articles', ArticlesTable::class)
->middleware(['web'])
->name('demo.articles')
->crumbs(fn ($crumbs) => $crumbs->parent('demo')->push('Articles', route('demo.articles')));
component
Livewire/Articles/ArticlesTable.php
<?php
namespace App\Modules\Demo\Livewire\Articles;
use App\Modules\Demo\Models\Author;
use App\Modules\Demo\Models\Article;
use Zofe\Rapyd\Traits\WithDataTable;
use Livewire\Component;
class ArticlesTable extends Component
{
use WithDataTable;
public $search;
public $author_id;
public function updatedAuthorId()
{
$this->resetPage();
}
public function updatedSearch()
{
$this->resetPage();
}
public function getDataSet()
{
$items = Article::ssearch($this->search);
if ($this->author_id) {
$items = $items->where('author_id','=',$this->author_id);
}
return $items = $items
->orderBy($this->sortField,$this->sortAsc ?'asc':'desc')
->paginate($this->perPage)
;
}
public function render()
{
$items = $this->getDataSet();
$authors = Author::all()->pluck('firstname','id')->toArray();
return view('demo::Articles.views.articles_table',
compact('items','authors')
)->layout('demo::admin');
}
}
view
Livewire/Articles/views/articles_table.blade.php
<x-rpd::card>
<x-rpd::table
title="List Articles"
:items="$items"
>
<x-slot name="filters">
<x-rpd::input col="col" debounce="350" model="search" placeholder="search..." />
<x-rpd::select col="col" lazy model="author_id" :options="$authors" placeholder="author..."
addempty />
</x-slot>
<x-slot name="buttons">
<a href="{{ route('demo.articles') }}" class="btn btn-outline-dark">reset</a>
<a href="{{ route('demo.articles.edit') }}" class="btn btn-outline-primary">add</a>
</x-slot>
<table class="table">
<thead>
<tr>
<th>
<x-rpd::sort model="id" label="id" />
</th>
<th>title</th>
<th>author</th>
<th>body</th>
</tr>
</thead>
<tbody>
@foreach ($items as $article)
<tr>
<td>
<a href="{{ route('demo.articles.view',$article->id) }}">{{ $article->id }}</a>
</td>
<td>{{ $article->title }}</td>
<td>{{ $article->author->firstname }}</td>
<td>{{ Str::limit($article->body,50) }}</td>
</tr>
@endforeach
</tbody>
</table>
</x-rpd::table>
</x-rpd::card>