Autor Zpráva
Stepanka
Profil *
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
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 *
Mockrát díky, hned jak se dostanu ke správnému počítači, tak to vyzkouším ;-)
Stepanka
Profil *
Perfektní, jede to, ty ses genius, dekuju moc!! :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: