Articles

Articles

Id Title Author Body
4900
Consequatur dolorum facilis rerum rerum animi perspiciatis. Ettie Et eligendi voluptate quam est vel quae ut. Volupt...
4899
Voluptas ipsam asperiores eligendi et et. Ettie Alias quas explicabo sunt quia asperiores voluptat...
4898
Voluptates aliquam sunt ratione fugiat veritatis. Pete Voluptatibus odio sit commodi soluta aliquid non s...
4897
Labore omnis similique voluptatem et aperiam repudiandae. Pete Ad maiores non quia omnis dolorum quis mollitia mo...
4896
Laboriosam fugit sunt pariatur maxime accusamus. Jayden Illum blanditiis animi laborum. Ut dolorum similiq...
4895
Sunt architecto repellendus quo rerum repellendus beatae enim. Jayden Molestiae consequatur harum repellat magni. Libero...
4894
Repellat quam laborum cumque sapiente nostrum nulla eos. Abigayle Hic non eum autem quia corporis. Dolores necessita...
4893
Error voluptas quis est debitis. Abigayle Similique eius magni ullam quia corrupti qui quae....
4892
Ut dolorum eligendi facilis est dolor excepturi recusandae dolores. Mavis Facilis facilis ipsa pariatur tempora officiis dol...
4891
Fuga est qui dolores non. Mavis Mollitia quam id corporis commodi expedita non ut....
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="$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?