Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szablony i mysql - zapętlanie
Forum PHP.pl > Forum > PHP
Disaster
Chce stworzyc sredniozaawansowany system typu CMS oparty na bazach mysql i wykorzystujacy szablony. Do tej pory nie robilem stron opartych o szablony i pojawil sie problem. Mianowicie chce miec po lewej stronie zrobione menu podzielone na kategorie, mniej-wiecej tak jak index fora phpbb podzielony jest na kategorie i fora. Zeby uproscic sprawe chodzi o taki uklad:
Kod
<!--BEGIN kategoria-->

<b>{kategoria}</b><br>

     <!--BEGIN linki-->

     <a href="{url}">{link}</a><br>

     <!--END linki -->

<br><br>

<!--END kategoria-->

W php przy uzyciu standardowej funkcji echo wyglada to tak:
[php:1:4d86280fe0]
<?php

$query = mysql_query("SELECT * FROM category");
while ($row = mysql_fetch_array($query)) {

$links_query = mysql_query("SELECT * FROM links WHERE category = $row[name]");
while ($links_row = mysql_fetch_array($links_query)) {
// ...
}

}

?>
[/php:1:4d86280fe0]

Problem polega na tym, ze przy zastosowaniu klasy szablow FastTemplate linki nie chca trzymac sie swoich kategorii tzn. kiedy mam 2 kategorie i w kazdej po jednym linku, w 1 kategorii prawidlowo pojawia sie 1 link, ale w kategorii 2 pojawiaja sie oba linki z obu kategorii.
Mam to rozwiazane w taki sposob:

left.php
[php:1:4d86280fe0]
<?php
$tpl->define( array( left => "left.tpl",
category => "category.tpl",
menulink => "menulink.tpl" ));


// IDZIEMY PO KATEGORIE...
$query = mysql_query("SELECT * FROM kategorie WHERE strona = 'lewa' ORDER BY pozycja ASC");
while ($sql = mysql_fetch_array($query)) {

// I LINKI
$query2 = mysql_query("SELECT * FROM menu WHERE kategoria = '$sql[nazwa]' ORDER BY pozycja ASC");

$n =mysql_num_rows($query2);
if ($n > 0) {

while ($sql2 = mysql_fetch_array($query2)) {

$tpl->assign( array( URL => $sql2[url],
NAZWA => $sql2[nazwa] ));
$tpl->parse(MENULINK,".menulink");
}

}
// SCHOWAJ SZABLON JEŻELI NIE MA LINKÓW...
else {
$tpl->assign(MENULINK,'');
}

$tpl->assign(TITLE,$sql[nazwa]);
$tpl->parse(CATEGORY, ".category");

}

$tpl->parse(LEFT,"left");
$tpl->FastPrint();

?>
[/php:1:4d86280fe0]

I pliki szablonow:

left.tpl
Kod
<!-- NAME: left.tpl -->

<!---- LEWE MENU ---->  

<TD vAlign=top width=243>



{CATEGORY}



          </TD>

<!---- KONIEC LEWE MENU ---->

<!-- END: left.tpl -->


category.tpl
Kod
<!-- NAME: category.tpl -->

<!---- LEWA KATEGORIA ---->

            <TABLE cellSpacing=0 cellPadding=0 width=243 border=0>

              <tr>

                <TD class=subjectcell width=243

                background=template_img/IB-II/tlo1.gif height=48>

                 <br><p align="center" style="text-indent: 0; line-height: 100%; word-spacing: 0; margin: 0">&nbsp;

                </center>

                  <p align="center" style="text-indent: 0; line-height: 100%; word-spacing: 0; margin: 0"><strong>{TITLE}</strong></TD>

              </tr>

<CENTER>

              <tr>

                <TD class=newscell

                  background=template_img/IB-II/menutlo.gif>                  <p align="center">



{MENULINK}



                </TD>

              </tr>

              <tr>

                <TD background=template_img/IB-II/dol.gif

              height=22></TD>

              </tr>

              </TABLE>&nbsp;

<!---- KONIEC LEWA KATEGORIA ---->

<!-- END: category.tpl -->


menulink.tpl
Kod
<!-- NAME: menulink.tpl -->

<a href="{URL}" {NEWWINDOW}><font color="#808080">{NAZWA}</font></a><br>

<!-- END: menulink.tpl -->


Co jest najciekawsze, chowanie szablonu jezeli w kategorii nie ma linkow dziala zupelnie dobrze. Problemy pojawiaja sie dopiero, kiedy wyswietlane sa juz wlasciwe linki.
Nie mam pojecia czemu tak sie dzieje, moze ktos tutaj bedzie mogl mi pomoc smile.gif Ewewntualnie jezel ktos proponuje jakies inne rozwiazanie, wykorzystanie innej klasy szablonow to jestem otwarty smile.gif

EDYCJA:
Poradzilem sobie juz, zamiast FastTemplatow uzylem klasy template z phplib smile.gif
treewood
zrob to lepiej na plikach ... latwiej sie takie rzeczy edytuje ... mnie by trafialo bym musial edytowac wyswietlanie strony przez edytor a nie przez sciagniecie sobie pliku odpowiedniego i otwarcie w edytorze lub edytowanie go po stronie serwera.
przerabialem z reszta kiedys ten temat ... na poczatku jaralem sie tym tak jak jest to w forum openBB gdzie szablony sa na bazie. z czasem zaczelo mnie to w....

juz nie mowiac, ze wyswietlanie szablonow z plikow jest troszke szybsze (zalezne oczywiscie takze od ilosci otwieranych plikow)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.