4.4 KiB
Struktura projektu cmsPRO
Punkty wejścia
| Plik | Opis |
|---|---|
index.php |
Router frontendu |
admin/index.php |
Router panelu admina |
ajax.php |
AJAX frontend |
admin/ajax.php |
AJAX admin |
api.php |
Publiczne API |
cron.php |
Zadania cykliczne (newsletter) |
download.php |
Chronione pobieranie plików |
Każdy punkt wejścia ładuje dwa autoloadery (PSR-4 + legacy):
spl_autoload_register(function($class) { /* PSR-4: src/ → autoload/ */ });
spl_autoload_register(function($class) { /* legacy: class.{Name}.php */ });
Wzorzec architektoniczny — Static Factory (MVCish)
autoload/{admin|front}/
├── controls/class.{Module}.php ← obsługa requestów
├── factory/class.{Module}.php ← logika biznesowa + DB
└── view/class.{Module}.php ← generowanie HTML
Przestrzenie nazw: \admin\controls, \admin\factory, \admin\view,
\front\controls, \front\factory, \front\view
Refaktoryzacja DDD — stan aktualny
Projekt migruje stopniowo do architektury DDD. Stare klasy stają się
cienkimi wrapperami delegującymi do nowych klas w Shared\ i Domain\.
Faza 0 ✓ — Autoloader PSR-4
Dodany do wszystkich 6 punktów wejścia. Mapowanie: namespace → autoload/.
Faza 1 ✓ — Shared utilities (autoload/Shared/)
autoload/Shared/
├── Cache/CacheHandler.php ← \Shared\Cache\CacheHandler
├── Email/ ← \Shared\Email\*
├── Helpers/Helpers.php ← \Shared\Helpers\Helpers
├── Html/Html.php ← \Shared\Html\Html
├── Image/ImageManipulator.php ← \Shared\Image\ImageManipulator
└── Tpl/Tpl.php ← \Shared\Tpl\Tpl
Stare klasy (class.S.php, class.Cache.php, itd.) są teraz cienkimi
wrapperami — zachowana pełna kompatybilność wsteczna.
Faza 2 (w toku) - Domain Repositories (autoload/Domain/)
autoload/Domain/
|- Languages/LanguagesRepository.php <- \Domain\Languages\LanguagesRepository OK
|- Settings/SettingsRepository.php <- \Domain\Settings\SettingsRepository OK
|- User/UserRepository.php <- \Domain\User\UserRepository OK
|- Pages/PagesRepository.php <- \Domain\Pages\PagesRepository OK
|- Layouts/LayoutsRepository.php <- \Domain\Layouts\LayoutsRepository OK
`- Articles/ArticlesRepository.php <- \Domain\Articles\ArticlesRepository OK (w toku)
Nastepne: Domain\Banners, Domain\Authors, Domain\Newsletter, ...
Katalogi
| Katalog | Zawartość |
|---|---|
autoload/ |
Klasy PHP (modele, kontrolery, fabryki, widoki, Shared, Domain) |
admin/templates/ |
Szablony panelu admina (17 modułów) |
templates/ |
Szablony frontendu (systemowe, tylko do odczytu) |
templates_user/ |
Szablony frontendu (nadpisywalne przez użytkownika) |
layout/ |
SCSS → CSS (style.scss → style.css) |
upload/ |
Pliki użytkownika (article_images/, article_files/, filemanager/) |
libraries/ |
Zewnętrzne biblioteki (Medoo, CKEditor, Bootstrap, jQuery…) |
plugins/ |
Hooki (special-actions.php, -middle.php, -end.php) |
migrations/ |
Pliki SQL per wersja (np. 0.304.sql) |
updates/ |
Paczki ZIP aktualizacji |
temp/ |
Cache plikowy (gzip, 24h, generowany automatycznie) |
docs/ |
Dokumentacja techniczna |
Kluczowe klasy
| Klasa | Opis |
|---|---|
\Shared\Helpers\Helpers (class.S.php) |
Megautylita: sesja, cookie, email, SEO, detekcja botów |
\Shared\Tpl\Tpl (class.Tpl.php) |
Silnik szablonów |
\Shared\Cache\CacheHandler (class.Cache.php) |
Cache plikowy |
\Shared\Html\Html (class.Html.php) |
Builder komponentów formularzy |
\Shared\Image\ImageManipulator (class.Image.php) |
Manipulacja obrazami + WebP |
class.Article.php |
Model artykułu (ArrayAccess, lazy multilang) |
Baza danych
Prefiks tabel: pp_. ORM: Medoo (globalny $mdb). Konfiguracja: config.php.
Główne tabele: pp_users, pp_articles, pp_articles_langs, pp_pages,
pp_pages_langs, pp_languages, pp_settings, pp_newsletter,
pp_newsletter_users, pp_tags, pp_banners, pp_layouts, pp_backups.
System wielojęzyczny
- Sesja:
$_SESSION['current-lang'] - Tabela:
pp_languages - Składnia w treści:
[LANG:klucz] - Cache tłumaczeń:
$_SESSION['lang-{lang_id}']