Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Smarty -> pobieranie z bazy danych {foreach}, jak to użyć?
poczatkujaca12
post 14.02.2012, 17:18:22
Post #1





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
mortus
post 14.02.2012, 18:11:02
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


W skrypcie PHP dane pobrane z bazy (np. za pomocą pętli while) zapisujesz do tablicy, którą później przekazujesz do szablonu.
Go to the top of the page
+Quote Post
poczatkujaca12
post 15.02.2012, 02:42:07
Post #3





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
mortus
post 15.02.2012, 11:05:12
Post #4





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


  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.
Go to the top of the page
+Quote Post
poczatkujaca12
post 15.02.2012, 11:51:40
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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 ?
Go to the top of the page
+Quote Post
mortus
post 15.02.2012, 12:09:38
Post #6





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
poczatkujaca12
post 17.02.2012, 11:30:50
Post #7





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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>

Ten post edytował poczatkujaca12 15.02.2012, 14:33:37
Go to the top of the page
+Quote Post
mortus
post 17.02.2012, 15:06:58
Post #8





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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ć.
Go to the top of the page
+Quote Post
poczatkujaca12
post 10.03.2012, 01:13:20
Post #9





Grupa: Zarejestrowani
Postów: 107
Pomógł: 0
Dołączył: 24.06.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 01:50