Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [smarty] Pętla ?
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
Bajki
Witam
Czy Smarty "ma taka opcje" jak robienie Petli ? Otoz mam taki kod :
  1. <?php
  2. mysql_connect (localhost, root, krasnal) or die('Nie udalo polaczys sie z baza');
  3. mysql_select_db("zin") or die('Nie udalo sie wybrac bazy');
  4.  
  5.  
  6. $wykonaj = mysql_query("SELECT * FROM artykuly");
  7. echo('<table>');
  8. echo('<tr><td>ID</td> <td>Nazwa</td> <td>Autor</td></tr>');
  9. while($wiersz = mysql_fetch_array($wykonaj) or die(mysql_error()))
  10. {
  11. echo('<tr>');
  12. print "<td>".$wiersz['id']."</td>";
  13. print "<td>".$wiersz['nazwa']."</td>";
  14. print "<td>".$wiersz['autor']."</td>";
  15. echo('</tr>');
  16. }
  17.  
  18.  
  19. ?>


i chcialbym go przerobic tak, aby nie bylo w nim ani troche HTMLa...no poprostu w pelnym tego slowa znaczeniu posluzyc sie Smarty biggrin.gif przedewszystkim zalezy mi na tym fragmencie :
  1. <?php
  2. while($wiersz = mysql_fetch_array($wykonaj) or die(mysql_error()))
  3. {
  4. echo('<tr>');
  5. print "<td>".$wiersz['id']."</td>";
  6. print "<td>".$wiersz['nazwa']."</td>";
  7. print "<td>".$wiersz['autor']."</td>";
  8. echo('</tr>');
  9. }
  10. ?>

czyli samej petli bo z reszta powinienem sobie poradzic

Pzdr
mike
No bez jaj. Do manuala ruszyć tyłka się nie chce?
Oczywiście że ma, i to nawet dwa rodzaje: {section} oraz {foreach}
Bajki
Plik art_search.php
  1. <?php
  2.  
  3. require 'libs/Smarty.class.php';
  4. $template = new Smarty;
  5.  
  6. $template->compile_check = true;
  7. $template->debugging = true;
  8. mysql_connect (localhost, root, krasnal) or die('Nie udalo polaczys sie z baza');
  9. mysql_select_db('zin') or die('Nie udalo sie wybrac bazy');
  10.  
  11.  
  12. $sql = 'SELECT id, nazwa, autor FROM artykuly';
  13. $template->assign('artykuly', $db->getAssoc($sql));
  14.  
  15. $template->display('artykuly.tpl');
  16.  
  17.  
  18. ?>


Plik artykuly.tpl
  1. {foreach key=aid item=art from=$artykuly}
  2. <a href="art.php?id={$aid}">{$art.nazwa} - {$art.autor}</a><br />
  3. {/foreach}


I pokazuje blad :
Cytat
Fatal error: Call to a member function on a non-object in c:\usr\krasnal\www\zin\art_search.php on line 13


Co mu nie pasuje ? :/ Wszystko jest wziete z manuala
mike
Próbujesz wywołać funkcję dla czegoś co nie jest obiektem.
Jaki z tego wniosek?
Taki, że $template nie jest obiektem lub $db nie jest obiektem.

Coś mi się wydaje, że masz wyłączone pokazywanie błędów.
Daj na początek:
  1. <?php
  2.  
  3. error_reporting( E_ALL );
  4. ini_set( 'display_errors', 1 );
  5.  
  6. ?>


I sprawdź czy podane zmienne są faktycznie obiektami.
Jak to zrobić? Variable Handling Functions

Jednym słowem: debuggowanie - Najczęstsze błędy, Zanim zapytasz, to sprawdź.
Bajki
eh ja juz naprawde nie wiem dlaczego to nie dziala...owszem w kodzie znajdowalo sie pare powaznych bledow ale usuniecie ich nie zmienilo ssytuacji...nadal widze ten sam blad. Jest to zapewne spowodowane tym, ze nie istnieje cos takiego jak obiekt $db no ale nietstety nie wiem jak to zmienic :/ powiedzmy ze zrobie $db=array() ale to i tak nic nie daje, jak zrobie $db=array no to wyskakuje, ze oczekiwano "(" no ja juz nie wiem co ja mam robic biggrin.gif a co do Variable Handling Functions...nie wiem jak z tego skozystac :/

