Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]System szablonów - umiejscowienie poszczególnych elementów strony.
ZuyPan
post 20.07.2010, 07:11:01
Post #1





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


Witam.
Piszę bardzo łatwy system szablonów, taki najprostszy. Ogólnie koncepcja jego działania polegała by na:

- sprawdzenie wybranego języka (w wersji uproszczonej na potrzeby pewnego projektu wczytywany będzie za pomocą include polski język)
- wczytywanie configa, etc.
- jeśli $_GET['strona'] != null includuje stronę o nazwie $_GET['strona'].php
- jeśli $_GET['strona'] == null pobiera treść "powitania" na stronie i includuje plik news.php i przypisuje wszystko do tablicy $tresc np. $tresc['powitanie'] (tu zaczną się schody, opiszę to dalej)
- jeśli $raporter != null usuwa poprzednie wartości tablicy $tresc i nadpisuje ją treścią raportera (raporter - system wyświetlania wiadomości - np. "Pomyślnie dodałem newsa do bazy danych" albo "Błąd podczas łączenia się z bazą danych".)


W taki mniej więcej sposób działał będzie system php, który będzie umieszczony w pliku index.php
Poniżej znajduje się funkcja, która pobierze odpowiedni szablon z folderu tpl.

Mój problem polega na tym, że wiem jak wyświetlać zwykłą treść, np powitanie będzie miało postac $tresc['powitanie'] i tyle, ale jak wyświetlić cały system newsów? newsy w pliku news.php odczytywane są za pomocą pętli, więc nie bardzo wiem jak przyporządkować je do jednej zmiennej. Poza tym w starym systemie strony w pliku news.php są divy pomagające wyświetlić w ładny sposób newsy. To zadziała gdy szablon strony się nie zmieni. A co jeśli styl narzucony przez news.php nie będzie pasował do całego tpl? Poza tym news.php będzie zawierał w sobie stronicowanie.

Może wydawać się to trochę skomplikowane dlatego wrzucę kod

  1. <?php
  2. $zapytanie = 'SELECT * FROM newsy ORDER BY id DESC';
  3. $query = mysql_query($zapytanie, $polaczenie1);
  4. if (mysql_num_rows($query) >= 1){
  5. while ($rekord = mysql_fetch_assoc($query)){
  6.  
  7.  
  8. echo '<div class="news_tytul">';
  9. echo '<font size="2,5"><strong>';
  10. echo $rekord['tytul'];
  11. echo '</strong></font>';
  12. echo '</div>';
  13. echo '<hr>';
  14. echo '<div class="news_tekst">';
  15. echo $rekord['tresc'];
  16. echo '<div class="podpis_news"><br><br>';
  17. echo '<font size="1"><br>Dodane przez: ';
  18. if ($rekord['autor'] != 'Konto usunięte'){
  19. echo "<a href='index.php?akcja=profil&login=".$rekord['autor']."'>".$rekord['autor']."</a>";
  20. }else{
  21. echo $rekord['autor'];
  22. }
  23. echo ' | dnia : ';
  24. echo $rekord['data'];
  25. echo "<br><a href='?akcja=news&akcja2=pokaz_komentarze&id=$rekord[id]'>Pokaż komentarze</a>";
  26. echo '</font></div>';
  27. echo '</div>';
  28. echo '<br>';
  29. echo '</div>';
  30.  
  31. }
  32.  
  33. }else{
  34. echo '<center><font color="red">Brak newsów do wyświetlenia.</font></center>';
  35. }
  36. ?>


Jak widać w linijce np. 8 został użyty div "news_tytul".
Resumując - jak umieszczać system newsów za pomocą zmiennej $tresc['...']? To samo pytanie można by zadać jeśli chodzi o logowanie includowane z pliku logowanie.php (ale tu już łatwiej - jeśli nie zalogowany $tresc['logowanie'] to formularz, a jeśli zalogowany to np. Witaj $_SESSION['nick'])

