Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rozplanowanie struktury katalogów CMS
Forum PHP.pl > Inne > Hydepark
Evinek
Witam.

Zastanawiam się ciągle jak zrobić strukturę katalogów w CMS. Aktualnie planuje strukturę modułów więc na ten temat chciałbym się czegoś dowiedzieć.

Linki u mnie będą wyglądać w tym stylu:

Kod
/
-/news (moduł: news, akcja: domyślna)
--/news/:id (moduł: news, akcja: show, parametry: id)
-/gallery (moduł: gallery, akcja: domyślna)
--/gallery/:id (moduł: gallery, akcja: show, parametry: id)

/admin
-/admin/news (moduł: news, akcja: domyślna [list])
--/admin/news/add (moduł: news, akcja: add)
--/admin/news/edit/:id (moduł: news, akcja: edit, parametry: id)


Panel admina zamierzam zrobić tak, że gdy znajdzie w pierwszym członie linku słowo admin to wtedy moduł będzie ładowany z folderu admin, a jak nic nie będzie to wtedy z public (lub inna nazwa?).

Muszę więc zrobić jakiś fajny układ folderów. Mój pomysł póki co:
Kod
/module/
-admin/
--default.php
--news/
---default.php
---list.php
---add.php
---edit.php
-public/
--default.php
--news/
---list.php
---show.php


I teraz pytanko, jak wy robicie w własnych CMS'ach takie struktury? Fajnie jak by ktoś dał screeny dosłownie całej struktury. Przeglądałem jakieś CMS'y typu Joomla, Wordpress, Drupal, PHP Fusion i inne oraz skrypty for takie jak IP Board i różne malutkie, ale żadne z wszystkich struktur jakoś mnie nie przekonały. Choć IP Board najbardziej przypadło mi do gusty ze wszystkich innych lecz to nadal nie to.
I w ogóle czy mój pomysł to dobry sposób na tę strukturę?
Proszę o opinie.

Pozdrawiam, Paweł.
pyro
Tobie nie chodzi o samą strukturę CMS'a, ale o to jak rozplanować aplikację. Poczytaj o MVC.

Ta "struktura linków" co podałeś jest w popularnych frameworkach rozwiązana za pomocą routerów, a te "rozmieszczenia" plików, żeby je wywoływać za pomocą kontrolerów.

Przy okazji dowiesz się co to jest front controller, model i widok.

Zajrzyj do manuala Symfony2.
Evinek
A Cię zaskoczę.
Znam wzorzec MVC. Przeglądałem frameworki takie jak: Symfony2, Zend2, CI, Kohana oraz SpawnFramework. Z tych wszystkich spodobał mi się tylko jeden, SpawnFramework, który był moim zdaniem łatwy, ale bardzo funkcjonalny.

Może jednak chodzi właśnie o rozplanowanie całej aplikacji. Ogólnie jakoś nie potrafię zrobić byle jak, tylko próbuję zrobić jak najlepiej.
Aktualnie właśnie testuje z kontrolerami i zrobiłem taki kod:

  1. $_module = isset($_GET['module']) ? $_GET['module'] : 'news';
  2. $_action = isset($_GET['action']) ? $_GET['action'] : 'index';
  3.  
  4. $_module = ucfirst(strtolower($_module));
  5. $_action = strtolower($_action).'Action';
  6.  
  7. $appPath = '\\'.$_module.'\\'.$_module;
  8. //echo $appPath;
  9. if(class_exists($appPath)){
  10. $app = new $appPath();
  11. if(method_exists($app, $_action)){
  12. $app->$_action();
  13. }
  14. else{
  15. if(method_exists($app, 'indexAction')){
  16. $app->indexAction();
  17. }
  18. else{
  19. die($_action.' isn\'t exists');
  20. }
  21. }
  22. }


I nie wiem czy przy tym zostać. Dodam, że nie chce używać Frameworka żadnego oraz nie chce tworzyć własnego Frameworka lecz stworzyć CMS, a potem na tym samym szkielecie Forum.
!*!
  1. $_action
  2. $appPath = '\\'.$_module.'\\'.$_module;


Koszmarne te zapisy.
Drzewo modułów nawet ma sens o ile jest w tym MVC.

