TreeView: Drag & Drop
Nazaj: predstavitveni pregled
1. Pregled in namen
Stanje: [Live].
Vir: lib/plugins/wkfluentui/helper/widgets.php (povezave za
premikanje) in lib/plugins/wkfluentui/scripts/treeview.js
(plast vlečenja). Referenca: DevExpress-ov drag&drop drevesa (premikanje
vozlišč med skupinami).
2. Predpogoji
osnovna pogodba
TreeViewa že razumljena; vsako premakljivo vozlišče potrebuje key;
klicatelj priskrbi POST-končno točko za premike.
3. Pojmi
Najprej vidni gumbi, vlečenje kot plast nad njimi: povezavi za
premikanje gor/dol (reorderUrl) sta primarna, s tipkovnico upravljiva
in brez JS delujoča pot. HTML5 vlečenje in spuščanje pride izključno
dodatno (reorderAction) in nikoli ne nadomesti gumbov — vlečenje
ni upravljivo za uporabnike tipkovnice (načelo iz
layout →
Mehanika postavitve).
4. Prvi koraki
echo $widgets->tree($nodes, [ 'reorderUrl' => static fn (string $key, string $op) => wl($ID, ['move' => $key, 'dir' => $op]), 'reorderAction' => wl($ID, ['do' => 'move']), ]);
5. Uporaba
| Potreba | Vzorec |
|---|---|
| Sprememba vrstnega reda (standard) | le reorderUrl — vidne povezave ▲/▼ na vozlišče |
| Dodatna udobnost vlečenja | dodati reorderAction — spustitev pošlje (vozlišče, referenca, položaj) |
6. API referenca
$opts['reorderUrl']—callable(string $key, string $op): stringzop∈up/down: izriše na vozlišče skeydve vidni povezavi za premikanje (.wk-tree__move, zaria-label). Strežnik izvede premik ob klicu URL-ja.$opts['reorderAction'](URL) — aktivira plast vlečenja: korensko<ul>nosidata-wk-reorder-action;scripts/treeview.jsnaredikey-vozlišča vlečljiva in ob spustitvi pošlje dinamični obrazec zwk-tree-move(premaknjeno vozlišče),wk-tree-ref(ciljno vozlišče),wk-tree-pos(before/after) insectok-om iz JSINFO — anonimne seje nimajo žetona, tam ostane pri povezavah.
7. Parametri, možnosti in stanja
| Ključ | Tip | Pomen |
|---|---|---|
$opts['reorderUrl'] | callable (string $key, string $op): string | povezave za premikanje brez JS, op = up/down |
$opts['reorderAction'] | string (URL) | POST-cilj plasti vlečenja (polja glej odsek 6) |
Varnost (zavezujoče): strežnik ponovno preveri vsak premik —
preveriti sectok (checkSecurityToken()), izključiti cikle,
preveriti cilj glede na ACL uporabnika (brez premika v skupino, ki je
ACL uporabnika ne pokriva) — isto pravilo kot pri vsaki množični akciji
(glej Množične
akcije → stran strežnika).
8. Popolni primeri
Glej odsek 4; klicateljev POST-obravnavalnik prebere wk-tree-move/
wk-tree-ref/wk-tree-pos, preveri sectok in ACL ter izvede
premik.
9. Omejitve in robni primeri
- Spustitev na lastno poddrevo se na strani odjemalca prezre — preverjanje ciklov kljub temu ostaja obveznost strežnika (manipuliran POST zaobide odjemalca).
- Premikanje med drevesi (dve instanci
tree()) ni del pogodbe.
10. Dostopnost in združljivost
Vidni povezavi ▲/▼ (z aria-label „Premakni navzgor/navzdol„) vedno
ostaneta primarna, s tipkovnico upravljiva pot — vlečenje in spuščanje je
čista plast udobnosti za miško.
11. Odpravljanje težav
Simptom: vlečenje se začne, spustitev pa nima učinka.
Vzrok: ni sectok-a (anonimna seja) ali manjka reorderAction —
plast vlečenja se takrat namerno onemogoči.
Rešitev: preveriti prijavo; nastaviti reorderAction; povezavi
▲/▼ delujeta ne glede na to vedno.
12. Sorodne teme
- predstavitveni pregled — vsaka kategorija
- TreeView: osnove — osnovna pogodba
tree() - DataGrid: Data Editing (množična dejanja) — pravilo strežniške validacije za premikalne akcije