2011-06-24 13 views
5

Robię więc CMS, skrypt galerii poprzez Object Oriented PHP. W każdym razie, problem polega na tym, że mam podstawowy układ obiektów i tak do tego punktu, w którym muszę zacząć składać, jestem zaskoczony, jak to zrobić.Jak jedna struktura CMS?

Co mam, to w gruncie rzeczy klasa Nawigacja, Dane, Galeria i Moduł. Moduł oznacza strony, kategorie i tak dalej. Problem polega na tym, że Galeria wyprowadza obrazy, moduł podaje dane dla stron, nawigacja tworzy nawigację (jak ci się wydaje). Dostajesz obraz.

Na stronie indeksu I kończy się robi w zasadzie to (to się zmieni, ale jest ilustrację jak zacząłem go skonfigurować):

$navigation = new Navigation(); 
$navigation->top(); 

$page = new Module(); 
$page->basicPage($_GET['m']); 

basicPage() robi kilka rzeczy , ale przede wszystkim jest to problem:

$gallery = new Gallery(); 
$gallery->setGallery($id); 
$gallery->thumbGallery(); 

Tak na przykład.

Problem powstaje, gdy zadzwonię do basicPage(), projektanta lub ktokolwiek ma bardzo małą kontrolę nad wyborami. Jak widzieliście, jest to thumbGallery, i to nie pozwala na pełne obrazy, a nawet nie pozwala ustawić rozmiaru miniaturek (co ja im pozwalam, tylko jeśli mogą wywoływać, że działają one samodzielnie). .

Więc pomyślałem o kilku rozwiązaniach problemu. Nie mam tych podstawowych stron, ale projektanci budują szablony bardzo podobne do wordpress. Nie podoba mi się to rozwiązanie, ponieważ sprawia, że ​​proces projektowania jest skomplikowany, aczkolwiek dokładny. Nie chcę sprawić, żeby wszystko było kontrolowane i jest jednym ze sposobów. Oczywiście możesz "wyświetlać: none" na elementy jako projektant i kilka innych sztuczek, ale chcę, żeby miały możliwość robienia wielu rzeczy, bez skomplikowanego sposobu, w jaki robi to Wordpress.

Moje pytanie brzmi: jak osiągnąć równowagę między prostotą a elastycznością?

Każda pomoc, nawet pomysły są mile widziane. Dzięki.

EDYCJA: Zapomniałem wspomnieć. Problem polega na tym, że po prostu posiadanie indeksu ma wszystkie te dane, w przeciwnym razie będę musiał zrobić dużo jeśli/else i takie, i naprawdę nie chciałem uczynić z tego programu proceduralnego, po prostu można w zasadzie po prostu plopować rzeczy w dół i jesteśmy dobrzy. Zobacz, moduł oznacza zarówno galerię, jak i stronę. Większość stron nie będzie zawierać dołączonych do niej obrazów, a kategorie będą miały obrazy, ale nie zawsze tekst. Spowoduje to błąd, jeśli zadzwonię do thumbGallery i jest to tylko strona informacyjna, a jeśli zadzwonię na stronę informacyjną i jest to kategoria, to nie wyświetli obrazów (aby uniknąć błędu). Mógłbym, i zacząłem budować to razem na tak zwanej stronie podstawowej, ale problem, jaki zauważyłem wcześniej, ogranicza swobodę projektanta, nie musząc zadzierać z php, a większość projektantów jest dość głupia, gdy przychodzi do php, niestety. Zasadniczo OOP (bez obrazy, ja też jestem projektantem, ale ja też zdarza mi się program).

+0

Spójrz na wzór wzorcowy [Front Controller] (http://martinfowler.com/eaaCatalog/frontController.html). – Smurf64

Odpowiedz

1

Nie widząc reszty kodu, trudno jest znaleźć najlepsze rozwiązanie, biorąc pod uwagę to, co już masz. Od 9 lat opracowuję własne niestandardowe struktury aplikacji CMS i chętnie udzielę wskazówek.

Zakładam, że przechowujesz całą zawartość CMS w bazie danych. Przechowywanie konfiguracji dla ustawień galerii w bazie danych może być możliwym rozwiązaniem. Teoretycznie powinieneś mieć różne widoki (według wzorca MVC) do wyświetlania galerii na różne sposoby. Widok listy pokazujący wiele miniatur obrazów, jeden do wyświetlania pojedynczego obrazu oraz widok do listy kategorii.

Tak więc w bazie danych można zdefiniować, że strona X powinna wyświetlać widok miniatury zamiast widoku kategorii.

Nie jestem pewien, czy to rozwiązanie danego problemu, ale to bardzo uproszczony przykład tego, jak to zrobiłem w przeszłości w moich CMS-ach.

+0

Cóż, tak, już coś takiego robię (strona, kategoria). Ale dla czegoś takiego jak widok listy kategorii, to jest coś, czego nie muszę przechowywać w bazie danych, może to być zrobione w PHP. Dzieje się tak dlatego, że dane dla kategorii są już zapisane w tabeli modułów i muszą być poprawnie wywoływane i wyświetlane (formatowane przez PHP). Problem, który konkretnie mam, dotyczy głównie tego, jak wiele może zmienić projektant. Na przykład, projektant może chcieć stronę ustawiono: Wrapper {Header, Nav, treść, stopka} Albo: Wrapper {Left [Header, Nav], Prawo [treść], stopka} –

+0

Ale twoja sugestia jest wciąż całkiem dobra i dziękuję ci za ten pomysł. Być może z wyjaśnieniem, które podałem, możesz lepiej zrozumieć. Problem polega na tym, że chcę, aby osoba, która tworzy szablony, mogła to łatwo zrobić. Być może ... Myślę, że powinni mieć możliwość skorzystania z podstawowego szablonu, ale mogą pójść głębiej, jeśli chcą? Czy uważasz, że jest to do przyjęcia lub? –

+0

To zdecydowanie duża decyzja dotycząca projektu. Oferowanie możliwości dostosowania widoku jest oczywiste. Ale czy ten widok można dostosować do każdej instancji widoku? Czy strona A może mieć niestandardowy widok dla listy kategorii, a nie dla widoku kategorii B? Jak zdefiniować niestandardowy widok? Sposób, w jaki się to odbywa, zależy od niektórych decyzji i filozofii zastosowanych w innych częściach CMS. Moja struktura CMS była znacznie bardziej skomplikowana i pozwalała na spore dostosowanie, zarówno poprzez bazę danych i widoki niestandardowe, itp. – Percy