plik :
  1. <?php
  2.  
  3. error_reporting( E_ALL );
  4. ini_set( 'display_errors', 1 );
  5.  
  6. require 'libs/Smarty.class.php';
  7. $template = new Smarty;
  8.  
  9. $template->compile_check = true;
  10. $template->debugging = true;
  11. mysql_connect ('localhost', 'root', 'krasnal') or die('Nie udalo polaczys sie z baza');
  12. mysql_select_db('zin') or die('Nie udalo sie wybrac bazy');
  13.  
  14.  
  15. $sql = mysql_query('SELECT id, nazwa, autor FROM artykuly') or die (mysql_error());
  16.  
  17.  
  18. $template->assign('artykuly', $db->getAll($sql));
  19. $template->display('artykuly.tpl');
  20.  
  21.  
  22. ?>
AxZx
poszukaj sobie jakiejs klasy do obslugi mysql
albo napisz sam
klasa ta moze miec taka metoda jakie pobieranie wybranych danych i ladowanie jej do tablicy
i dopiero ta tablice przekazujesz do smarty

oczywiscie nie musisz pisac takiej klasy, moze w tym kodzie wladowac te dane do tablicy po kolei, ale taka klasa przyda ci sie na przyszlosc
Bajki
Czyli rozumiem, ze musze stworzyc petle, ktora przypisze do tablicy $db wartosci z bazy danych...czy tak ? Dobrze zrozumialem ? snitch.gif
scanner
A może powiesz nam, skąd bieżesz zmienną $db?
Nie widzę nigdzie jej inicjalizacji...

Łączysz się z bazą - ok.
Tworzysz zapytanie - ok.

Ale zapytanie nie leci do bazy - bo i niby którędy? Za to próbujesz z jakiegoś nieistniejącego abstrakta bazy wyciagnąć tablicę asocjacyjną z wynikami.

Nie uważasz, ze pomiędzy
  1. <?php
  2. $sql = mysql_query('SELECT id, nazwa, autor FROM artykuly') or die (mysql_error());
  3. ?>
a
  1. <?php
  2. $template->assign('artykuly', $db->getAll($sql));
  3. ?>
czegoś brakuje?
Bajki
hm biggrin.gif oczywiscie ze brakuje ale moje proby zmiany sytuacji spelzly na niczym tongue.gif probowalem robic np.
  1. <?php
  2. //badz
  3. ?>


poprostu nie wiem jak stworzyc ten obiekt $db :/
scanner
Ale dlaczego się uparłes, zeby $db to był obiekt?
Miałoby to sens, gdybyś używął jakiegoś abstrakta bazy (ADOdb, ezSQL, LightDB, czy cokolwiek innego).

Ty jedziesz natywnymi funkcjami MySQLa, a zatem $db u Ciiebie to tablica a nie obiekt.

Wywołujesz zapytanie SQL, pobieraz z niego dane, tworzysz tablice wynikową, przypisujesz ją do smarty.
Easy as 1, 2, 3...

HINT 1: http://pl.php.net/manual/pl/function.mysql-fetch-assoc.php
HINT 2: http://smarty.php.net/manual/en/language.f...ion.foreach.php
Bajki
ehh kurcze no :/ Czuje, ze rozwiazanie jest bardzo proste lecz nie moge sobie z tym poradzic. Byc moze to kwestia tego, ze jak do tej pory nie znalazlem kursu, w którym dobrze opisano tablice tongue.gif ale nie wiem

Ehh...no nie wiem...moge tylko prosic Was zebyscie napisali mi "gotowca" wraz z objasnieniem oco w tym wszystkim chodzi...no ale nie zdziwie sie jak odmowicie winksmiley.jpg

Pozdrawiam i licze na Waszą pomoc winksmiley.jpg
scanner
Odpowiedz mi na 3 pytania:
1. Czy potrafisz wyciagnąć z bazy danych tablicę z wynikami?
2. Czy potrafisz wyrysowac przy pomocy Smarty dowolna tabelę danych?
3. Czy próbowałes cokolwiek zrobić od 9.07.2006, 11:18?

