Oddzielenie kodu PHP od HTML

Aby nie kopiować treści problemu wraz z dalszymi postami (które należy przeczytać), zamieszczam link do tematu w grupie dyskusyjnej.

http://groups.google.pl/group/pl.comp.lang…8e6cc795ccaa382

Co o tym wszystkim myślicie? W jaki sposób powinienem prawidłowo wydzielić szablony z kodu PHP w większości modułów? Co zaś ze strukturą modułów?

Ja jestem można tak powiedzieć amatorem programowania w php, ale nie wyobrażam sobie abym musiał oddzielać php i html.

Może mój stopień programowania jest zbyt niski;)

zależy w jakim celu piszesz aplikację.

Ja jestem zwolennikiem systemu szablonów, ale tylko autorskiego ;]

Wymyślasz strukturę - jeden ogólny szablon, czy też kilka mniejszych…

Odwołujesz się który chcesz wybrać i … podmieniasz :wink:

Moja strona w profilu jest zrobiona na szablonie - przez co wystarczą 4 linijki kodu w pliku php, a szablon modyfikuję ‘globalnie’ :wink:

Wracając jeszcze do układu plików - w odpowiednim miejscu w BODY

trzeba wyświetlić wynik. Są 2 sposoby:

A. Dołączać plik szablonu dopiero w odpowiednim miejscu w głównym

szablonie (w

) na podstawie zdefiniowanej wcześniej stałej

(dobre dla serwerów z mniejszą ilością RAM)

B. Generować wszystko przed i zapisać do zmiennej np. $output,

a w głównym szablonie w

(większe zużycie RAM-u).

Zazwyczaj wystarczy przed pobrać dane, a w szablonie je tylko

wyświetlić. Czasem jednak pobranych rekordów jest więcej - używam

wtedy:

foreach( $result as $tablica ) { ... }

Nieraz też zachodzi potrzeba wyświetlenia tylko jakiegoś komunikatu,

ale obydwa rozwiązania się nadają.

Chyba, że zmiana tytułu strony w każdym z modułów nie jest ważna.

Aktualnie dołączany jest tylko 1 plik dla modułów zawartości (art,

plik, strona inf., obraz, news). On ustawia tytuł bądź przekierowuje

na 404.

Wszystkie pozostałe moduły są dołączane już przez główny szablon na

podstawie stałej MOD - include(MOD).

jest ustawiany

automatycznie przez index.php - jeżeli istnieje klucz w tablicy $lang

(w pliku języka) taki sam, jak nazwa modułu (np. user, cats, poll).

Ewentualnie z tych plików można wywoływać szablony (tak jak

dotychczas) i nie robić już zamieszania. Zresztą tytuł strony "Pokaż

użytkownika: anonim" nie jest na tyle ważny jak tytuły kategorii (nimi

zajmuje się index.php) bądź artów, plików, obrazów, wolnych stron czy

nowości, co znacznie ułatwi pozycjonowanie (niektórzy też pomijają

wpisy w Google, jeżeli część tytułu nie jest pogrubiona).

Myślę, że mi coś doradzicie. :slight_smile:

sądzę, że można zrobić tak jak to jest w CakePHP czy CodeIgniter

pliki widoków zawierają kod php, który służy jedynie do przetwarzania, ładnego formatowania i wyświetlania informacji wcześniej pobranych

np:

Wracając jeszcze do układu plików - w odpowiednim miejscu w BODY trzeba wyświetlić wynik. Są 2 sposoby:

Pre-generowanie (A)

Wykorzystanie buforowania wyjścia i dołączanie modułów wraz szablonami przed . W ten sposób mamy już całą zawartość do wyświetlenia + ustawiony tytuł

. Rozwiązanie zapisuje wynik działania modułów w pamięci RAM (albo SWAP :D) - wraz z komentarzami, aby potem je wrzucić do szablonu głównego w .

:: Znacznie większe zużycie RAM-u (np. 10 jednoczesnych wywołań po 50 kb = 500 kb - ok 1 MB).

Generowanie krok po kroku (B)

Wszystkie moduły są dołączane z głównego szablonu na podstawie stałej MOD zdefiniowanej przez index.php. Jednak przed dla modułów treści (pliki, arty, wolne strony, newsy, obrazy) wykonywany jest dodatkowy plik - content.php, który pobiera dane o zawartości i jej kategorii oraz ustawia tytuł, gdy użytkownik ma dostęp. Dla innych modułów

jest ustawiany automatycznie przez index.php - jeżeli istnieje klucz w tablicy $lang (w pliku języka) taki sam, jak nazwa modułu (np. user, cats, poll). Zresztą tytuł strony “Pokaż użytkownika: anonim” nie jest na tyle ważny jak tytuły kategorii (nimi zajmuje się index.php) bądź artów, plików, obrazów, wolnych stron czy nowości, co znacznie ułatwi pozycjonowanie (niektórzy też pomijają wpisy w Google, jeżeli część tytułu nie jest pogrubiona).

:: Mniejsze zużycie RAM-u, lecz narzucony szablon dla większości modułów (nie liczyć np. głosowania, logowania czy pobrania pliku, bo to się wywołuje z innych plików niż index.php)

Być może zostanę przy B jak aktualnie, chyba, że są znacznie

przekonujące argumenty za rozwiązaniem pre-generowania (A), wtedy piszcie, co wiecie. :slight_smile: