![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 238 Pomógł: 0 Dołączył: 6.05.2011 Ostrzeżenie: (10%) ![]() ![]() |
Witam,
Mam w planach stworzenie skryptu silnika stron, dzięki któremu będę mógł tworzyć każdą inna stronę (niezależnie jaka tematyka) zaczynając od niego. Czyli musi być skrypt który czyta te moduły z odpowiedniego katalogu, np. "moduly", możliwość instalowania/odinstalowania danego modułu. Po przeczytaniu takiego modułu musiałby wyświetlić je w odpowiednim miejscu na stronie. Nie wiem własnie jak z tym zastartować, jak to musi wyglądać? Założenie jest takie, że będzie on modularny. Czyli piszę jakiś moduł i on działa odpowiednio w skrypcie, każda funkcja skryptu to był by właśnie moduł (moduł 1: rejestracja,logowanie, moduł 2: newsy - itp). Byłbym wdzięczny za podrzucenie mi jakiegoś skryptu, który własnie jest tak zbudowany i mógłbym sobie zobaczyć działanie i jak jest skonstruowany. Z góry dzięki za pomoc. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Pisanie czegoś takiego od podstaw to naprawdę ogrom roboty - czy nie lepiej byłoby wykorzystać jakiś istniejący CMS, który by spełniał Twoje oczekiwania co do modularności i tworzyć w oparciu o niego?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 238 Pomógł: 0 Dołączył: 6.05.2011 Ostrzeżenie: (10%) ![]() ![]() |
Może i dużo roboty ale chciałbym się więcej nauczyć. Sama obsługa modułów nie będzie chyba rozbudowana. Najwięcej czasy na pewno zajęlo by pisanie modułów.
Dalej w takim razie proszę o jakieś porady lub przykład samego takiego silnika. Ten post edytował 1q2w3e4r 14.05.2011, 15:14:15 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 2 Dołączył: 6.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
popatrz sobie w źródło Drupala.
wiele cms wczytuje listę modułów za pomocą przeglądania katalogu modules dla przykładu app →modules ►news ►map ►newsletters ... →plugins →etc admin →modules ►news ►map ►newsletters ... →plugins →etc templates kontrola stanu modułu w bazie danych wyświetlanie na wybranych stronach np za pomocą drzewa tak jak w przypadku menu (IMG:style_emoticons/default/smile.gif) dojdzie ci tez kontrola położenia widoku modułu w templatce |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Właśnie najwięcej czasu to Ci zejdzie z samym mechanizmem obsługi modułów. Tobie się wydaje, że to jest proste "skopiuj pliki, wgraj strukturę bazy, gotowe", a to nieprawda. Jeśli to ma działać, w aplikacji musisz też przewidzieć punkty rozszerzania, czyli miejsca, które takie wtyczki będą mogły wypełniać. Przewidzenie i dobre zaprojektowanie interfejsu programistycznego do nich jest sztuką i bardzo łatwo tu się wkopać z pominięciem jakiegoś ważnego przypadku. Konieczna jest umiejętność patrzenia na problem z wielu różnych perspektyw, bo ilu programistów, tyle będzie sposobów wykorzystania mechanizmu. Do tego dochodzi kwestia obsługi zależności, rozwiązywanie konfliktów, organizacja plików, a nawet takie prozaiczne rzeczy, jak zabezpieczyć instalator i system przed błędem w czasie instalacji.
Dlatego osobiście jeśli nie radzisz sobie dobrze z obiektówką, projektowaniem i myśleniem analitycznym, radziłbym Ci póki co odłożyć ten temat i wrócić do niego nieco później. Nie ucieknie Ci on, a wiedza Ci się na pewno przyda. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 6 Dołączył: 20.03.2011 Skąd: Świdnica Ostrzeżenie: (0%) ![]() ![]() |
@Zyx ma rację.
To nie takie hop siup. Natomiast można sprawę wykonać stosunkowo łatwo, ale będą to rozwiązania dosyć sztywne na początku. Postaram się nie namotać, ale mam nadzieję, że koncept złapiesz w locie. index-template.phtml : Kod <div class="moduleLayerLeftBox"><?php echo $objModuleManager->getView( {idLeftBoxModule} ); ?></div> [...] <div class="moduleLayerRightBox"><?php echo $objModuleManager->getView( {idRightBoxModule} ); ?></div> W kontrolerze, który uruchamiałby całość dobrze byłoby umieścić kod wykonujący się na każdej podstronie - czyli kod tworzący obiekty modułów (jako np. kolekcję) i zastępujący {idLeftBoxModule} konkretną wartością wyciągniętą z relacji bazodanowej: { table ModuleViewRelation: id / moduleId / viewElementId } gdzie moduleId to np: "News" lub wartość całkowita, a viewElementId to "moduleLayerLeftBox" i już mamy informację o powiązaniu konkretnego modułu z widokiem... a skąd ? a no z ustawień które kliknęliśmy wcześniej w naszym panelu administracyjnym i zapisali my to do bazy ;-). Czyli po zamianie w widoku byłoby tak: Kod <div class="moduleLayerLeftBox"><?php echo $objModuleManager->getView( 'News' ); ?></div> [...] <div class="moduleLayerRightBox"><?php echo $objModuleManager->getView( 'UsersList' ); ?></div> I mamy po odpaleniu jakiegoś index.php podstawiane kody widoków dla modułów w odpowiednie miejsca szablonu. A tu kontroler: controller.php Kod class IndexController { public function __construct() { // utworz obiekty modułów, które ustawiłeś w konfiguracji, z listy, którą pobierzesz np. z bazy danych czy pliku XML ($arrModulesList) $objCollectionModuleManager = new ModuleManager( $arrModulesList ); // teraz łączymy nasz widok glowny (index-template.phtml) z widokami poszczegolnych modułów podstawiając własnie takie elementy jak {idLeftBoxModule} na konkretne ID $objModuleViewManager->mergeWithModules( $objCollectionModuleManager, "index-template.phtml" ); } public function aboutMeAction() { // tutaj w zasadzie nie musimy już robic nic poza akcjami dla tej konkretnej podstrony, ponieważ mamy juz wsadzone kody widokow poszczegolnych modułów co "zrobił konstruktor"... } } Rozwiązanie to jednak pozostawia wiele do życzenia. Ponieważ uzależnilismy na sztywno wybór modułu od elementu widoku: < Kod <?php echo $objModuleManager->getView( {idRightBoxModule} ); ?> Innymi słowy: ModuleManager wybiera moduł i przy pomocy instrukcji warunkowej wyszukuje moduł w swojej kolekcji taki dla którego w tabeli ModuleViewRelation jest wpis w polu viewElementId == "idRightBoxModule". I teraz nie daj pani Bogusio aby ktoś zmienił nawę tego ID w widoku i system się sypie, więc teraz należałoby wprowadzić jakieś zabezpieczenie :-). Reszty baboli nie chce mi się wymieniać wyjdą w praniu ;-). Natomiast rozwiązanie jest - i można je teraz przerabiać, dopracowywać - "small moves". Inny sposób: index-template.phtml Kod <div class="idRightBoxModule"></div> A w kontrolerze: controller.php Kod public function wstawWidokModuluDoSzablonu( $idDIVa, $nazwaModulu ) { // tworzenie obiektu przy sparametryzowaniu nazwy klasy $modul = new $nazwaModulu(); // teraz znajdz i zamien string z tagiem gdzie <div id="$idDIVa" ></div>,a $idDIVa to np. rightBoxModule str_replace("<div class=".$idDIVa." ></div>", $module->getView(), $index-template-file-code ); } Czaisz jakim tropem iść ? Ten post edytował LSM 9.06.2011, 08:47:50 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:14 |