Cytat
I nie wiem czy przy tym zostać. Dodam, że nie chce używać Frameworka żadnego oraz nie chce tworzyć własnego Frameworka lecz stworzyć CMS, a potem na tym samym szkielecie Forum.

To źle. W połowie się pogubisz i będziesz pisał od nowa?
Evinek
Chce ogólnie pisać wzorcem MVC, ale nie mam pewności co do klas jako kontrolery.
Zapisy są byle jakie na razie. Gdy będę pewny co do struktury aplikacji to wtedy zacznę pisać wszystko czytelniej.

Moim zdaniem tworzenie skryptów na frameworku to nie nauka PHP.
Wiem, że przyda mi się znajomość frameworków, ale wolałbym pisać sam kod aby się więcej nauczyć. Chce stworzyć skrypt forum (taka tam mała rywalizacja z kolegą), który będę chciał po woli rozwijać aby coraz lepsze techniki stosować. A używając frameworka to będę miał o wiele mniej pracy więc dużo się nie nauczę. Co najwyżej nauczę się używać frameworka.

Co mi możecie ogólnie doradzić? Inni potrafią nawet mieszać HTML z PHP, a ja już nie umiem. Po prostu gdy już coś piszę, to chce jak najlepiej zrobić.
!*!
Kierujesz wszystko na index.php w nim ustalasz główne ścieżki do silnika i aplikacji. Silnik i bebechy aplikacji wywalasz poza public_html, a w nim samym zostawiasz tylko to co potrzebne czyli pliki css, img, js które są w katalogu /web (lub czymś podobnym)

Co do całego drzewa, tu nie ma się co rozpisywać, bo każda implementacja MVC szczególnie w aplikacjach php jest niemalże identyczna. Stawiałbym na tą z codeignitera i symfoyny2 w porywach cakePHP
Bezi z Polodnia
Powiem panom szczerze, wzorzec MVC jest w danym momencie niczym suplement diety, który ostatnio został przedawkowany. Ja osobiście tworzę na marę swoich projektów własne uściślone formy programistyczne niczym MVC, jednak w niektórych projektach nie można nazwać widoku, widokem obok podziału na kontroler, bo często jest tak, że w CMS nowszych produkcji te warstwy się przechodzą i operają jedne o drugie, a podział stoi w innej swerze, np.podziału na zawartość i funkcjonalność statyczną wejściową, wielopoziomową warunkową i np. dynamiczną wynikową. (wszystko wynika z tego że podział na model widok i kontroler jest zacieralny, a ustawianie twardych granic które są polecane jest niczym rozdzieranie płaszczu na 3 części i zszywanie go.)


Struktra katalogów CMS ma być dobudowywana na bierząco, ja przykładowo zaczynam od stworzenia bibliotek do 'budowania' strony. (np. bezpieczne formularze, tworzone wyłączenie funkcją php i/lub jQuery) Umieszczam taki mechanizm w katalogu styles i umieszczam tam pomniejszy system styli (przeważnie swój tak by był kompatybilny z bibliotekami), same zaś szablony daję do katalogu ze zbiorami, z obsługą API tzn. funkcja która dodaje szablon do tablicy szablonów.

Podstawowa moja struktura katalogów to:

  • system
  • libraries
    • MCC (multilevel content controller)
    • OM (services)
      • jquery
      • json
      • transmitter
  • resources
    • languages
    • templates
    • client (client web-API np. FB)
  • styles
    • css-lib
!*!
Cytat
Ja osobiście tworzę na marę swoich projektów własne uściślone formy programistyczne niczym MVC, jednak w niektórych projektach nie można nazwać widoku, widokem obok podziału na kontroler, bo często jest tak, że w CMS nowszych produkcji te warstwy się przechodzą i operają jedne o drugie, a podział stoi w innej swerze, np.podziału na zawartość i funkcjonalność statyczną wejściową, wielopoziomową warunkową i np. dynamiczną wynikową. (wszystko wynika z tego że podział na model widok i kontroler jest zacieralny, a ustawianie twardych granic które są polecane jest niczym rozdzieranie płaszczu na 3 części i zszywanie go.)


Wyjaśnij mi na czym polega zacieranie kontrolera.
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.