Jeśli na trzecie pytanie odpowiedziales tak, to pokaż to.
Jesli na trzecie pytanie odpowiedzialeś nie, to nie myśl, że gotowca dostaniesz.
Bajki
1. Oto chodzi ? :
  1. <?php
  2. $sql=mysql_query('ZAPYTANIE');
  3. $tabl=mysql_fetch_assoc($sql);
  4. ?>


2. Z tym mam wlasnie klopot winksmiley.jpg
3. Oczywiscie, ale to chyba sa straszne bzdury :
plik art_search.php :
  1. <?php
  2.  
  3. error_reporting( E_ALL );
  4. ini_set( 'display_errors', 1 );
  5.  
  6. require 'libs/Smarty.class.php';
  7. $template = new Smarty;
  8.  
  9. $template->compile_check = true;
  10. $template->debugging = true;
  11. mysql_connect ('localhost', 'root', 'krasnal') or die('Nie udalo polaczys sie z baza');
  12. mysql_select_db('zin') or die('Nie udalo sie wybrac bazy');
  13.  
  14.  
  15. $sql = mysql_query('SELECT id, nazwa, autor FROM artykuly') or die (mysql_error());
  16. $tabl=mysql_fetch_assoc($sql);
  17.  
  18. $template->assign('artykuly', $db->getAll($tabl));
  19. $template->display('artykuly.tpl');
  20.  
  21.  
  22. ?>


plik artykuly.tpl :
  1. <tr>
  2. <td>ID</td> <td>Nazwa</td> <td>Autor</td>
  3. </tr>
  4.  
  5. {section name=co loop=$artykuly}
  6. <tr>
  7. <td><a href="view.php?id={$artykuly[co].id}">view<a></td>
  8. <td>{$artykuly[co].nazwa}</td>
  9. <tr>
  10. {/section}
  11.  

Tyle ze jak widac kozystam z {section} a nie {foreach} gdyz {section} pozwala mi na wykorzystanie {nosection} tongue.gif
bigZbig
Problem to masz tu

  1. <?php
  2. $sql = mysql_query('SELECT id, nazwa, autor FROM artykuly') or die (mysql_error());
  3. $tabl=mysql_fetch_assoc($sql);
  4.  
  5. // skad ty wziales obiekt $db?
  6. $template->assign('artykuly', $db->getAll($tabl));
  7. ?>


  1. <?php
  2.  $result = mysql_query('SELECT id, nazwa, autor FROM artykuly') or die (mysql_error());
  3. $tabl=mysql_fetch_assoc($result);
  4.  
  5.  // moze wystarczy tak
  6. $template->assign('artykuly', $tabl);
  7.  ?>
Bajki
o raany :/ ale to bylo glupie biggrin.gif Nie wiem skad wzialem ten biekt...poprostu skopiowalem ten kod z dokumentacji smarty winksmiley.jpg

Ale teraz pojawia sie kolejny problem...mianowicie strona wyglada tak : www.puszcza.roxtet.com/art_search.html

Czym to moze byc spowodowane ? o.0

Moja tabela 'artykuly' wyglada tak :
Ja_Szczur
  1. <?php
  2.  
  3. $table = array();
  4. $result = mysql_query( 'SELECT id, nazwa, autor FROM artykuly' ) or die ( mysql_error() );
  5. while( $row = mysql_fetch_assoc( $result ) )
  6. $table[] = $row;
  7.  
  8. $template->assign( 'artykuly' , $table );
  9. ?>


osobiście użyłbym foreach:

  1. <tr>
  2. <td>ID</td> <td>Nazwa</td> <td>Autor</td>
  3. </tr>
  4. {foreach from=$artykuly key=key item=item}
  5. <tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
  6. <td><a href="view.php?id={$item.id}">view<a></td>
  7. <td>{$item.nazwa}</td>
  8. <td>{$item.autor}</td>
  9. </tr>
  10. {/foreach}
Bajki
Ooo super, działa, dzieki exclamation.gif!!
A dlaczego uzyl bys foreach ? Dlaczego jest to lepszy sposob od section ? snitch.gif
bigZbig
Bo foreach jest bardziej naturalne dla programisty php.
Ja_Szczur
otóż to:)



---
Wielki Brat patrzy i widzi jak nabijasz posty.
~mike_mech




---
Szczególnie, że od ponad pół roku obecności na tym forum mam ich 6 (słownie: sześć) tongue.gif
~Ja_Szczur
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.