List Articles

id title author body
20 Autem sit nisi harum ut et modi sunt. Leonie Autem nam saepe quam veniam enim. Laborum eos prov...
19 Quibusdam ipsa omnis suscipit repellat fugit neque. Leonie Possimus veritatis quis et laboriosam dolorem volu...
18 Consequatur occaecati est est distinctio deleniti aut beatae voluptas. Rita Ipsa accusantium rerum exercitationem quo cupidita...
17 Vitae doloremque aspernatur et libero est. Rita Id deleniti est animi molestiae. Voluptas et adipi...
16 Cumque non assumenda debitis soluta numquam sit nihil. Jeffery Modi officiis autem maxime placeat. Magnam et dist...
15 Reprehenderit a blanditiis ab corrupti. Jeffery Sit molestiae quia quod a nesciunt omnis. Sunt rat...
14 Assumenda et hic odio dolores. Torrance Sed est asperiores nihil qui. Quia sed similique q...
13 Quam aut voluptatibus velit eum quia aut. Torrance Perferendis sequi possimus modi vel aspernatur acc...
12 Qui dolorem non culpa recusandae reiciendis nam voluptas. Gilbert Quas est voluptas occaecati inventore qui voluptat...
11 Voluptatum cum illum voluptas accusantium placeat omnis minus. Gilbert Dolorem est dolorem ut culpa aliquid et. Nobis ali...
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="$authorsplaceholder="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>