Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Kilka templatek do strony
Forum PHP.pl > Forum > Przedszkole
unlock
Witam, w php póki co programuje strukturalnie, obiektowo dopiero zaczynam sie uczyć.
Mam pytanie, poniewaz nie mam pojecia jak sie za to zabrac. Planuje napisac skrypt, cos w stylu CMS, jakies newsy, rejestracja, logowanie, planuje zrobic to strukturalnie. Chciałbym dowiedziec sie jak zrobic zmiane templatki do strony, tak jak jest to np w Joomli czy PhpBB. Przegladalem kody, ale wraz nie rozumiem. Prosze o jakis NAJPROSTSZY sposó. Jeszcze moze jest jakiś sposób by oddzielić html od php ? bo zawsze robilem np echo "html";. a chodzi o to by do jednego skrypty elastycznie mozna bylo pisac templatki
Eagle
Możesz w jakimś configu przechowywać nazwę aktywnej templatki.
Podczas ładowanie pobierasz tą nazwę i includujesz

skin/nazwa_templatki/news.

Uzyj do tego tego Smarty lub innego systemu szablonów
unlock
hmmm, jak tego uzywac? bo nie mam pojecia
Crozin
Wystarczy oddzielić logikę od widoku.

index.php:
  1. <?php
  2.  
  3. $template = 'default'; //na jakiejs zasadzie (z bazy danych, z ciastka etc) ustalasz jakiego szablonu bedzie uzywał użytkownik
  4.  
  5. $username = 'Crozin'; //nazwa uzytkownika
  6. $currentDate = time(); //aktualna data
  7.  
  8. require './templates/' . $template . '/mainPage.php';
  9. ?>
./templates/default/mainPage.php:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  3.    <head>
  4.        <title>Przykładowy dokument</title>
  5.        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6.        <style type="text/css">
  7.        </style>
  8.        <script type="text/javascript">
  9.        </script>
  10.    </head>
  11.    <body>
  12.        <h1>Witaj <?php echo $username ?></h1>
  13.        <p>Dzisiaj jest <?php echo date('d.m.Y', $currentDate) ?></p>
  14.    </body>
  15. </html>
Tworząc inny szablon, poprostu tworzysz nowy katalog z takimi samymi plikami (jednak z inną zawartością).
unlock
już coś mi się rozjaśniło. Dane dotyczące strony muszą być w pliku konfiguracyjnym, a w miejsce mozna includowac poszczegolne skrypty. Tylko, że wtedy wraz bede musiał łaczyc html z php w skrypcie. Bo np jezeli w skrypcie bedzie html to nie oddzieli sie go tym sposobem
Eagle
Cytat(unlock @ 16.01.2009, 14:25:19 ) *
hmmm, jak tego uzywac? bo nie mam pojecia


Jakiś kurs znalazłem tutaj http://www.webtips.pl/post5950.html
Crozin
index.php to nie jakiś konfig., to logika aplikacji. Tutaj pobierasz wszystkie dane, przerabiasz je, operujesz na nich itd. by ostatecznie udostępnić je (chociażby w postaci przypisania do jakiejś zmiennej) w szablonie.

Przykładowo:
index.php
  1. <?php
  2. //...
  3.  
  4. $news = array();
  5. $r = mysql_query('SELECT * FROM news;');
  6. while($row = mysql_fetch_array($r, MYSQL_ASSOC)){
  7.  //jakies operacje, np:
  8.  $row['min'] = $_SESSION['showMinimalized'] ? 'min' : '';
  9.  
  10.  //przypisujesz dane do zmiennej, która będzie dostepna w szablonie
  11.  $news[] = $row;
  12. }
  13. ?>
Później w szablonie:
  1. ...
  2. <ol>
  3. <?php foreach($news as $n): ?>
  4.  <li class="<?php echo $n['min'] ?>">
  5.    <h2><a href=""><?php echo $n['title'] ?></a></h2>
  6.    <p><?php echo $n['content'] ?></p>
  7.  </li>
  8. <?php endforeach; ?>
  9. ..
W szablonie nie ma już żadnego pobierania/przetwarzania danych - jedynie ich wyświetlanie (ew. formatowanie)
unlock
Teraz rozjaśniło się.
Smarty prawie niczym się nie różni, tylko metoda wyświetlania
Nie rozumiem zapisu :

<?php foreach($news as $n): ?>
<?php endforeach; ?>

oznacza on, ze pomiedzy tym, wyswietla sie wszystkie rekordy z bazy ?
Eagle
foreach wyciąga pierwszy element z tablicy $news i "udostępnia" go pod nazwą $n.

Przykładowo jeżeli masz tablicę
Kod
tablica
- [1]
-- Tytuł
-- Treść
-- Autor
- [2]
-- Tytuł
-- Treść
-- Autor
- [3]
...

To najpierw pobierze element [1] do $n
i będziesz się odwoływał do niego

Kod
$n['tytul']
$n['tresc']
$n['autor']


Wiec w tym wypadku wyświetli Ci wszystkie newsy z bazy.
Crozin
  1. <?php
  2. foreach(...): blah blah endforeach;
  3. //to inna wersja zapisu
  4. foreach(...){
  5.  blah blah
  6. }
  7. ?>
A jeżeli nie wiesz co to foreach: foreach" title="Zobacz w manualu PHP" target="_manual
unlock
ok, dzieki.

Ale jeżeli na danej podstronie szablon ma byc zmodyfikowany o jedna kolumne czy cos, to musze robic nowy plik z tym czy jest jakas metoda na to?
Crozin
Możesz rozwinąć?
unlock
np, w pliku index.php mam 3 kolumny na stronie. a w kategori zalozmy galeria, potrzebne mi sa 4. a wszystko chce polaczyc switchem w jednym pliku i wczytywac skrypty do glownego pliku
Crozin
Możesz zrobić na przykład tak:

1) Plik mainPage.php ograniczyć tylko do:
  1. <?php require './templates/' . $template . '/includeBefore.php'; ?>
  2.       <h1>Witaj <?php echo $username ?></h1>
  3.       <p>Dzisiaj jest <?php echo date('d.m.Y', $currentDate) ?></p>
  4. <?php require './templates/' . $template . '/includeAfter.php'; ?>
includeBefore.php:
  1. <?php
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  4.   <head>
  5.       <title>Przykładowy dokument</title>
  6.       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7.       <style type="text/css">
  8.       </style>
  9.       <script type="text/javascript">
  10.       </script>
  11.   </head>
  12.   <body>
  13. ?>
includeAfter.php
  1. <?php
  2. </body>
  3. </html>
  4. ?>
A jeżeli na jakiejś konkretnej podstronie chcesz zmienić layout to zamiast wczytywać includeBefore.php wczytasz inny plik z 4-ema kolumnami.
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.