Articles

id title author body
3500 Quam voluptatibus nisi iure dicta deserunt quibusdam et nemo. Gerald Maxime possimus laborum tenetur est. Dolores quo d...
3499 Hic beatae quas ab. Gerald Dicta molestiae odit dicta voluptates nobis doloru...
3498 Tempore et placeat illum velit cupiditate nesciunt vel dolor. Dortha Molestias deleniti qui consectetur vel. Dolor occa...
3497 Sed et qui fugiat minima sunt. Dortha Iste sed in earum minus distinctio unde. Vel sunt...
3496 Maxime id animi dicta et pariatur laboriosam. Isom Et quia deserunt magnam illo consequuntur ut beata...
3495 Aut qui quae neque quidem accusantium. Isom Nihil maxime sit cumque dolorem rerum temporibus....
3494 Aspernatur vero vitae a vel iste. Jaiden Rerum iste quibusdam cumque laboriosam. Ea cumque...
3493 Id tenetur et provident nesciunt expedita. Jaiden Recusandae est consequuntur sint quam. Itaque fugi...
3492 Numquam quia nisi est. Quinton Et rerum atque repellendus saepe et. Aut eveniet e...
3491 Praesentium quas adipisci qui nostrum. Quinton Voluptas alias tenetur dolorum perspiciatis quasi...
tot. 20

module structure

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('demo.articles')));

component

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="$authorsplaceholder="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->idroute="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>

Support
How can I help you today?