Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szablon w php
Forum PHP.pl > Forum > PHP
Strarus
cześć:)
Zrobiłem na próbę mały szablon w php. Czy jest możliwość aby na każdej stronie umieszczać automatycznie ten szablon i tylko wypełniać jakąś jego część? Jeśli tak to w jaki sposób. Wydaje mi się, że się da, ponieważ coś takiego jest chyba w php-fusion smile.gif
phpion
"Kontroler":
  1. <?php
  2. $title = 'Witaj!';
  3. ?>

Widok (szablon):
  1. <h1><?= $title ?></h1>
Strarus
Nie rozumiemjak to ma działać? Czyli jak mam taki szablon: (wyciąłem połączenia z bazą)
  1. <?php
  2. print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">';
  3. print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">';
  4. print '<head>';
  5. print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />';
  6. print '<meta name="robots" content="' . $robots . '" />';
  7. print '<meta name="description" content="' . $description . '" />';
  8. print '<meta name="keywords" content="' . $keywords . '" />';
  9. print '<link rel="shortcut icon" href="favicon.ico" />';
  10. print '<link rel="stylesheet" type="text/css" href="style.css" />';
  11. print '<title>Untitled</title>';
  12. print '</head>';
  13. print '<body>';
  14. echo $strona;
  15. print '</body>';
  16. print '</html>';
  17.  
  18. ?>

To np. index.php wygląda tak?:
  1. <?php
  2. $strona = 'cześć. dzisiaj jest ten i ten...';
  3. ?>


Bo ja troszkę nie zrozumiałem sad.gif
phpion
Tak. Na końcu index.php includujesz plik szablonu i powinno grać.
Strarus
Dzięki. Teraz tylko nie wiem dlaczego gdy umieszczam przed zmienną $content (czy tam strona haha.gif) kod php to strona wygląda jak bez szablonu...

Teraz się wyświetla wszystko ale ten kod php się nie wykonuje, ponieważ widzę puste inputy biggrin.gif
phpion
Cytat(Strarus @ 17.01.2009, 23:14:36 ) *
Teraz tylko nie wiem dlaczego gdy umieszczam przed zmienną $content (czy tam strona haha.gif) kod php to strona wygląda jak bez szablonu...

Może dlatego, że (jak rozumiem) szablon definiujesz zanim powołasz do życia zmienną?

template/layout.php:
  1. <?php
  2. print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">';
  3. print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">';
  4. print '<head>';
  5. print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />';
  6. print '<meta name="robots" content="' . $robots . '" />';
  7. print '<meta name="description" content="' . $description . '" />';
  8. print '<meta name="keywords" content="' . $keywords . '" />';
  9. print '<link rel="shortcut icon" href="favicon.ico" />';
  10. print '<link rel="stylesheet" type="text/css" href="style.css" />';
  11. print '<title>Untitled</title>';
  12. print '</head>';
  13. print '<body>';
  14. echo $strona;
  15. print '</body>';
  16. print '</html>';
  17. ?>


index.php:
  1. <?php
  2. $robots = 'roboty';
  3. $description = 'opis';
  4. $keywords = 'slowa kluczowe';
  5. $strona = '<p>Moja <strong>wyczesana</strong> strona!';
  6.  
  7. include 'template/layout.php';
  8. ?>

Powinno działać. Odpalasz oczywiście index.php, a nie template/layout.php.
Strarus
Hmmm... Ten problem rozwiązałem (nawiasem mówiąc te dane są pobierane z bazy haha.gif) ale pojawił się kolejny. Jak mogę umieścić w zmiennej kod php np. kod rejestracji? Czy ewentualnie można to inaczej rozegrać?
Crozin
W kodzie szablonu nie stosuj cały czas print, print, print. Po co? Daj to jako zwykły kod HTML, a tam gdzie chcesz wyświetlić zmienną PHP dajesz
  1. <?php echo $zmienna; ?>


