Barvna shema: Temna
Trenutno dejavna stran: start » sl » Dokumentacija » Razširitve DokuWikija (WvdS) » FluentUI (knjižnica oblikovalskega sistema) » FluentUI: reference komponent » FluentUI: TreeView – predstavitveni pregled » TreeView: osnove

TreeView: osnove

Nazaj: predstavitveni pregled


Navigacijsko drevo iz vgrajenih razširitvenih elementov brskalnika: zgrajeno rekurzivno in v celoti uporabno brez JavaScripta.

1. Pregled in namen

Stanje: [Live]. Vir: lib/plugins/wkfluentui/helper/widgets.php, metoda tree() (vrstica 44).

tree() izriše rekurzivno navigacijsko drevo iz gnezdenih <details>/<summary> elementov – povsem uporabno brez JavaScripta. Ciljna publika: vsak vtičnik, ki potrebuje hierarhično navigacijo strani/predmetov (npr. drevo predmetov v stranski vrstici), brez gradnje lastne logike tipkovnice/razširjanja-strnjevanja.

Pomembno razmejevanje: tree() je navigacijsko drevo – vsako vozlišče s href je povezava na drugo stran, ne odjemalsko izbirljivo podatkovno drevo z lastnim stanjem (za to glej Selection / Checkboxes).

2. Predpogoji

  • DokuWiki z omogočenim vtičnikom wkfluentui.
  • helper_plugin_wkfluentui_widgets naložen prek plugin_load('helper', 'wkfluentui_widgets').

3. Pojmi

Nativna semantika namesto obnove ARIA: <details>/<summary> brezplačno ponuja razširjanje/strnjevanje, upravljanje s tipkovnico (Enter/preslednica) in implicitno semantiko za bralnik zaslona – obnova role="tree" ni potrebna, dokler ni aktivna nobena izbira (glej Accessibility za razliko, ko se doda selection).

Rekurzija: vozlišče z children se samo znova izriše prek tree() – ista metoda gradi hierarhije poljubne globine.

4. Prvi koraki

/** @var helper_plugin_wkfluentui_widgets $widgets */
$widgets = plugin_load('helper', 'wkfluentui_widgets');
 
echo $widgets->tree([
    ['label' => 'Povezave', 'href' => wl($ID, ['ns' => 'connections'])],
    [
        'label' => 'Tabele',
        'children' => [
            ['label' => 'naloge', 'href' => wl($ID, ['t' => 'naloge']), 'active' => true],
            ['label' => 'uporabniki', 'href' => wl($ID, ['t' => 'uporabniki'])],
        ],
    ],
]);

Napačno: ustvariti vozlišče brez href IN brez children, v pričakovanju, da se bo pojavilo kot klikljivo mesto za zapolnitev. Brez obojega se vozlišče izriše kot golo, neinteraktivno besedilo – to je pravilna, dokumentirana degradacija, ne napaka.

5. Uporaba

Primer uporabe Vzorec
Drevo predmetov v stranski vrstici tree() neposredno v regiji stranske vrstice – prvi porabnik wksqliteds
Oznaka trenutne strani nastaviti active ⇒ true na ustreznem listnem vozlišču
Kontekstni podatki na povezavi dataSql za prosto uporabne atribute data-sql (konvencija SQL Workbencha)

6. API referenca

Metapodatek Vrednost
Jezik PHP
Imenski prostor helper_plugin_wkfluentui_widgets
Datoteka lib/plugins/wkfluentui/helper/widgets.php
Vidnost public
Stabilnost stabilno (raven 1)
public function tree(array $nodes): string

Povzetek: izriše rekurzivno, brez JavaScripta delujoče navigacijsko drevo iz gnezdenih definicij vozlišč.

Vrnjena vrednost: string – <ul class="wk-tree">…</ul>. Prazen niz pri praznem $nodes.

7. Parametri, možnosti in stanja

$nodes (na vnos, rekurzivno)

Ključ Tip Obvezno Pomen
label string Da besedilo vozlišča (ubežano prek hsc())
href string Ne ciljni URL; če manjka, je vozlišče golo združevalno besedilo (brez povezave)
active bool Ne označi trenutno vozlišče (.wk-tree__link–active, krepko + poudarjeno ozadje); pri skupinskem vozlišču brez lastnega open dodatno odpre njegov <details> (glej open spodaj)
open bool Ne od 2026-07-17, neodvisno od active: vsili odprto ali zaprto stanje skupinskega vozlišča, ne da bi nastavil videz aktivnega vozlišča. Če ključ manjka, velja vrednost active (100-odstotno združljivo za nazaj) – potrebno, kadar naj bo vozlišče prikazano razširjeno, NE da bi pomenilo »trenutno stran« (npr. ročno razširjen, a neobiskan imenski prostor)
dataSql string Ne prosto uporaben atribut data-sql na povezavi (prvi porabnik: SQL Workbench)
children array Ne gnezdena vozlišča, ista shema – spremeni vozlišče v skupino <details>/<summary>
lazy + lazyUrl bool + string Ne od 2026-07-17: vozlišče brez children, a z lazy ⇒ true in lazyUrl, se kljub temu izriše kot razširljiva skupina (prazen nadomestni <ul>, data-wk-tree-lazy-src). scripts/treeview.js ob odprtju naloži lazyUrl prek fetch() in zamenja nadomestek – odgovor mora priti s statusom 2xx in biti sam spet fragment tree(), ne cela stran; kaj se zgodi ob neuspehu, opisuje razdelek Vedenje ob napaki. Brez JavaScripta: ostane običajna povezava, če je href nastavljen; globlje poddrevo brez JavaScripta ostane nedosegljivo. Ne kombinirajte z open ⇒ true – glej Vedenje ob napaki spodaj.
statusClass string Ne od 2026-07-17: ena sama beseda, preverjena proti ^[a-z][a-z0-9-]*$ (neveljavne vrednosti se tiho zavržejo), izrisana kot wk-tree__status–<statusClass> na <li>. tree() sam temu razredu ne pripisuje pomena – videz določi klicatelj z lastnim CSS (prvi porabnik: stanja imenskih prostorov partial/divert/collection v wkacmenu)

Generiran izris

<ul class="wk-tree"> → na vozlišče <li>, pri children gnezdeno kot <details><summary>Label</summary><ul>…</ul></details>.

Vedenje ob napaki

Pogoj Vedenje
$nodes prazen vrne prazen niz, brez napake
Vozlišče brez href in brez children izriše se kot golo, neinteraktivno besedilo – brez napake
active ⇒ true na več vozliščih hkrati brez preverjanja – vsa označena vozlišča dobijo aktivni razred, klicatelj je odgovoren za enoličnost
statusClass krši ^[a-z][a-z0-9-]*$ se tiho prezre (brez atributa razreda), brez napake
Nadomestno vozlišče (lazy + lazyUrl, brez children) z open ⇒ true open se pri tej kombinaciji prezre (nadomestek se vedno izriše zaprt) – utemeljitev v razdelku 9
Nalaganje ne uspe (status zunaj 2xx, omrežna napaka, odgovor brez ul.wk-tree ali cela stran – npr. prijavna stran po poteku seje) v nadomestku se pojavi vrstica stanja li.wk-tree__loaderror (besedilo tree_lazy_error iz jezikovnih datotek, barva napake), ki jo bralnik zaslona napove prek vljudne žive regije nadomestka; naslednje razširjanje jo odstrani in nalaganje ponovi. Dokler zahteva teče, nosi vozlišče aria-busy="true" in ne sproži druge; nalaganje vozlišča se konča šele, ko ravan prispe.

8. Popolni primeri

echo $widgets->tree([
    [
        'label' => 'de',
        'children' => [
            ['label' => 'wiki', 'href' => wl($ID, ['ns' => 'de:wiki']), 'active' => true],
            ['label' => 'blog', 'href' => wl($ID, ['ns' => 'de:blog'])],
        ],
    ],
    ['label' => 'en', 'href' => wl($ID, ['ns' => 'en'])],
]);

9. Omejitve in robni primeri

  • active označi le trenutni ogled strani; pravo izbiro (radio/checkbox na vozlišče, form-POST) zagotavlja način selection – Selection / Checkboxes.
  • Leno nalaganje prek lazy/lazyUrl (od 2026-07-17, glej razdelek 7) pokrije zelo velika drevesa, saj se globlje ravni naložijo šele po potrebi – brez te možnosti morajo biti vsi children ob klicu še vedno v celoti prisotni.
  • lazy + open ⇒ true na istem vozlišču: nalaganje se ne zgodi (nativni dogodek toggle, ki ga scripts/treeview.js uporablja za nalaganje, se ne sproži za stanje, ki je odprto že ob nalaganju strani) – nadomestek bi ostal trajno prazen. Te kombinacije ne potrebuje noben primer uporabe; tree() zato za nadomestna vozlišča open namenoma nikoli ne izriše.
  • Premikanje vozlišč: Drag & Drop (vidne povezave ▲/▼ plus izbirna plast vlečenja).

10. Dostopnost in združljivost

  • Celoten pregled: Accessibility (konsolidirano, tu ni podvojeno).
  • Povsem uporabno brez JavaScripta – brez odvisnosti od postopnega izboljšanja za osnovno funkcijo.
  • Združljivost brskalnikov: odvisno od nativne podpore za <details> (vsi trenutni brskalniki; starejši brskalniki brez podpore prikažejo vsebino trajno razširjeno namesto zložljive – degradirano, ne neuporabno).

11. Odpravljanje težav

Simptom: skupinsko vozlišče se ne odpre samodejno, čeprav ima podrejeno vozlišče active ⇒ true.

Vzrok: active mora biti nastavljen na samem skupinskem vozlišču, da se njegov <details> izriše odprt – označitev podrejenega vozlišča ne odpre samodejno nadrejene skupine.

Rešitev: dodatno nastaviti active ⇒ true na nadrejenem vozlišču, če naj bo skupina začetno odprta.

12. Sorodne teme

sl/wiki/dwe/wkfluentui/component/treeview/basics.txt · Zadnja sprememba: uporabnika Wolfgang van der Stille