Uz vrlo malo prerade oko smarty dela, uz neki while, moze da se uradi na beskonacno mnogo nivoa... Ako budem imao potrebe i za tim, definitivno cu uraditi ;)
Tabela ima 3 polja - id, namei parent_id (id roditelja)
Upit ka bazi
Code:
SELECT *,
(SELECT COUNT(*) FROM categories AS c2 WHERE c2.parent_id=c1.id)
AS childs
FROM categories AS c1 ORDER BY name ASC;
SELECT *,
(SELECT COUNT(*) FROM categories AS c2 WHERE c2.parent_id=c1.id)
AS childs
FROM categories AS c1 ORDER BY name ASC;
Tabela koja se dobija
Code:
+----+-------------------+-----------+--------+
| id | name | parent_id | childs |
+----+-------------------+-----------+--------+
| 23 | .Co.Yu | 17 | 0 |
| 22 | .COM | 17 | 0 |
| 24 | .in.RS | 17 | 0 |
| 25 | .org.rs | 17 | 0 |
| 21 | .RS | 17 | 0 |
| 7 | 5.1 | 5 | 0 |
| 8 | 7.1 | 5 | 0 |
| 3 | Automobili | 1 | 3 |
| 1 | Automoto | NULL | 2 |
| 19 | CPU | 16 | 0 |
| 17 | Domeni | 14 | 5 |
| 5 | DVD Plejeri | 2 | 3 |
| 2 | Elektronika | NULL | 2 |
| 12 | Ford | 3 | 0 |
| 20 | Graficka | 16 | 0 |
| 18 | HDD | 16 | 0 |
| 16 | Komponente | 14 | 3 |
| 15 | Konfiguracije | 14 | 0 |
| 4 | Moto-cikli | 1 | 1 |
| 6 | MP3 Plejeri | 2 | 0 |
| 13 | Preko 1300ccm | 3 | 0 |
| 14 | Racunari i oprema | NULL | 3 |
| 10 | Yamahe | 4 | 0 |
| 11 | Yugo | 3 | 0 |
+----+-------------------+-----------+--------+
+----+-------------------+-----------+--------+
| id | name | parent_id | childs |
+----+-------------------+-----------+--------+
| 23 | .Co.Yu | 17 | 0 |
| 22 | .COM | 17 | 0 |
| 24 | .in.RS | 17 | 0 |
| 25 | .org.rs | 17 | 0 |
| 21 | .RS | 17 | 0 |
| 7 | 5.1 | 5 | 0 |
| 8 | 7.1 | 5 | 0 |
| 3 | Automobili | 1 | 3 |
| 1 | Automoto | NULL | 2 |
| 19 | CPU | 16 | 0 |
| 17 | Domeni | 14 | 5 |
| 5 | DVD Plejeri | 2 | 3 |
| 2 | Elektronika | NULL | 2 |
| 12 | Ford | 3 | 0 |
| 20 | Graficka | 16 | 0 |
| 18 | HDD | 16 | 0 |
| 16 | Komponente | 14 | 3 |
| 15 | Konfiguracije | 14 | 0 |
| 4 | Moto-cikli | 1 | 1 |
| 6 | MP3 Plejeri | 2 | 0 |
| 13 | Preko 1300ccm | 3 | 0 |
| 14 | Racunari i oprema | NULL | 3 |
| 10 | Yamahe | 4 | 0 |
| 11 | Yugo | 3 | 0 |
+----+-------------------+-----------+--------+
Ovo 'childs' moze da koristi da se proveri u smarty da li je TRUE (vece od 0) tj. da li ima 'dece' pa ukoliko ima, da se ne dozvoli korisniku ... sta god.
Smarty Part :
Code:
{section name=lvl_1 loop=$categories}
{if !$categories[lvl_1].parent_id}
{$categories[lvl_1].name}<option disabled="disabled" class='parentcategory'>{$categories[lvl_1].name}</option><br />
{section name=lvl_2 loop=$categories}
{if $categories[lvl_2].parent_id==$categories[lvl_1].id}
--{$categories[lvl_2].name}<br />
{section name=lvl_3 loop=$categories}
{if $categories[lvl_3].parent_id==$categories[lvl_2].id}
----{$categories[lvl_3].name}<br />
{/if}
{/section}
{/if}
{/section}
{/if}
{/section}
{section name=lvl_1 loop=$categories}
{if !$categories[lvl_1].parent_id}
{$categories[lvl_1].name}<option disabled="disabled" class='parentcategory'>{$categories[lvl_1].name}</option><br />
{section name=lvl_2 loop=$categories}
{if $categories[lvl_2].parent_id==$categories[lvl_1].id}
--{$categories[lvl_2].name}<br />
{section name=lvl_3 loop=$categories}
{if $categories[lvl_3].parent_id==$categories[lvl_2].id}
----{$categories[lvl_3].name}<br />
{/if}
{/section}
{/if}
{/section}
{/if}
{/section}
Output
Code:
AutomotoAutomoto
--Automobili
----Ford
----Preko 1300ccm
----Yugo
--Moto-cikli
----Yamahe
ElektronikaElektronika
--DVD Plejeri
----5.1
----7.1
--MP3 Plejeri
Racunari i opremaRacunari i oprema
--Domeni
----.Co.Yu
----.COM
----.in.RS
----.org.rs
----.RS
--Komponente
----CPU
----Graficka
----HDD
--Konfiguracije
AutomotoAutomoto
--Automobili
----Ford
----Preko 1300ccm
----Yugo
--Moto-cikli
----Yamahe
ElektronikaElektronika
--DVD Plejeri
----5.1
----7.1
--MP3 Plejeri
Racunari i opremaRacunari i oprema
--Domeni
----.Co.Yu
----.COM
----.in.RS
----.org.rs
----.RS
--Komponente
----CPU
----Graficka
----HDD
--Konfiguracije
I don't need a girl for sex , All I Need is Binary and HEX