Jeśli macie jakieś rady, ciekawe "sztuczki" odnośnie systemu szablonów to poradźcie mi smile.gif


--------------------
Blog
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Quantum
post 20.07.2010, 09:23:51
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


piszesz system szablonów, to może zobacz najpierw jak takie najprostsze działają; to co teraz wysłałeś to mieszanie logiki z widokiem, a w to się nie baw, bo do niczego dobrego Cie to nie doprowadzi.

popatrz na ten prosty przykład:

  1.  
  2. // przykładowe dane (za te podstawiamy te wyciągnięte z bazy; tu masz na to wiele sposóbów)
  3. $data = array(
  4. array('id' => 10, 'name' => 'example_10'),
  5. array('id' => 11, 'name' => 'example_11')
  6. );
  7.  
  8. // tworzymy obiekt klasy View - naszego systemu szablonów
  9. $widok = new View('sciezka/do/widoku/szablon.php');
  10.  
  11. // przypisujemy dane
  12. $widok->assign('data', $data);
  13.  
  14. // wyświetlamy, tutaj dzięki metodzie magicznej __toString w klasie View
  15. echo $widok;
  16.  


w pliku sciezka/do/pliku/szablon.php:

tutaj piszemy tabelkę z wynikami: (pamiętaj o zagnieżdzaniu PHP w HTML, nie odwrotnie)
  1. <table>
  2. <tr>id<td></td><td>name</td></tr>
  3. <?php foreach ($data as $record) { ?>
  4. <tr><td><?php echo $record['id'] ?></td><td><?php echo $record['name'] ?></td></tr>
  5. <?php } ?>
  6. </table>


jak taka najprostsza klasa systemu szablonów powinna wyglądać ? mniej-więcej tak:

  1. <?php
  2.  
  3. class View {
  4.  
  5. private $template, $parameters = array();
  6.  
  7. function __construct($template)
  8. {
  9. $this->template = $template;
  10. }
  11.  
  12. public function assign($key, $value)
  13. {
  14. $this->parameters[$key] = $value;
  15. }
  16.  
  17. public function __toString()
  18. {
  19. return $this->render();
  20. }
  21.  
  22. public function render()
  23. {
  24.  
  25. extract($this->parameters);
  26.  
  27. require_once $this->template;
  28.  
  29. return ob_get_clean();
  30. }
  31. }


mam nadzieję, że choć trochę pomogłem w zrozumieniu winksmiley.jpg
Go to the top of the page
+Quote Post
ZuyPan
post 20.07.2010, 09:25:14
Post #3





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


A strukturalnie się jakoś tego nie da? :/
Patrzyłem jak takowe działają, myślę, że rozumiem, ale to wszystko to obiektówka (niestety)

Ten post edytował ZuyPan 20.07.2010, 09:25:39


--------------------
Blog
Go to the top of the page
+Quote Post
Quantum
post 20.07.2010, 09:27:55
Post #4





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


Taką klasę możesz wykorzystać w strukturalnym kodzie, nie musisz używać pełnego OOP, po prostu włączasz ją do projektu i używasz w sposób jaki zaprezentowałem. Dlaczego niestety obiektówka ? smile.gif Masz jeszcze wiele innych systemów szablonów, tych bardziej zaawansowanych, które mają własne pseudo-języki; Smarty, OPT.

Ten post edytował Quantum 20.07.2010, 09:31:02
Go to the top of the page
+Quote Post
ZuyPan
post 20.07.2010, 09:37:23
Post #5





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


Niestety ponieważ ten sposób programowania jest dla mnie jak gonitwa po całym kodzie. Nie potrafię go zrozumieć, jak dla mnie wymaga on znajomości ogromu funkcji, które ja pierwszy raz widzę. Najprościej w świecie nie rozumiem tego sposobu i raczej już tak pozostanie.

Co do wykorzystania tego u mnie no to ok, ale jeśli zaczął bym używać tego w jednym miejscu, to cały skrypt w końcu by się od tego uzależnił. Poza tym nie muszę chyba mówić, że skoro to jest obiektówka to:
a - nie rozumiem tego
b - nie umiał bym tego stosować
a na dokłądkę (ale to już ode mnie)
c - kiepski ze mnie programista

Co do systemów takich jak smarty etc. Daj spokój... Gubię się w takich kombajnach, 5 minut temu pobrałem otp i stwierdziłem "Boże co za idiotyzm" - kosz.
Jak na 3 lata programowania (oczywiście nie regularnie) nie umiem praktycznie nic. Nie winie tu nikogo bo pretensje mogę mieć jedynie do siebie, no ale cóż... Tak czy siak choćbym chciał to pewnie tego nie dam rady zrobić

Ten post edytował ZuyPan 20.07.2010, 09:38:37


--------------------
Blog
Go to the top of the page
+Quote Post
Quantum
post 20.07.2010, 09:55:29
Post #6





Grupa: Zarejestrowani
Postów: 450
Pomógł: 84
Dołączył: 27.11.2008
Skąd: Warszawa

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


Również nie używam OPT czy Smarty, mają własne pseudo-języki, na które nie opłaca mi się tracić czasu, a jeżeli zwykły PHP zagnieżdzony w widoku spełnia swoją rolę - kompletnie nie widzę takiej potrzeby. Co do obiektówki - jeżeli ją zrozumiesz powiesz to samo o strukturalnym co przed chwilą powiedziałeś o OOP. Jest dużo łatwiej zarządzać projektem, który ma rozdzielone zadania na kilka mniejszych klas spełniające jedną rolę. W strukturalnym odwrotnie - totalny bałagan w kodzie. Po kilku dniach przerwy wracasz do kodu i nie masz pojęcia jak to napisałeś, że działa (lub już nie) biggrin.gif Polecam nauczyć się języka od podstaw, czasem po wielu latach można zgubić wiele przydatnych informacji. Wystarczy, że znajdziesz jakiś dobry kurs i możesz szybko nadrobić stracony czas. A jeśli chodzi o programowanie obiektowe, możesz zakupić książkę, osobiście polecam: programowanie obiektowe w php 5, Hasin Hayder; kosztuję ona ok. 37zł z przesyłką, a jest warta uwagi.

pozdrawiam.
Go to the top of the page
+Quote Post
darko
post 20.07.2010, 09:58:12
Post #7





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Programujesz 3 lata w php i celowo unikasz obiektówki? Lepiej, dla własnego dobra, jak najszybciej opanuj chociaż podstawy programowania obiektowego, a szybko zauważysz same zalety.
Kto chce - dąży do rozwiązania problemu, kto nie chce - wymyśla przeszkody. Ty należysz raczej do tej drugiej grupy. Pozostawię bez komentarza nazywanie czegokolwiek idiotyzmem, tylko dlatego, że się tego nie rozumie (i nie chce zrozumieć).


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
ZuyPan
post 20.07.2010, 10:43:33
Post #8





Grupa: Zarejestrowani
Postów: 116
Pomógł: 4
Dołączył: 4.02.2010

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


Czyli Wasza rada to: powtórzyć kurs php a potem obiektówka? Nie powiem aby mi się to specjalnie uśmiechało, ale cóż...


--------------------
Blog
Go to the top of the page
+Quote Post
darko
post 20.07.2010, 10:46:42
Post #9





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(ZuyPan @ 20.07.2010, 11:43:33 ) *
Czyli Wasza rada to: powtórzyć kurs php a potem obiektówka? Nie powiem aby mi się to specjalnie uśmiechało, ale cóż...

Szybko docenisz zalety oop. Powodzenia i owocnej nauki.


--------------------
Nie pomagam na pw, tylko forum.
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: 14.08.2025 - 10:41