Vytvoření menu z databáze

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
CJHornster
Člen | 56
+
0
-

Zdar lidi, mám problém. Mám db kde mám uložené kategorie z kterých chci vytvořit menu

Zde je příklad DB:

CREATE TABLE IF NOT EXISTS `kategorie` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `first` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_czech_ci NOT NULL,
  `second` varchar(255) CHARACTER SET utf8 COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ;

INSERT INTO `kategorie` (`id`, `first`, `second`) VALUES
(20, 'Šaty', 'Ostatní'),
(21, 'Šaty', 'Dlouhé šaty'),
(22, 'Šaty', 'Krátké šaty'),
(23, 'Šaty', 'Večerní šaty'),
(24, 'Plavky', 'Ostatní'),
(25, 'Plavky', 'Jednodílné'),
(26, 'Plavky', 'Dvoudílné');

potřeboval bych z first vždy vzít jednoho a k němu přidělit všechyn jeho podkategorie (second). Po kliknutí na menu se budou vykreslovat v pohledu jednotlivé položky z jiné tabulky v DB

David Matějka
Moderator | 6445
+
0
-

struktura databaze je spatna, spravne to ma byt treba takhle:

category
-------
id - int, primary, ai
name - varchar
parent_id - int, FK na id v tehle tabulce

a uz se to tu nekolikrat resilo, staci pouzit hledani, namatkou tohletohle

CJHornster
Člen | 56
+
0
-

ok dík, moje řešení mě přišlo trochu jednoduší, ale asi budu muset použít rekurzivní :(

Michal Vyšinský
Člen | 608
+
0
-

CJHornster napsal(a):

ok dík, moje řešení mě přišlo trochu jednoduší, ale asi budu muset použít rekurzivní :(

Ono ti to teď možná připadá jednodušší, ale co když budeš chtít přejmenovat „Šaty“ na „Dámské šaty“. A navíc takhle zbytečně duplikuješ data.

Edit: nebo nedej bože, aby přibyla další podkategorie např. mezi „Šaty“ a „Krátké šaty“ :D

Editoval CherryBoss (9. 7. 2013 14:44)

Draffix
Člen | 146
+
0
-

vytvářet kategorie si myslím je věda sama o sobě, jinak se dá také použít třeba traverzování okolo stromu či closure table pro vytvoření určité stromové hierarchie v databázi a pak si vytvářet dotazy dle libosti

CJHornster
Člen | 56
+
0
-

Dík za rady, tak sjem upravil tabulku a nějak vytvořil tabulku s vypisem, ale nějak nevím jak z toho získat tu url pro a:href

potřeboval bych něco na styl wwwstranka/kategorie/saty/dlouhe-saty/jmeno-satu
nějak moc nechápu jak to naroutit saty/dlouhe-saty bude v tabulce kategorie, jmeno satu bude v tabulce se šaty

<table class="tasks">
    <thead>
    <tr>
        <th class="hlcat">Hlavní kategorie</th>
        <th class="spojovnik-sipka">&nbsp;</th>
        <th class="podcat">Podkategorie</th>
    </tr>
    </thead>
    <tbody>
    {foreach $allcategories as $main}
    <tr n:class="$iterator->isOdd() ? odd : even">
     <td class="first-cat">{$main->NAME   }</td>
     <td class="spojovnik-sipka"> : </td>
     <td class="action">&nbsp;</td>
             {foreach $allsubcategories as $submain}
              {if $submain->PARENT_ID !==  0 and $submain->PARENT_ID === $main->ID}
                <tr>
                 <td class="first-cat">&nbsp;</td>
                 <td class="spojovnik-sipka">&nbsp;</td>
                 <td class="action"><a n:href="$submain->NAME">{$submain->NAME}</a></td>
                </tr>
              {/if}
             {/foreach}
    </tr>
    {/foreach}
    </tbody>
</table>

Editoval CJHornster (10. 7. 2013 21:02)

CJHornster
Člen | 56
+
0
-

no to už mam pročtený asi 10 krát :D ale nějak nechápu jak z toho menu dostanu wwwstranka/kategorie/saty/dlouhe-saty/jmeno-satu

potřeboval bych po kliknutí na hlavní_kategorii vypsat jednotlivé podkategorie a url ve stylu:
wwwstranka/kategorie/saty
potom po kliknutí na podkategorii:
wwwstranka/kategorie/saty/dlouhe-saty
a po klidnutí na daný předmět:
wwwstranka/kategorie/saty/dlouhe-saty/jmeno-satu

zkouším to routovat podle toho návodu, ale vůbec mě to nejde :(

Editoval CJHornster (11. 7. 2013 11:20)