Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty -> pobieranie z bazy danych {foreach}
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
poczatkujaca12
Witam, zaczynam przygodę z systemami szablonów {smarty}
i teraz napotkałam na problem...
Mam dość rozbudowaną tabelkę, i nie wiemjak ją przepisać z użyciem smartów.

schemat:
dane pobiera 4 kolumny z bazy i przypisuje im wartość, 0 jeżeli nie ma w sesji, 1 jeżeli jest w sesji, pozniej user moze zmienic na większą
później oblicza i sumuje

Kod
| kol 1 | kol 2 | kol 3 | kol 4 | kol 5 |
| 91.00 | 45.00 | 24.00 | 5.001 | 1     |
| 85.00 | 70.00 | 18.00 | 5.421 | 1     |
| 61.00 | 46.00 | 23.00 | 54.55 | 1     |
| 81.00 | 55.00 | 75.00 | 78.41 | 1     |


w php działa, dane pobieram while,
w smartach nie wiem jak tego użyć?
mortus
W skrypcie PHP dane pobrane z bazy (np. za pomocą pętli while) zapisujesz do tablicy, którą później przekazujesz do szablonu.
poczatkujaca12
Tylko nie wiem jak to zapisać?

  1. $i=0;
  2. $zap=mysql_query("select * from...");
  3. while ($row=mysql_fetch_array($zap)){
  4. $i++;
  5. echo $row['pole1'];
  6. echo $row['pole2'];
  7. echo $row['pole3'];
  8. echo $row['pole4'];
  9. if (isset($_SESSION['nazwajakas.$i'])){ echo '1';
  10. $wynik.$i= $row['pole1']+ $row['pole2'];
  11. echo $wynik;
  12. } else {echo '0'};
  13. }

To tak w telegraficznym skrócie, kod jest dość zagmatwany, ale nie mam pomysłu jak go ładniej napisać
mortus
  1. // odbieranie danych z bazy i przekazanie do szablonu
  2. $data = array();
  3. $sql = "SELECT * FROM `tabela`";
  4. $results = mysql_query($sql);
  5. while($row = mysql_fetch_array($results)) {
  6. $data[] = $row;
  7. }
  8. $smarty->assign('Data', $data);
  9.  
  10. // wyciąganie danych w szablonie
  11. <table>
  12. <tr><th>kolumna 1</th><th>kolumna 2</th><th>kolumna 3</th><th>kolumna 4</th></tr>
  13. {foreach $Data as $row}
  14. <tr><td>{$row[0]}</td><td>{$row[1]}</td><td>{$row[2]}</td><td>{$row[3]}</td></tr>
  15. {/foreach}
  16. </table>

Więcej na ten temat w dokumnetacji Smarty: tablice, pętla foreach.
poczatkujaca12
Tak też kombinowałam [znalazłam na innym forum taki przepis]
ale nie wiem jak w tym uwzględnić
  1. if (isset($_SESSION['nazwajakas.$i'])){ echo '1';
  2. $wynik.$i= $row['pole1']+ $row['pole2'];
  3. echo $wynik;
  4. }

$row[]=$wynik.$i ?
mortus
Koleżanka chyba nie robi tego na jednym pliku? Jeśli tak to trzeba wrócić do podstaw, bo ja właściwie podałem rozwiązanie (w ostateczności można skopiować i wkleić, tyle że do dwóch osobnych plików).

System szablonów ma służyć do odseparowania warstwy logicznej (np. przetwarzanie danych pobranych z bazy) od warstwy prezentacji (wyświetlanie tych przetworzonych danych).

Podstawy.
poczatkujaca12
oczywiście są to 2 pliki :-)
Wcześniej było w 1, i chcę to od siebie rozdzielić...
W jednym dawałam po prostu <? echo $wynik;?> i miałam po problemie :-)
a tutaj nie wiem jak zdefiniować ten wynik, który jest w tabeli, ale nie ma go w bazie bo jest warunkowo generowany z rekordów w bazie

Obeszłam temat...
w php zrobiłam
$petla.='<tr><td>'.$kol['1'].'</td><td>....</td></tr>';
$smarty->assign('petla',$petla);

a w tpl w miejscu gdzie ma się wyświetlać pętla zrobiłam
<table><tr><th>(...)</th></tr>
{$petla}
</table>
mortus
Podałem koleżance odnośniki do dokumentacji, gdzie wyjaśniono, jak to powinno wyglądać. To co w tej chwili koleżanka zrobiła mija się z celem, jakim jest korzystane z systemu szablonów. Czy koleżanka angielskiego nie zna? Czy może ciężko przeczytać te pare linijek tekstu w dokumentacji? Jeśli tak, to proszę nadal tkwić w nieświadomości zła, które koleżanka "popełniła".

PS: Rozwiązanie praktycznie podalem jak na dłoni, ale widzę, że koleżance nie tylko nie chce się czytać, ale i myśleć.
poczatkujaca12
Przeczytałam to co pan podał, kombinowałam też w kodzie, szukałam też we własnym zakresie na innych forach, grupach google, niestety...
Gdyby WSZYSTKO było pobierane z bazy nie byłoby problemów tym czasem są tam też operacje na sesjach i w zależności od tego konkretne dane są dodawane i wyświetlane...

A nie mam też cierpliwości - może w wolnym czasie do tego wrócę, teraz mam pilniejszy projekt...
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-2024 Invision Power Services, Inc.