Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Szablony..., Wasze propozycje, rozwiazania
kicaj
post
Post #1





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Jestem ciekaw jak Wy postepujecie z wyswietlaniem wynikow z np. z bazy piszac swoje templatesy...

Zalozmy ze mamy takie szablon:
  1. <table border="1">
  2. <tr>
  3. <td>lewa</td>
  4. <td>srodek</td>
  5. <td>prawa</td>
  6. </tr>

Teraz w jego srodku chcialbym wyswietlic tabelke ktora zawiera rekordy z MySQL, np. 5 wierszy? W jaki sposob Wy to rozwiazujecie?

P.S. Chodzi o jak najprostsze rozwiazania:)

Ten post edytował kicaj_ 11.09.2004, 00:00:29


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
mpps
post
Post #2





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


zależy.
jeżeli rekordy mają nagłówki, to warto zastosować coś takiego:
  1. <? $result = mysql_query("SELECT * FROM news") or die("BAD QUERY");
  2. ?>
  3. <table border="1">
  4. <tr>
  5. <td>lewa</td>
  6.  
  7. <!-- środek początek -->
  8. <td>
  9. <table border="1">
  10. <? while($rek = mysql_fetch_array($result))
  11. {
  12. ?>
  13. <tr>
  14. <td>
  15. <?
  16. echo $rek[0]; //nagłówek rekordu, np. data
  17. ?>
  18. </td>
  19. </tr>
  20. <tr>
  21. <td>
  22. <?
  23. echo $rek[1]; //rekord
  24. ?>
  25. </td>
  26. </tr>
  27. <?
  28. }
  29. ?>
  30. </table>
  31. </td>
  32. <!-- środek koniec -->
  33.  
  34. <td>prawa</td>
  35. </tr>

przykład?
newsy, gdzie każdy news będzie miał swoją datę jako nagłówek.
jeżeli nie, to wystarczy zwykły <BR>.
można też połączyć obydwa rozwiązania.
np. (piszę w skrócie):
  1. <TD>
  2. rekord_data
  3. <BR>
  4. rekord_news
  5. </TD>


Ten post edytował mpps 11.09.2004, 06:55:27


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
kicaj
post
Post #3





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


eekh, nie zrozumiales...


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
mpps
post
Post #4





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


to rozwiń myśl, chyba, że uważasz, że dla innych jest wystarczająco czytelnie.
chętnie poczytam odpowiedzi, bo też mnie to interesuje.


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
kicaj
post
Post #5





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Okey:)
Wiekszosc robi szablony tak:
  1. <?php
  2. $tpl -> setValue( 'nazwa', 'Jakas tam wprowadzona nazwa' );
  3. $tpl -> Display();
  4. ?>

W szablonie {nazwa} zamienia na "Jakas tam..."
I teraz jak Wy rozwiazujecie wyswietlanie wynikow np. z bazy danych, gdzie wiersze sa automatycznie generowane?

Ten post edytował kicaj_ 11.09.2004, 14:38:53


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
chfast
post
Post #6





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

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


Ja bym zrobił tak:
Wszystkie wiersze z wyniku zapytania wrzuciłbym do jednej tablicy. I przekazałbym tą całą tablcę do systemu szablonów, który obsługuje tablice i tam już wszystko wyświetlał. W Smarty służą do tego znacznik section i foreach. To bardziej uniwersalny sposób.

Drugi, który przychodzi mi do głowy, Wykorzystując ADOdb i Smarty:
Po wykonaniu zapytania za pomocą ADOdb przekazałbym do Smarty cały obiekt $Result. Myśle, że możnaby go ładnie wyświetlić korzystając z możliwości Smarty.

Pisze teoretycznie, bo nie mam czasu sprawdzać. Innych systemów szablonów nie znam. Jakby coś było niejasne w mojej wypowiedzi to pytaj.


--------------------
pozdrawiam, chfast
Go to the top of the page
+Quote Post
kicaj
post
Post #7





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Chce napisac wlasne szablony. I zacialem sie na wyswietlaniu wynikow z bazy mysql? Nie wiem kompletnie jak to rozwiazac... Kombinuje jak zrobic zeby dany wiersz byl powtarzany tyle razy ile jest rekordow w bazie smile.gif Ma ktos jakis pomysl?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
chfast
post
Post #8





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

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


