Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CMS] Budowa systemu CMS a szablony
Forum PHP.pl > Forum > PHP
WebCM
Myślę nad tym, jak rozwiązać problem z modułowością systemu CMS oraz szablonami. Ważne, by rozwiązanie było optymalne i wydajne. Przedstawię 2 tezy (lecz może ktoś ma lepszy pomysł?). Nie piszcie o Smarty, Autotheme, itp.

Rozpoczynanie od bazowego pliku index.php
Tak jak obecnie. Większość podstron dołączanych jest z 1 głównego pliku index.php.

Plusy:
+ Nie trzeba wpisywać kodu odp. za wyświetlenie szablonu w każdym module
+ Przejrzystszy plik szablonu (dołączany w index.php), a szablon dołącza plik wybierający moduł lub kategorię

Minusy:
- Dłuższe adresy stron
- Brak większej ingerencji w kod HTML (m. in. tytuł strony)

Dołączanie pliku jądra przez niezależne moduły
Są pliki modułów: index.php, news.php, art.php, itp. Od nich będzie zależało, czy dołączą później plik odpowiedzialny za wyświetlenie pełnej oprawy graficznej, czy tylko samego środka (bez menu i nagłówka).

Plusy:
+ Większa ingerencja w kod (przed <html>, w <head>, <title>, <meta> itp.)
+ Trochę krótsze adresy

Minusy:
- Bardziej skomplikowana sprawa z szablonem

Które rozwiązanie preferujecie?
Uargumentujcie i uzasadnijcie swoją wypowiedź.


Ostatnio umożliwiłem wtyczkom dołączanie pliku head.php w sekcji <head> (jeśli istnieje odpowiedni plik na podstawie parametru $_GET['co']). Nie wiem, czy to dobre rozwiązanie. Mam nadzieję, że próbowaliście różnych sposobów i wiecie, który jest dobry a wydajny.

DODANE: Teraz przyszło mi do głowy rozwiązanie - index.php?art=5, index.php?file=5 (lecz może przez to skrypt polecieć na wydajności?).
starach
Ja preferuję OOP + MVC - Object Oriented Programing + Model View Controller.
Oddzielanie warstwy prezentacji od warstwy logicznej + wielojęzyczny mod_rewrite.

edit>
Ja zaczynałem od pierwszego rozwiązania. - od bazowego pliku index.php
wydaje mi się że dzięki temu łatwiej było mi sie przerzucić na to co stosuję teraz.
dr_bonzo
Cytat
Minusy:
1. - Dłuższe adresy stron
2. - Brak większej ingerencji w kod HTML (m. in. tytuł strony)


1. nice urls i masz krotkie example.com/news/show/3
2. tytul nadal mozesz zmienic, w widoku/szablonie/akcji ustawiasz $tytul_strony i w glownych szablonie wstawiasz go do <title> jesli zostala taka zmienna zdefioniowana
bogdan89
Cytat(WebCM @ 10.04.2007, 22:14:28 ) *
DODANE: Teraz przyszło mi do głowy rozwiązanie - index.php?art=5, index.php?file=5 (lecz może przez to skrypt polecieć na wydajności?).


a nie lepiej zrobic to w ten sposób?
index.php?action=art&id=4
index.php?action=news&id=6

wtedy najpierw wczytujesz zawartosc zmiennej action, wybierasz odpowiedzialny za dana akcje modul... odrzucajac wszystkie inne nie pasujące...
questionmark.gif
WebCM
Zasady MVC są zbyt ogólne - nie dla każdego projektu - więc ich w pełni nie wykorzystam. Trzeba jeszcze rozwiązać sposób wyświetlania szablonów.

Wziąłem się za zmianę budowy skryptu, lecz tu też są schody. Mam nadzieję, że mi doradzicie szybkie, wydajne i optymalne rozwiązanie. Aktualnie stosuję:

Kod
Index.php
- dołącz kernel.php (podstawowe pliki)
- dołącz plik modułu - mod/(moduł).php
---- zazwyczaj: pobierz dane z bazy, zdefiniuj stałe TITLE i FILE
- pisz "<html>...<title>(stała TITLE)</head><body>"
- dołącz plik szablonu (wnętrze <body>)
---- dołącz plik stałej FILE (zdefiniowanej przez plik modułu)
- pisz </body></html>

Rozwiązanie już pozwala na zmianę tytułu, używanie nagłówków i dodanie treści do <head>, lecz jest o tyle niewygodne, że trzeba używać 2 plików dla modułu - chyba, że o to chodzi. smile.gif Np. aby wyświetlić listę użytkowników, trzeba najpierw dołączyć plik, który pobierze dane, a potem inny, który wyświetli listę - czyli plików będzie zdecydowanie więcej, chyba że część się złączy.

Co jednak myślicie o startowaniu z art.php, file.php, users.php zamiast z index.php? Wtedy bardziej pasowałby tu prosty system szablonów (np. ze zmienną {content}, od której rozwaliłoby się szablon funkcją explode() na 2 części) lub dołączanie 2 plików - np. header.php i footer.php. Ewentualnie jeszcze można w pliku modułu definiować funkcję BODY() i wywoływać ją w pliku skórki - już o 1 mniej, ale za to większe zużycie pamięci w przypadku większych modułów i konieczność definiowania globalnych zmiennych, np. CFG, LANG...

Tak właściwie jądro (wybór użytkownika, języka, itp.) jest w pliku kernel.php, więc nadaje się i jedno i drugie rozwiązanie. Tylko pytanie - które jest bardziej praktyczne?


Wcześniej było tak:
Kod
Index.php
- dołącz kernel.php
- pisz "<html><head>..."
- jeśli plugins/(co)/head.php istnieje, dołącz go
- pisz "</head><body>"
- dołącz plik szablonu
--- dołącz d.php
------ dołącz plik modułu lub odpowiedzialny za wyświetlenie kategorii
- pisz "</body></html>"
Kilka plików (np. admin, login) jest niezależnych od index.php.
Rozwiązanie było o tyle dobre, że nie wymagało umieszczania dodatkowego kodu, wyświetlającego szablon lub definiującego zmienną FILE - wystarczył sam parametr CO w adresie, by dołączyć odpowiedni moduł. Może lepiej do niego powrócić? Uniemożliwia on jednak dostęp do nagłówków i zmianę tytułu z poziomu index.php.
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.