DataGrid: osnove
Nazaj: predstavitveni pregled
1. Pregled in namen
Stanje: [Live], preverjeno glede na wkfluentui@a477094.
dataGrid() izriše namizno tabelo, ki zapolni podokno in je odporna na
spremembo velikosti, z izbirnim razvrščanjem, izbiro vrstic in množičnimi
dejanji — osrednji gradnik za „veliko podobnih zapisov kot tabela„ v tej
knjižnici. Ta stran dokumentira osnovno pogodbo (stolpci, vrstice,
ustvarjene oznake, videz tabele, obstojnost širine stolpcev); podrobnosti,
specifične za funkcije (razvrščanje, izbira, množična dejanja,
filtriranje, straničenje, izvoz, dostopnost), so na pripadajočih
podstraneh predstavitvenega
pregleda.
Ciljna publika: vsak vtičnik DokuWiki, ki želi prikazati seznam podobnih zapisov (vrstice podatkovne baze, seznam datotek, konfiguracijske vnose …) kot tabelo, namesto da bi gradil lastno logiko izrisovanja tabele.
2. Predpogoji
- DokuWiki z omogočenim vtičnikom
wkfluentui. helper_plugin_wkfluentui_widgetsnaložen prekplugin_load('helper', 'wkfluentui_widgets')— neplugin_load('helper', 'wkfluentui')(vrnenull, glej api → odsek „odpravljanje težav").- Za
sortUrl/bulkActionss končnimi točkami strežnika: obravnavalec POST obrazca s preverjanjemsectokna strani klicatelja (gradnik zagotavlja le oznake, brez logike strežnika).
3. Koncepti
Nativna <table>, ne ponovna izvedba z div. Namerna arhitekturna
odločitev: ločeni tabeli glave/telesa ali mreža div desinhronizirata
širine stolpcev brez JavaScripta; nativna <table> ohranja glavo
in telo poravnana ter brezplačno prinaša pravilno implicitno tabelarično
semantiko. role=„grid“ (poleg aria-multiselectable pri multi)
je nastavljen šele, ko je aktiven model izbire — čista prikazovalna
tabela brez izbire ostane semantično tabela, ne gradnik „grid“.
Navadno besedilo proti HTML, ki mu je mogoče zaupati: vrednosti
celic v $rows so privzeto navadno besedilo (gradnik jih ubeži prek
hsc()); vrednost oblike ['html' => string] namesto tega
izriše nespremenjen HTML, ki ga je že ubežal klicatelj — enaka
konvencija kot povsod v tem API-ju (glej
api → odsek „koncepti",
konvencija ubežanja).
Z vsebnikom vodena prilagodljivost: brez prelomne točke vidnega polja, mreža sledi širini svojega podokna — podrobnosti: adaptivity.
4. Prvi koraki
/** @var helper_plugin_wkfluentui_widgets $widgets */ $widgets = plugin_load('helper', 'wkfluentui_widgets'); $columns = [ ['key' => 'id', 'label' => 'ID', 'align' => 'right', 'mono' => true, 'width' => '4rem'], ['key' => 'name', 'label' => 'Ime'], ['key' => 'status', 'label' => 'Stanje', 'sortable' => false], ]; $rows = [ ['id' => 1, 'name' => 'Preveri pravilo požarnega zidu', 'status' => 'odprto'], ['id' => 2, 'name' => 'Preveri opravilo varnostne kopije', 'status' => 'opravljeno'], ]; echo $widgets->dataGrid($columns, $rows, [ 'ariaLabel' => 'Seznam opravil', 'empty' => 'Ni vnosov.', ]);
Napačno: posredovati $rows kot navaden nabor vrednosti brez
ključev stolpcev ([1, 'Preveri pravilo požarnega zidu', 'odprto']).
dataGrid() prebere vrednosti celic prek $row[$col['key']] —
brez ujemajočih ključev vsaka celica ostane prazna, brez sporočila o
napaki (glej odsek 11, odpravljanje težav).
5. Uporaba
| Primer uporabe | Vzorec |
|---|---|
| Seznam rezultatov z razvrščanjem | $opts['sort']/sortUrl — sorting |
| Večkratna izbira + množična operacija | $opts['selection'] => 'multi' + rowKey + bulkActions — selection · Data Editing |
| Podokno obrazca v predalu/auxbarju | nastavite persistKey, da širine stolpcev preživijo ponovna nalaganja (odsek 6) |
| Prvi produkcijski porabnik | wksqliteds — dbadmin/ResultGrid je tanek prilagojevalnik nad dataGrid() |
6. Referenca API
| Metapodatek | Vrednost |
|---|---|
| Jezik | PHP |
| Namespace | helper_plugin_wkfluentui_widgets |
| Datoteka | lib/plugins/wkfluentui/helper/widgets.php |
| Vidnost | public |
| Stabilnost | stabilno (Tier 1) |
public function dataGrid(array $columns, array $rows, array $opts = []): string
Povzetek: izriše namizno podatkovno tabelo iz definicij stolpcev in podatkov vrstic, izbirno z razvrščanjem, izbiro vrstic in orodno vrstico množičnih dejanj.
Povratna vrednost: string — popoln fragment HTML
(<div class="wk-datagrid">…</div>). Prazen niz, kadar je
$columns prazen (brez tabele brez stolpcev) — ne glede na to, ali
$rows vsebuje vnose.
7. Parametri, opcije in stanja
$columns (na vnos)
| Ključ | Tip | Obvezno | Privzeto | Pomen |
|---|---|---|---|---|
key | string | Da | – | ključ stolpca, mora se ujemati s ključem vrstice v $rows |
label | string | Da | – | besedilo glave (ubežano z hsc()) |
align | 'left'|'right' | Ne | left | right za številske stolpce |
mono | bool | Ne | false | prikaz z enakomerno širino pisave (–wk-admin-font-mono) |
sortable | bool | Ne | true | false zatre uporabniški vmesnik za razvrščanje tega stolpca |
width | string | Ne | – | začetna širina CSS; povožena ob spremembi velikosti na strani odjemalca |
$rows
Seznam asociativnih polj ključ => vrednost celice. Niz se ubeži
kot navadno besedilo; ['html' => string] izriše HTML, ki mu je
mogoče zaupati in ga je ubežal klicatelj, brez preverjanja.
$opts
| Ključ | Tip | Privzeto | Stran funkcije |
|---|---|---|---|
sort | polje [key, 'asc'|'desc'] | – | sorting |
sortUrl | callable | – | sorting |
persistKey | string | – | ta stran, odsek 3 (koncepti) in spodaj (širine stolpcev) |
selection | 'none'|'single'|'multi' | none | selection |
selectable | bool (vzdevek za selection => 'single') | false | selection |
rowKey | string | – | obvezno pri multi — selection |
bulkActions | polje | – | Data Editing |
rowActions | callable | – | api → rowActions() |
actionsHeader | string ali ['html' => string] | prazno | api → rowActions() |
empty | string | — | besedilo praznega stanja |
ariaLabel | string | – | accessibility |
Ustvarjene oznake
<div class="wk-datagrid" data-wk-selection="…" data-wk-persist="…">
→ izbirno <div class="wk-datagrid__bulkbar"> → nativna
<div class="wk-datagrid__body"><table>…</table></div> z lepljivim
<thead class="wk-datagrid__head">. Vsaka celica glave nosi
scope="col" (izrecna semantika glave stolpca — skladno z
odločitvijo za uporabo nativne tabelarične semantike namesto ponovne
izvedbe ARIA, glej odsek 3).
Obnašanje ob napaki
| Pogoj | Obnašanje | |
|---|---|---|
$columns prazen | vrne ''`` (prazen niz), brez napake |
| ''$rows prazen | tabela se izriše z vrstico glave + vrstico praznega stanja (besedilo empty), brez napake |
selection => 'multi' brez rowKey | tiho degradira na none — brez napake, brez opozorila (vrednosti potrditvenih polj brez edinstvenega ključa bi bile nesmiselne) | |
vrstica $rows brez ujemajočega $columns[]['key'] | celica se izriše prazna, brez napake (glej odsek 4, „napačno„) | |
neznana vrednost $opts['selection'] | tiho degradira na none |
8. Popolni primeri
Tabela, ki jo je mogoče razvrščati in večkratno izbrati, z množičnim dejanjem (združuje osnove + razvrščanje + izbiro + množična dejanja):
$columns = [ ['key' => 'id', 'label' => 'ID', 'align' => 'right', 'mono' => true, 'width' => '4rem'], ['key' => 'name', 'label' => 'Ime'], ['key' => 'status', 'label' => 'Stanje'], ]; echo $widgets->dataGrid($columns, $rows, [ 'sort' => ['name', 'asc'], 'persistKey' => 'opravila:seznam', 'selection' => 'multi', 'rowKey' => 'id', 'bulkActions' => [ ['label' => 'Označi kot opravljeno', 'element' => '<button type="submit" name="do" value="done" class="wk-btn">Označi kot opravljeno</button>'], ], 'ariaLabel' => 'Seznam opravil', 'empty' => 'Ni opravil.', ]);
9. Omejitve in robni primeri
- Brez navideznega drsenja — glej Data Paging and Scrolling.
- Brez urejljivih celic na tej stopnji — glej Data Editing (množična dejanja), odsek urejanja mreže.
- Brez filtra glave stolpca — glej filtering.
- Brez razvrščanja po več stolpcih — glej sorting → omejitve.
persistKeymora biti stabilen med ogledi strani in edinstven na primerek mreže — dve mreži z enakimpersistKeysi po nesreči delita isto stanjelocalStorage.
10. Dostopnost in združljivost
- Popoln pregled ARIA/tipkovnice: accessibility (konsolidirano, tu ni podvojeno).
- Brez JavaScripta tabela ostane povsem uporabna; razvrščanje brez JS zahteva
sortUrl(nadomestilo na strani strežnika), sicer glave ostanejo tiho nerazvrstljive. - Združljivost brskalnikov: brez zahtev, ki bi presegale osnovno podporo CSS Grid/Flexbox (enako preostanku knjižnice).
11. Odpravljanje težav
Simptom: celice ostanejo prazne, čeprav $rows vsebuje podatke.
Vzrok: ključi vrstic v $rows se ne ujemajo z $columns[]['key']
(tipkarska napaka ali navaden nabor vrednosti namesto asociativnega
polja).
Rešitev: preverite vsak $columns[]['key'] glede na dejanske
array_keys() vrstice v $rows.
Simptom: stolpec s potrditvenimi polji manjka kljub
selection => 'multi'.
Vzrok: rowKey manjka v $opts — gradnik tiho degradira na
none (glej odsek 7, obnašanje ob napaki).
Rešitev: nastavite $opts['rowKey'] na edinstven ključ
stolpca.
12. Sorodne teme
- predstavitveni pregled — vse kategorije
- FluentUI: javni API pomočnika — popolna pogodba metod vseh pomočnikov
- FluentUI: osnovni katalog gradnikov — DeclarativeTable (katalog Tier 2)
- SQLite Data Studio: Admin-Oberfläche — prvi porabnik (SQL Workbench)