Cytat(kicaj_ @ 2004-09-11 19:43:40)
Chce napisac wlasne szablony. I zacialem sie na wyswietlaniu wynikow z bazy mysql? Nie wiem kompletnie jak to rozwiazac... Kombinuje jak zrobic zeby dany wiersz byl powtarzany tyle razy ile jest rekordow w bazie smile.gif Ma ktos jakis pomysl?

No to ja cię nie rozumiem. Chcesz napisać funkcję w twoim systemie szablonów? Jeśli tak to wykorzystaj php. Jeśli nie to nie wiem co ty kombinujesz..


--------------------
pozdrawiam, chfast
Go to the top of the page
+Quote Post
M4chu
post
Post #9





Grupa: Zarejestrowani
Postów: 135
Pomógł: 0
Dołączył: 28.09.2003
Skąd: Rzeszów

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


Zrob tak jak w smarty, np
  1. <?php
  2. $wiersze = $db->getRows(&#092;"SELECT (...)\");
  3. $tpl->setValue('wiersze', $wiersze);
  4. ?>

  1. {foreach $wiersze as $wiersz}
  2. <tr>
  3. <td>{$wiersz['pole']</td>
  4. </tr>
  5. {/foreach}
Go to the top of the page
+Quote Post
FiDO
post
Post #10





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Cytat(kicaj_ @ 2004-09-11 20:43:40)
I zacialem sie na wyswietlaniu wynikow z bazy mysql? Nie wiem kompletnie jak to rozwiazac... Kombinuje jak zrobic zeby dany wiersz byl powtarzany tyle razy ile jest rekordow w bazie smile.gif Ma ktos jakis pomysl?

To co Ty piszesz system szablonow zintegrowany z baza danych? Po co.. Wystarczy zrobic obsluge tablic w szablonach i tyle.
A z bazy pobrac najpierw wszystko, wprowadzic do tablicy i dopiero przypisac do zmiennej w szablonie. Bez uzycia zadnych klas do bazy jest to kilka(nascie) linijek, ale z klasami to nie ma problemu, moze to byc jedna linijka..
  1. <?php
  2.  
  3. // AdoDB
  4. $rs = $db->GetAll(&#092;"SELECT...\");
  5.  
  6. ?>


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
kicaj
post
Post #11





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


  1. <?php
  2. class Templates
  3. {
  4. function setFile() 
  5. //...
  6.  
  7. function setValue( $name, $value )
  8. {
  9. if( is_array( $value ) )
  10. {
  11. // ...questionmark.gif
  12. }
  13. else
  14. {
  15. $this -> array_name[] = &#092;"{\" . $name . \"}\";
  16. $this -> array_value[] = $value;
  17. }
  18. }
  19.  
  20. function Display()
  21. {
  22. echo str_replace( $this -> array_name, $this -> array_value, $this -> set_file );
  23. }
  24. }
  25.  
  26. $query = &#092;"SELECT * FROM calendar LIMIT 15\";
  27. $results = mysql_query( $query );
  28.  
  29. $a = array();
  30.  
  31. while( $row = mysql_fetch_array( $results ) )
  32. {
  33. $a[] = $row['day'];
  34. }
  35.  
  36. $tpl = new Templates;
  37. $tpl -> setFile( 'index.html', 'tpl' );
  38. $tpl -> setValue( 'title', 'Witamy!' );
  39. $tpl -> setValue( 'a', $a );
  40. $tpl -> Display();
  41. ?>
Jak to mam przerobic zeby dzialalo poprawnie, tak jak bym chcial?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
FiDO
post
Post #12





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

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


Musisz dorobic obsluge tablic w klasie do szablonow. W przypadku klasy, ktora nie kompiluje szablonow do kodu php, tylko robi wszystko w locie, nie jest to takie hop siup, musisz troche poczytac, najlepiej jakies inne klasy ktore takie cos maja.


--------------------
Brak czasu :/
Go to the top of the page
+Quote Post
chfast
post
Post #13





Grupa: Zarejestrowani
Postów: 222
Pomógł: 0
Dołączył: 3.04.2003
Skąd: Wrocław

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


Ja bym to zrobił inaczej.
  1. <?php
  2. class Templates
  3. {
  4. function setFile()
  5. //...
  6.  
  7. function setValue( $name, $value )
  8. {
  9. $this->vars[$name] = $value;
  10. return true;
  11. }
  12.  
  13. function Display()
  14. {
  15. // Patrz niżej
  16. }
  17. }
  18. ?>

Zastosowałbym dwa znaczniki w szablonie. Jeden do obsługi płaski zmiennych, drugi do obsługi tablic. Ten drugi musiałby chyba przypominać {foreach} lub {section} z Smarty. Nie widze raczej sposobu, żeby zrobić to prościej, będzie konieczne zastowanie wyrażeń regularnych. No chyba, że ustalisz sobie pewien stały schemat wyświetlania tablic i będziesz konkretny wygląd regulował stylami CSS. Ale ty byłoby zbytnie uproszczenie...


--------------------
pozdrawiam, chfast
Go to the top of the page
+Quote Post
kicaj
post
Post #14





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Hehe, tak sie meczylem a tylko bylo potrzebna petla foreach" title="Zobacz w manualu PHP" target="_manual() tongue.gif

O to co wykombinowalem:
  1. <?php
  2. class Templates
  3. {
  4.     //...
  5.  
  6.     function setSection( $name, $values )
  7.     {
  8.         // Ta funkcja dziala narazie tylko i wylacznie z ponizszym szablonem :)
  9.         // Rozbudowa pozniej...
  10.         preg_match_all( '/({@wiersze})(.*?)({/@wiersze})/is', $this -> set_file, $matches );
  11.  
  12.         $new_line = '';
  13.         
  14.         $a = &#092;"{\" . $name . \"}\";
  15.  
  16.         foreach( $values as $value )
  17.         {
  18.             $new_line .= str_replace( $a, $value, $matches[2][0] );
  19.         }
  20.         
  21.         $this -> set_file = preg_replace( '/({@wiersze})(.*?)({/@wiersze})/is', $new_line, $this -> set_file );
  22.     }
  23.  
  24.     //...
  25. }
  26.  
  27. while( $row = mysql_fetch_array( $results ) )
  28. {
  29.     $match_home[] = $row['match_home'];
  30.     $match_guest[] = $row['match_guest'];
  31. }
  32.  
  33. $tpl = new Templates;
  34. $tpl -> setFile( 'index.html', 'tpl' );
  35. $tpl -> setSection( 'lewa', $match_home );  
  36. $tpl -> setSection( 'prawa', $match_guest );  
  37. $tpl -> Display();
  38. ?>
Szablon:
  1. <table border="1">
  2. {@wiersze}
  3. <tr>
  4. <td>{lewa}</td>
  5. <td>{prawa}</td>
  6. </tr>
  7. {/@wiersze}

Problem polega na tym ze jesli ustawie dwa razy `setSection()` to nie zamienia mi tego drugiego, krotko mowiac: metoda dziala tylko dla pierwszego (tutaj dla {lewa}). Jak to przeboic zeby zamienialo obydwa?

Ten post edytował kicaj_ 13.09.2004, 17:10:45


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
SHiP
post
Post #15





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


http://ship.me2.pl/index.php?d=7&id=22

Tam masz arta(mojego autorstwa biggrin.gif) jak napisać własny systm szablonów... Z petlami, instrukcjami warunkowymi i w ogóle smile.gif Metoda jest inna niż u wszystkich innych kolegów phpistów biggrin.gif Przynajmniej ja takiej jak moja nie widziałem.. Moze sie przyda...


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
jbiz
post
Post #16





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 10.03.2004
Skąd: z duszy :]

Ostrzeżenie: (20%)
X----


w TemplatePower wygladaloby to tak:

Kod
<table border="1">
<tr>
<!-- START BLOCK : blok -->
<td>{wiersz}</td>
<!-- END BLOCK : blok -->
</tr>
</table>


  1. <?php
  2.  
  3. $tpl = new TemplatePower( &#092;"szablon.tpl\" );
  4. $tpl->prepare();
  5. $zap = mysql_query(&#092;"SELECT pole FROM tabela\");
  6. while ($odp = mysql_fetch_array ($zap) )
  7. {
  8. $tpl->newBlock(&#092;"blok\");
  9. $tpl->assign(&#092;"wiersz\", $odp['pole']);
  10. }
  11. $tpl->printToScreen();
  12.  
  13. ?>


chyba nie da sie przejrzysciej smile.gif
ja bym nie podolal wlasnego template systemu napisac to wiem na sete, szczegolnie ze ten jest bardzo cacy i za darmo smile.gif

Ten post edytował jbiz 14.09.2004, 14:45:17
Go to the top of the page
+Quote Post
kicaj
post
Post #17





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Hehe juz "wierszowanie" mam za soba smile.gif

Teraz zastanawia mnie jak rozwiazywane sa formularze i ich validacja.

Mam takie szablony:
form.php - formularz logowanie (nick, haslo, submit)
panel.php - strona widoczna po zalogowaniu

Moge zrobic tak:
Kod
{if $submit}
panel.html
{elseif $submit}
form.html
{endif $submit}

Ale ten sposob mnie ogranicza.
W samym php zrobilbym to tak:
  1. <?php
  2. $ctrl = 0;
  3.  
  4. if( isset( $_POST['sumit'] ) )
  5. {
  6. if( empty( $login ) )
  7. {
  8. echo &#092;"Wpisz nick!\";
  9. }
  10. elseif( empty( $haslo ) )
  11. {
  12. echo &#092;"Wpisz haslo!\";
  13. }
  14. else
  15. {
  16.  $ctrl = 1;
  17.  echo &#092;"Okey!\";
  18.  }
  19. }
  20.  
  21. if( $ctrl == 0 )
  22. {
  23. //formularz
  24. }
  25. ?>

Jak by to mialo wygladac z szablonami?
Wstawianie tyle {if} itp do szablonow mija sie z celem...


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
SHiP
post
Post #18





Grupa: Zarejestrowani
Postów: 697
Pomógł: 47
Dołączył: 19.12.2003
Skąd: Lublin

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


dajesz blok w pliku tpl {errors}

i później
  1. <?php
  2. $ctrl = 0;
  3.  
  4. if( isset( $_POST['sumit'] ) )
  5. {
  6. if( empty( $login ) )
  7. {
  8. $err=&#092;"Wpisz nick!\";
  9. }
  10. elseif( empty( $haslo ) )
  11. {
  12. $err&#092;"Wpisz haslo!\";
  13. }
  14. else
  15. {
  16.  $ctrl = 1;
  17.  $err=&#092;"Okey!\";
  18.  }
  19. }
  20.  
  21. if( $ctrl == 0 )
  22. {
  23. //formularz
  24. }
  25. ?>


I póżniej przkazujesz zmienną $err jako blok {errors}
Troche złą nazwe dałem nie chce mi sie poprawwać tongue.gif


--------------------
Warsztat: Kubuntu, PhpStorm, Opera
Go to the top of the page
+Quote Post
kicaj
post
Post #19





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

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


Okey, jakos to poszlo, jak cos to wroce to tego smile.gif

Teraz mam cos takiego - kod w szablonie:
Kod
{session ? plik1.html : plik2.html}

Ma to za zadanie jak zwykly warunek if" title="Zobacz w manualu PHP" target="_manual() w formie skroconej.
Teraz, jak mozna zrobic zeby ta `session` bylo zmienna i gdy np. sesja jest aktywna to by byl includowany `plik1.html`?
Jakies pomysly?


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
Ace
post
Post #20





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

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


hm, mysle ze powinienes w jakis sposob identyfikowac zmienne, czyli np...
{$session ? plik1.html : plik2.html} $ - w smarty wystepuje i tak identyfikowana jest zmienna. Tez mozesz zrobic to w ten sposob
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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 Aktualny czas: 22.08.2025 - 04:06