Tabulka
Vzory a recepty
Hotové receptury sloupců — buňky, které aplikace pořád staví znovu, napsané jednou.
Na této stránce
Tabulka uživatelů s avatarem
$table->columns([ StackedColumn::make('user') ->avatar('avatar_url') ->primary('name') ->secondary('email') ->circular() ->searchable() ->searchColumns(['name', 'email']), BadgeColumn::make('role') ->colors(['primary' => 'admin', 'success' => 'editor', 'gray' => 'viewer']), TextColumn::make('department.name') ->sortable() ->searchable(), TextColumn::make('posts.count') ->label('Posts') ->sortable() ->alignCenter(), TextColumn::make('last_login') ->since() ->sortable() ->textSize('sm') ->textColor('gray'), BooleanColumn::make('is_active'),]);
Finanční tabulka
$table->columns([ TextColumn::make('number') ->searchable() ->fontFamily('mono'), TextColumn::make('client.name') ->searchable() ->sortable(), TextColumn::make('issued_at') ->date('d.m.Y') ->sortable(), TextColumn::make('due_at') ->date('d.m.Y'), TextColumn::make('total') ->money('CZK') ->sortable() ->alignRight() ->weight('bold') ->summarize('sum', 'Total'), BadgeColumn::make('status') ->colors([ 'draft' => 'gray', 'sent' => 'warning', 'paid' => 'success', 'overdue' => 'danger', ]), PollColumn::make('payment_status') ->intervalSeconds(30) ->badge() ->colors(['success' => 'received', 'warning' => 'pending', 'gray' => 'none']) ->pollWhile(fn ($state) => $state === 'pending'),]);
Tabulka nástěnky úkolů
$table->columns([ SelectColumn::make('status') ->options([ 'todo' => '📋 To Do', 'in_progress' => '🔄 In Progress', 'review' => '👀 Review', 'done' => '✅ Done', ]), TextColumn::make('title') ->searchable() ->weight('semibold') ->description(fn ($r) => Str::limit($r->body, 60)) ->actionUrl(fn ($r) => route('tasks.show', $r)), StackedColumn::make('assignee') ->avatar('assignee.avatar_url') ->primary('assignee.name') ->circular() ->avatarSize('sm'), BadgeColumn::make('priority') ->colors(['danger' => 'high', 'warning' => 'medium', 'gray' => 'low']) ->icons(['arrow-up' => 'high', 'minus' => 'medium', 'arrow-down' => 'low']), TextColumn::make('due_at') ->date('d.m.') ->textColor('gray') ->textSize('sm'),]);
Vlastní třída sloupce
Když buňku, kterou potřebujete, nenakreslí žádná fluent metoda dodávaných sloupců, napište třídu sloupce a její pohled:
php artisan make:wire-column Price
zapíše app/Tables/Columns/PriceColumn.php a
resources/views/tables/columns/price.blade.php. Třída přepisuje
renderCell(), jedinou metodu, kterou tabulka pro buňku volá, a pohledu předává
prostá data — rychlá vykreslovací cesta tabulky přepsání pozná a buňku vykreslí
celou, místo aby ji vkládala do kostry textového sloupce:
namespace App\Tables\Columns; use Illuminate\Database\Eloquent\Model;use NyonCode\WireTable\Columns\Column; class PriceColumn extends Column{ protected ?string $view = 'tables.columns.price'; public function renderCell(Model $record): string { if (! $this->canView() || ! $this->isVisibleForRecord($record)) { return ''; } $state = $this->getState($record); return trim($this->renderView('tables.columns.price', [ 'column' => $this, 'record' => $record, 'state' => $state, 'value' => $this->formatValue($state, $record), ])); } }
Jméno pohledu je nastavené na $view, ne jen předané do renderView(), takže
PriceColumn::make('price')->view('…') ho pro jednu tabulku stále přepíše a
vlastní pohledy balíčku tables.columns.* se místo něj nikdy nehledají.
value je naformátovaný stav — text prázdné buňky, když žádný není — takže
->placeholder(), ->limit() a ostatní dál fungují. Existující pohled se nikdy
nepřepíše, --force nahradí jen třídu a
php artisan vendor:publish --tag=wire-table::stubs vám dovolí změnit, co
zapisuje.