Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> skrypt podzielony na moduły
1q2w3e4r
post
Post #1





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 6.05.2011

Ostrzeżenie: (10%)
X----


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.
Go to the top of the page
+Quote Post
Crozin
post
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?
Go to the top of the page
+Quote Post
1q2w3e4r
post
Post #3





Grupa: Zarejestrowani
Postów: 238
Pomógł: 0
Dołączył: 6.05.2011

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Hoku
post
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
Go to the top of the page
+Quote Post
Zyx
post
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.
Go to the top of the page
+Quote Post
LSM
post
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 15:14