Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [smarty] Pętla ?
Bajki
post
Post #1





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
mike
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


No bez jaj. Do manuala ruszyć tyłka się nie chce?
Oczywiście że ma, i to nawet dwa rodzaje: {section} oraz {foreach}
Go to the top of the page
+Quote Post
Bajki
post
Post #3





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


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
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


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ź.
Go to the top of the page
+Quote Post
Bajki
post
Post #5





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował Bajki 8.07.2006, 19:00:46
Go to the top of the page
+Quote Post
AxZx
post
Post #6





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


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





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


Czyli rozumiem, ze musze stworzyc petle, ktora przypisze do tablicy $db wartosci z bazy danych...czy tak ? Dobrze zrozumialem ? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)
Go to the top of the page
+Quote Post
scanner
post
Post #8





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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?
Go to the top of the page
+Quote Post
Bajki
post
Post #9





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


hm (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) oczywiscie ze brakuje ale moje proby zmiany sytuacji spelzly na niczym (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) probowalem robic np.
  1. <?php
  2. //badz
  3. ?>


poprostu nie wiem jak stworzyc ten obiekt $db :/
Go to the top of the page
+Quote Post
scanner
post
Post #10





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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
Go to the top of the page
+Quote Post
Bajki
post
Post #11





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Pozdrawiam i licze na Waszą pomoc (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
scanner
post
Post #12





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




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





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


1. Oto chodzi ? :
  1. <?php
  2. $sql=mysql_query('ZAPYTANIE');
  3. $tabl=mysql_fetch_assoc($sql);
  4. ?>


2. Z tym mam wlasnie klopot (IMG:http://forum.php.pl/style_emoticons/default/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} (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował Bajki 11.07.2006, 10:39:50
Go to the top of the page
+Quote Post
bigZbig
post
Post #14





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


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.  ?>
Go to the top of the page
+Quote Post
Bajki
post
Post #15





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


o raany :/ ale to bylo glupie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Nie wiem skad wzialem ten biekt...poprostu skopiowalem ten kod z dokumentacji smarty (IMG:http://forum.php.pl/style_emoticons/default/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 :
(IMG:http://img141.imageshack.us/img141/7163/snapper11526954565300oa.png)
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #16





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

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


  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}
Go to the top of the page
+Quote Post
Bajki
post
Post #17





Grupa: Zarejestrowani
Postów: 128
Pomógł: 1
Dołączył: 28.04.2005
Skąd: Kraków

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


Ooo super, działa, dzieki (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) !!
A dlaczego uzyl bys foreach ? Dlaczego jest to lepszy sposob od section ? (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

Ten post edytował Bajki 12.07.2006, 12:05:45
Go to the top of the page
+Quote Post
bigZbig
post
Post #18





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Bo foreach jest bardziej naturalne dla programisty php.
Go to the top of the page
+Quote Post
Ja_Szczur
post
Post #19





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 4.12.2005
Skąd: Strzyżów

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


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ść) (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
~Ja_Szczur


Ten post edytował Ja_Szczur 13.07.2006, 10:53:02
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 10:57