Do szablonu nie możesz przekazać kodu PHP rejestracji. Tworzysz sobie osobny szablon, gdzie będzie formularz rejestracji. Tworzysz nowy plik na kształt index.php. W nim odbierasz dane (z formularza) wykonujesz całą logikę (sprawdzasz czy dane są poprawne, czy nazwa użytkownika jest wolna, próbujesz rejestrować itd.). Do szablonu przekazujesz jedynie wynik operacji, czyli informację "zostałeś zarejestrowany"/"nie zostałeś: LISTA_BŁĘDÓw"
decha-design
Cytat(Crozin @ 18.01.2009, 00:30:05 ) *
W kodzie szablonu nie stosuj cały czas print, print, print. Po co? Daj to jako zwykły kod HTML, a tam gdzie chcesz wyświetlić zmienną PHP dajesz
  1. <?php echo $zmienna; ?>


Moim zdaniem nie jest to efektywne ... Jak ma milion zmiennych to póżniej idzie człowieka szlag trafić w znalezieniu czegoś ... a na pewno mnie ...

Ja preferują metodę ...
  1. <?php
  2. <meta name="robots" content="' . $robots . '" />
  3. <meta name="description" content="' . $description . '" />
  4. <meta name="keywords" content="' . $keywords . '" />';
  5. ?>


Ja bym rozwiazanie @phpion zrobił jeszcze inaczej ...
templates/header.tpl
  1. <?php
  2. print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">';
  3. print '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">';
  4. print '<head>';
  5. print '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" />';
  6. print '<meta name="robots" content="' . $robots . '" />';
  7. print '<meta name="description" content="' . $description . '" />';
  8. print '<meta name="keywords" content="' . $keywords . '" />';
  9. print '<link rel="shortcut icon" href="favicon.ico" />';
  10. print '<link rel="stylesheet" type="text/css" href="style.css" />';
  11. print '<title>Untitled</title>';
  12. print '</head>';
  13. print '<body>';
  14. ?>


templates/footer.tpl
  1. <?php
  2. print '</body>';
  3. print '</html>';
  4. ?>


index.php
  1. <?php
  2. $robots = 'roboty';
  3. $description = 'opis';
  4. $keywords = 'slowa kluczowe';
  5. include 'templates/header.tpl';
  6. include 'templates/index.tpl'; // lub include 'modules/index.php';
  7. include 'templates/footer.tpl';
  8. ?>
Crozin
@decha-design:
Zdajesz sobie sprawę z tego, że ciężko będzie znaleźć edytor, który będzie kolorował składnię HTMLa przy takim zapisie. Że trzeba się bawić w escapeowanie znaków. Że <?=$zmienna?> zastąpujesz '.$zmienna.' (1 znak różnicy od biedy). Że rezygnujesz z wcięć w tekście?
phpion
Cytat(decha-design @ 18.01.2009, 12:21:59 ) *
Moim zdaniem nie jest to efektywne ... Jak ma milion zmiennych to póżniej idzie człowieka szlag trafić w znalezieniu czegoś ... a na pewno mnie ...

No to tylko Twoim. Wysyłanie statycznych ciągów przez PHP jest kompletną głupotą. Zdecydowanie lepiej (i dla mnie wygodniej) jest robić w ten sposób:
  1. <znacznik><?= $zmienna ?></znacznik>
bartg
Nie kłóćcie się Panowie smile.gif

Starus:
Zastosuj się do pomysłu decha-design. Daj sobie góre szablonu (to includujesz na początku), potem wyswietlaj kod rejestracji, a potem includuj sobie dół szablonu.
Strarus
Dzięki bardzo wszystkim za pomoc. Przeglądając źródła php-fusion zauważyłem podobne rozwiązanie i postanowiłem takie zastosować ale przed tym zapytać o Wasze zdanie na forum, a tu - spora dawka informacji smile.gif Zastosuję się do pomysłu decha-design smile.gif dzięki
Sillan
Chciałem nawiązać do przykładu, który podał decha-design, wynika z niego, że dla każdej podstrony trzeba robić oddzielny index.php (żeby nadać odpowiednie meta). Czy dla stron mających powiedzmy 30 podstron takie rozwiązanie się nadaje czy są może jakieś inne sposoby?
Crozin
Yyyy... w jednym pliku index.php w zależności od wybranej podstrony definujesz jeszcze zmienne zawierające dane meta?
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.