Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
<?php /* CREATE TABLE menu (id INTEGER NOT NULL, parentid INT NULL, label VARCHAR(50), PRIMARY KEY(id)); INSERT INTO menu VALUES (1, 0, 'Toppunkt 1'); INSERT INTO menu VALUES (2, 0, 'Toppunkt 2'); INSERT INTO menu VALUES (3, 0, 'Toppunkt 3'); INSERT INTO menu VALUES (4, 2, 'Underpunkt 2,1'); INSERT INTO menu VALUES (5, 2, 'Underpunkt 2,2'); INSERT INTO menu VALUES (6, 5, 'Underunderpunkt 2,2,1'); INSERT INTO menu VALUES (7, 5, 'Underunderpunkt 2,2,2'); INSERT INTO menu VALUES (8, 3, 'Underpunkt 3,1'); */
class RawMenuItem { public $parentid; public $label; public function __construct($parentid, $label) { $this->parentid = $parentid; $this->label = $label; } };
class TreeMenuItem { public $label; public $subs; public function __construct($label) { $this->label = $label; $subs = array(); } }
function load() { $rawmenu = array(); $con = new mysqli('localhost', 'root', '', 'Test'); $stmt = $con->prepare('SELECT id,parentid,label FROM menu'); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($id, $parentid, $label); while($stmt->fetch()) { $rawmenu[$id] = new RawMenuItem($parentid, $label); } $stmt->close(); $con->close(); return $rawmenu; };
function raw2tree_level($value, &$a, $rawmenu) { foreach($rawmenu as $id => $item) { if($item->parentid === $value) { $a[$id] = new TreeMenuItem($item->label); raw2tree_level($id, $a[$id]->subs, $rawmenu); } } }
Endnu engang tak for dit store arbejde med at hjælpe :).
En enkelt ting - den menu jeg bruger kræver den ligger således <ul> <li>navn <ul> <li>navn 2</li> </ul> </li> </ul>
Dvs hvor den nye ul ligger inde i den li hvor den hører til i. Er det meget avanceret at rette. Har ikke lavet så meget objektorienteret programmering, så er ikke helt sikker på hvordan jeg skal rette det.
--------
Så lige et dumt spørgsmål Som jeg forstår det, så laver du et array med alt indholdet fra databasen hvor id er nøglen. Inde i det array har du så parentid og label - men ligger de i et array i arrayet eller hvordan er de gemt som to forskellige værdier (håber ikke det er et alt for dumt spørgsmål, men er ikke helt sikker på hvad funktionen RawMenuItem gør)
Jeg stiller lige et ekstra spørgsmål, som måske er dumt da jeg ikke har meget erfaring med oop
Hvis nu jeg vil have flere felter med fra databasen, som jeg kan bruge - hvorledes gør jeg så det.
Jeg har prøvet følgende for at få et felt med der hedder linktype, men må misforstå noget
Der sker det at den vist skriver linktypen som label (og jeg kan ikke få adgang til begge) :(
class RawMenuItem { public $parentid; public $label; public $linktype; public function __construct($parentid, $label, $linktype) { $this->parentid = $parentid; $this->label = $label; $this->linktype = $linktype; } };
class TreeMenuItem { public $label; public $subs; public function __construct($label) { $this->label = $label; $subs = array(); } }
function load() { $rawmenu = array(); $con = new mysqli('localhost', 'root', '', 'Test'); $stmt = $con->prepare('SELECT id,parentid,label, linktype FROM menu'); $stmt->execute(); $stmt->store_result(); $stmt->bind_result($id, $parentid, $label, $linktype); while($stmt->fetch()) { $rawmenu[$id] = new RawMenuItem($parentid, $label, $linktype); } $stmt->close(); $con->close(); return $rawmenu; };
function raw2tree_level($value, &$a, $rawmenu) { foreach($rawmenu as $id => $item) { if($item->parentid === $value) { $a[$id] = new TreeMenuItem($item->label); raw2tree_level($id, $a[$id]->subs, $rawmenu); } } }
Du skal have linktype i TreeMenuItem og kopiere deb over i raw2tree.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.