Podniosłeś bardzo interesujące i fundamentalne pytanie. Pytanie dotyczące architektury projektu na dużą skalę i organizacji struktury folderów (która jest drugorzędna w stosunku do architektury).
Obecnie najczęstszym podejściem do budowania architektury frameworka CMS jest użycie wzorca MVC. Istnieje kilka dobrych artykułów na temat budowania własnych środowisk MVC, jednym z nich jest Zbuduj środowisko MVC za pomocą PHP .
MVC oznacza Model, Widok, Kontroler. Możesz nazywać te podejścia jak tylko chcesz - MVC, HMVC, MVP. Istotą jest izolowanie poszczególnych elementów systemu. „Kontroler” pobiera dane z „Modelu” i wysyła je do „Widoku”, który wyświetla ostateczny kod HTML. Zaimplementowałeś już „V” w swoim contacts.php
i „MC” w swoim contacts_class.php
. Więc odizolowałeś widok od modelu i kontrolera. Teraz możesz łatwo zmienić „Widok”, pozostawiając nienaruszone inne części.
Nie sugeruję, abyś ślepo podążał za wzorem MVC, MVP lub czymkolwiek innym „MV”. Jest to kwestia stosowności, skuteczności i smaku.
Wspólna dynamiczna aplikacja internetowa może zawierać takie składniki, jak:
- Powiedzmy, że punkt wejścia
index.php
- Biblioteki / klasy pomocnika
- Router żądania
- Moduły, komponenty lub kontrolery
- Silnik szablonów lub może pojedyncze widoki
Prawdziwa aplikacja internetowa może zawierać dowolne inne komponenty, takie jak procedury obsługi zdarzeń, dyspozytorzy zdarzeń i zaczepy, ale w rzeczywistości są to niuanse. Cóż, pozwól mi przedstawić to tak, jak chcę to przedstawić:
Wspólna procedura operacyjna ramowa, jak następuje:
- Żądanie przeglądarki jest wysyłane bezpośrednio do punktu wejścia wykonywalnego / script (
index.php
).
- Skrypt punktu wejścia ładuje biblioteki pomocnicze, klasy i dokonuje dalszej inicjalizacji naszego środowiska programistycznego.
- Adres URL jest przekazywany do instancji routera żądania. Ten krok może być częścią kroku 2.
- Router żądający analizuje adres URL i przekazuje operację do określonego komponentu, modułu lub kontrolera.
- Komponent (lub kontroler) przetwarza skierowane żądanie i wysyła dane do renderowanego widoku.
Odpowiednia struktura folderów projektu jest pokazana na schemacie.
Sugerowałbym, abyś zbadał, w jaki sposób wdrażane są inne ramy. Zalecane CMS / frameworki na początek to CodeIgniter, OpenCart, Joomla 1.5 i Tango CMS.