Articles

Id Title Author Body
27020 Sed aut autem error molestiae esse. Jayson Quis autem et fugit aliquid odit sed quis. Et aute...
27019 Hic sequi est autem facere ratione doloribus. Jayson Maiores nihil suscipit expedita sint perspiciatis....
27018 Aut atque labore porro minus. Millie Dolores vel ipsum esse. Et nesciunt nemo officia o...
27017 Itaque minima eos voluptatem aliquid saepe omnis. Millie Eos est accusamus veniam accusamus. Dolorum dolore...
27016 Aut necessitatibus ut incidunt quos omnis. Megane Hic earum consectetur neque voluptas in totam iste...
27015 Autem labore ex eius voluptatem dolores nostrum aperiam et. Megane Reiciendis ipsam aliquid qui. Laudantium nobis cul...
27014 Ad velit aliquid quaerat repellendus exercitationem et esse. Germaine Debitis vero aut quo tempora consectetur porro. Cu...
27013 Numquam vero veritatis animi. Germaine Et sint dolorem cum. Ipsum aut et ut. Optio aut ea...
27012 Nobis dolores unde sunt odit distinctio quis. Garfield Modi consequatur laudantium iste quod omnis illum...
27011 Ut laborum ipsam et ipsa quia aut veniam. Garfield Voluptates animi officiis ipsa velit. Sequi necess...
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_lang('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="$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>

Support
How can I help you today?