Autor | Zpráva | ||
---|---|---|---|
Stepanka Profil * |
#1 · Zasláno: 25. 4. 2008, 20:09:06
Zdravím,
mám takový zvláštní dotaz ohledně Smarty, na který nemůžu nikde na webu najít odpověď. Mám dvouúrovňovou stromovou strukturu, kterou v php kódu načítám takto: $result = mysql_query("SELECT * FROM obsah WHERE up = 0"); while ($row = mysql_fetch_array ($result)) { $content[] = $row; $id = $row['id']; $result2 = mysql_query ("SELECT * FROM obsah WHERE up = ".$id); while ($row2 = mysql_fetch_array ($result2)) { $subcontent[] = $row2; } } V šabloně teď potřebuji stromovou strukturu vypsat, a to takhle: Pod každým hlavním nadpisem chci vypsat jeho druhé úrovně, ale tak, aby se nevypsaly celé (protože záznamů je tam hodně), ale jen první 4 slova a za nimi tři tečky (prostě styl Yahoo). Zatím vypadá šablona takto: (je tam ale chyba, že vypíše první čtyři řádky jen pod prvním nadpisem, další nadpisy zobrazí, ale jejich druhé úrovně už ignoruje a nezobrazí) {section name=nazev loop=$content} <li class="main"> <br />{$content[nazev].nazev} </li> <ul class="sub"> {section name=nazev2 loop=$subcontent max=4} {if $content[nazev].id eq $subcontent[nazev2].up} {$subcontent[nazev2].nazev} {/if} {/section} </ul> {/section} Pomocí té funkce "max" v příkazu "section" to zatím nejde, pomocí truncate to taky nešlo, protože ten ořezal každé slovo na danou délku, a ne celý řetězec slov na danou délku. Už si nevím rady, pomohl byste mi někdo, prosím? Předem mockrát děkuji za jakékoliv rady. |
||
bukaj Profil |
#2 · Zasláno: 26. 4. 2008, 09:04:19
Stepanka
Když je to stromová struktura, proč ji ukládáš do dvou oddělených polí? Velice si zjednoduších práci, když s tím jako se stromovou strukturou budeš i pracovat: <?php $result = mysql_query("SELECT * FROM obsah WHERE up = 0"); while ($row = mysql_fetch_array ($result)) { $content[$row['id']] = $row; //jako index pole $content použijeme id řádku (předpokládám, že id je nějaké unikátní identifikátor) $result2 = mysql_query ("SELECT * FROM obsah WHERE up = " . $row['id'] . " LIMIT 4"); //klauzulí limit rovnou stanovíme, že chceme jenom 4 řádky //a nemusíme se o to pak start v šabloně while ($row2 = mysql_fetch_array ($result2)) { $content[$row['id']]['subcontent'][] = $row2; //zvolil jsem index "subcontent" jako ten, pod který se bude ukládat další větev, //ale pokud již ale takový sloupec je v tabulce, bude potřeba zvolit jiný } } I v šabloně se kód velice zjednodušší (se Smarty nepracuji, takže, co jsem napsal, nemusí být bez chyb): <ul> {foreach from=$content item=polozka} <li class="main"> {$polozka.nazev} <ul> {foreach from=$polozka.subcontent item=subpolozka} <li>{$subpolozka.nazev}</li> {/foreach} <li>...</li> </ul> </li> {/foreach} </ul> |
||
Stepanka Profil * |
#3 · Zasláno: 26. 4. 2008, 17:23:45
Mockrát díky, hned jak se dostanu ke správnému počítači, tak to vyzkouším ;-)
|
||
Stepanka Profil * |
#4 · Zasláno: 27. 4. 2008, 21:55:37
Perfektní, jede to, ty ses genius, dekuju moc!! :-)
|
||
Časová prodleva: 16 let
|
0