![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich.
Od razu zaznaczę - sporo czytałem na temat mojego problemu zarówno na tym forum jak i po różnych wygoglowanych stronach, jednak nie znalazłem czegoś co pasuję do mojego problemu. Przyszedł moment na mój własny CMS i pojawił się znany Wam problem - pluginy i moduły. Zacznijmy od podstaw - rozumienie przeze mnie tych dwóch pojęć aby nie było nieporozumień: plugin - mała zmiana w działaniu strony jak np. dodanie możliwości komentowania profilu innej osoby na portalu lub oceniania go, kalendarz, bbcode. moduł - to coś "większego" jak np. moduł sklepu lub moduł forum. Ważne jest aby pluginy umiały się wpasować w odpowiednie miejsce tam gdzie powinny się wyświetlać - boczny panel (oczywiście możliwość ustawienia czy dajmy na to pod menu a może nad nim - wszystko to z poziomu panelu administratora) lub środek profilu użytkownika (wspomniane komentarze lub oceny). Sporo czytałem o jądrze systemu i wydaje mi się, że to właśnie w tym miejscu powinno się odbywać wczytywanie ewentualnych pluginów i modułów. Wszystko wsparte było by bazą danych w której przechowywany by był stan pluginu/modułu (zainstalowany/nie zainstalowany, włączony/wyłączony). Jakieś pomysły jak to rozwiązać? Jeśli to jakoś pomoże lub naprowadzi Was na odpowiedni tor myślenia to przedstawię zarys projektu jądra: 1. Wczytanie pliku konfiguracyjnego 2. Wczytanie ustawień z mysql 3. Język strony 4. Ewentualne pluginy, moduły 5. Wczytanie ewentualnej podstrony, treści etc. 6. Wczytanie templatu Nie mam pojęcia jak to rozwiązać dlatego zwracam się do Was. Po raz kolejny przypominam, że czytałem sporo na ten temat, ale tam wszystko rozwiązane jest obiektowo, a ja pomimo nauki jednak chyba nadal wolę strukturalny sposób. Proszę o rady ![]() -------------------- Blog |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Po raz kolejny przypominam, że czytałem sporo na ten temat, ale tam wszystko rozwiązane jest obiektowo, a ja pomimo nauki jednak chyba nadal wolę strukturalny sposób. Proszę o rady Pokaż, co czytałeś. Bo to, że sporo, to nie znaczy, że to, co powinieneś. Czytałeś wątek w dziale PHP Pro na forum? Cytat Po raz kolejny przypominam, że czytałem sporo na ten temat, ale tam wszystko rozwiązane jest obiektowo, a ja pomimo nauki jednak chyba nadal wolę strukturalny sposób. Współczuję, naprawdę się zajeździsz. Jeśli szukasz przykładów, to strukturalnie napisany jest Drupal oraz Wordpress. Z czego ten pierwszy jest IMHO nieco lepiej przemyślany. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
oh sporo tego było. Wymienianie wszystkiego wymaga odalezienia tego wszystkiego. To taki mały zbiór mojej lektury:
Temat: Aplikacje PHP Pluginy Temat: jak pisac jadro <- na temat jądra Temat: moduly http://forum.php.pl/index.php?showtopic=25455 + sporo stron z google - zbyt dużo by wymieniać. Sama obiektówka choć idee ma świetną jest dla mnie chyba zbyt skomplikowana... Te wszystkie interfejsy i inne trudne słówka chyba mnie przerastają ![]() -------------------- Blog |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
No i czego nie rozumiesz?
Cytat Sama obiektówka choć idee ma świetną jest dla mnie chyba zbyt skomplikowana... Te wszystkie interfejsy i inne trudne słówka chyba mnie przerastają IMHO najpierw poznaj obiektówkę, potem bierz się za pluginy... -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie tego jak to zrobić strukturalnie
![]() Obiektówki się uczyłem i to dość długo. Po prostu prawdopodobnie jest dla mnie zbyt skomplikowana ![]() -------------------- Blog |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat nie jestem pewny zasady na jakiej to powinno działać a zwłaszcza tego automatycznego "umieszczania się" w odpowiednim miejscu strony Musisz w odpowiednich miejscach wrzucać tzw. hooki, w których będą uaktywniane odpowiednie wtyczki i ich metody. Tutaj przyda Ci się call_user_func albo funkcje lambda, ale obiektówką byłoby lepiej, choćby ze względu na wzorzec Proxy (łatwe podstawianie wtyczek do istniejących funkcjonalności). A jak to jest wszystko strukturalnie zrealizowane, proponuję lekturę dokumentacji Drupala. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co rozumiem to z tymi hookami to musiał bym przewidzieć albo po prostu podstawić w kodzie docelowym właśnie taki hook i dzięki niemu plugin umieści się tam gdzie trzeba? A mnie właśnie chodzi o pełną automatyzację, bez mojej żadnej ingerencji poza:
- wrzuceniem pliku na serwer - kliknięciem instaluj w panelu admina -------------------- Blog |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Po prostu w każdej wtyczce, jako głównego wyzwalacza, używasz funkcji podpinającej do wybranego hooka. Tak działa większość systemów wtyczek.
Przykładowo, w Wordpressie (mogłem coś pokiełbasić, dawno tam grzebałem):
A w kodzie Wordpressa jest dodana odpowiednia metoda, która zaraz po dodaniu posta, wywoła kod Twojej wtyczki. Cytat Z tego co rozumiem to z tymi hookami to musiał bym przewidzieć I w tym tkwi szkopuł. ![]() ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
W takim razie tu gubię podstawowe pojęcie wtyczki, które ja rozumiem tak: wtyczka to coś co dodaje nową funkcję do serwisu www. A wychodzi na to, że projektując cały serwis muszę przewidzieć i niejako zdecydować w którym miejscu dać możliwość podpinania się wtyczek. To tak jakbym chciał po prostu dorobić parę innych funkcji tylko, że potem a puki co przygotowywuje im miejsce. A nie da się tego jakoś rozwiązać w sposób bardzo automatyczny? Aby wtyczki w jakiś tam sposób rozpoznawały co to za część strony a nie tak jak Wy mi proponujecie (a ja to rozumiem:) przygotowywania ewentualnych miejsc pod ewentualne wtyczki.
-------------------- Blog |
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat na to, że projektując cały serwis muszę przewidzieć i niejako zdecydować w którym miejscu dać możliwość podpinania się wtyczek. Zobacz, że w każdej aplikacji oferującej rozszerzenia/wtyczki jest tak samo - albo hooki, które są wykonywane w odpowiednich momentach, albo wstrzykiwanie kodu bezpośrednio w odpowiednie miejsca. Nie wiem na 100%, jak jest w np. w Firefoksie, ale podejrzewam, że bardzo podobnie. Cytat A nie da się tego jakoś rozwiązać w sposób bardzo automatyczny? Chcesz sobie aplikację wyklikać albo żeby sama to wymyśliła? To po co programować? Gdyby się tak dało, to wątpię, aby były rozwijane języki programowania/inżynieria tworzenia aplikacji. ![]() Cytat Aby wtyczki w jakiś tam sposób rozpoznawały co to za część strony a nie tak jak Wy mi proponujecie (a ja to rozumiem:) No a jak sobie wyobrażasz wtyczkę, która np. dodaje Ci funkcję formatowania treści stron przez markdown? Gdzie się wepnie? Albo - na chama - wstrzyknie swój kod do rdzenia skryptu (tak jest w SimpleMachines forum), albo doda odpowiedniego hooka, który da znać wtyczkom e, panowie formatujący tekst, wystąp, jest <TO I TO> do przeparsowania, czekam na wynik, zwracam go do skryptu. O ile pierwsze rozwiązanie jest dużo wydajniejsze (nie ma konieczności odpytywania funkcji przechowującej odwołania do wtyczki), to jest bardziej problematyczne w utrzymaniu porządku i powoduje nieraz sporo konfliktów, czy uniemożliwia instalację innych wtyczek realizujących swoje funkcje w tym samym miejscu. A jak masz odpowiednie hooki, to tak, jakbyś miał firmę przewozową i chciał kilkoma usługami oznaczać paczki. (koloryzując ![]() Jeśli nie masz, no to jest problem - trzeba kombinować, bo nie wiadomo, gdzie postawić tego klienta, żeby mógł swobodnie i bezpiecznie znakować swoje przesyłki. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
No to teraz mój post ;>
Prosty przykład - mały plugin dodający możliwość komentowania profilu: Przed http://img811.imageshack.us/i/przed.png/ Po http://img683.imageshack.us/i/35321783.png/ Czy to oznacza, że aby umożliwić potem komuś zrobienie takiej wtyczki, która pokaże się w profilu użytkownika gdzie tylko chce (choćby jako pierwsza rzecz, nad awatarem itd.) muszę właśnie tam wstawić hooka? Czy to oznacza, że kolejne sekcje i skrypty muszę być przeplatane hookami? Teraz coś o mechanice strony - system template i języków. Opracowałem własne, banalne ale dla mnie wystarczające rozwiązanie. Będziemy pracować na przykładzie środkowej części strony - tam gdzie jest treść itd.). Nie ważne czy jest wczytywana podstrona czy nie cały kod html i cała treść jest przypisywana zmiennej $tresc['srodek'] za pomocą ".=" (czyli jedno pod drugim co daje mi ogromną zmienną $tresc['srodek']). W takim razie jak wstawić kod html i treść modułu gdzieś w środek tej zmiennej? Pomiędzy treści? Razem z całym hookiem? -------------------- Blog |
|
|
![]()
Post
#12
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czy to oznacza, że kolejne sekcje i skrypty muszę być przeplatane hookami? W skrócie - tak. Cytat Nie ważne czy jest wczytywana podstrona czy nie cały kod html i cała treść jest przypisywana zmiennej $tresc['srodek'] za pomocą ".=" (czyli jedno pod drugim co daje mi ogromną zmienną $tresc['srodek']). Zmień system szablonów. Marnujesz tylko pamięć, ciężko o optymalizację i dodawanie czegoś z zewnątrz. Cytat W takim razie jak wstawić kod html i treść modułu gdzieś w środek tej zmiennej? Pomiędzy treści? Razem z całym hookiem? Jw: wymagałoby to pisania w chorobę replace'ów i niepotrzebnych wyrażeń regularnych. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Puki co nic innego strukturalnie nie umiem napisać a skomplikowane klasy templatów to dla mnie za dużo. Odpadają też systemy typu smarty
-------------------- Blog |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Ja stosuję np. nie pluginy i moduły, ale moduły i panele, moduły generują treść dynamiczną a panele to treść statyczna (by łatwo coś gdzieś umieścić). Radziłbym Ci zacząć od decentralizacji, czyli każdy moduł:
- ma własne modele danych - własny silnik - własne widoki Nawet za cenę powielania znacznych ilości kodu z CMSa. Potem wystarczy przechwycić zmienną/zmienne, które ten moduł generuje i umieścić w swoim widoku/szablonie/szablonach etc: Integracja odbywa się poprzez PA CMSa, gdzie dodaje się informacje o module, podaje link do pliku php z kodem tego modułu, nazwę zmiennej (która będzie dostępna w naszych szablonach) oraz link do PA tego modułu. Decentralizacja ułatwia install/deinstall i wpływa dobrze na wydajność (moduł jest includowany tylko wtedy, kiedy jest wymagany na danej stronie), ma to też tą zaletę, że jako moduł mogę wrzucić niemal każdy skrypt albo użyć swojego modułu w innym silniku lub jako samodzielnego skryptu. Inna sprawa to tak zwane rozszerzenia (ang. extensions), które po prostu rozszerzają funkcjonalność systemu o nowe bzdety i są z nim ściśle zintegrowane, tutaj wszystko zależy od głównego silnika i praktycznych przykładów, bo rozszerzenia mogą się np. uzupełniać lub wykluczać. Często integracja i instalacja tych rozszerzeń jest tak skomplikowana, że czyni je praktycznie bezużytecznymi (np. nowa wersja głównego silnika powoduje jego zatarcie po instalowaniu rozszerzenia, który tego nie uwzględniał). Jak sobie zrobisz, tak będziesz miał, w wypadku rozszerzeń odradzam jakąś sztywną koncepcję a zamiast tego zalecam pełną integrację z opcją on/off danego bzdetu, jeśli klient chce nowej funkcji to mu ją napiszemy a system zmieniamy na dedykowany, inaczej nasz silnik nie udźwignie ogromu pluginów. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązanie świetne, ale nie pasuje do mojego cms'a. Nastawiony on jest na jak najbardziej uproszczone korzystanie, bez ingerencji użytkownika w kod (w końcu korzystać mogą osoby, które z instalacją moda w ten sposób mogły by sobie nie poradzić). Najprawdopodobniej zostanę przy hookach
![]() ![]() -------------------- Blog |
|
|
![]()
Post
#16
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Teraz tylko znów męczy mnie ta obiektówka :/ Sam wiem, że większość systemów cms jest w niej pisanych, i to naprawdę najlepsze rozwiązanie. W np. Drupalu wszystko jest strukturalnie oprócz DB. Ale napisanie obiektowo systemu bardzo ułatwi zadanie. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 116 Pomógł: 4 Dołączył: 4.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
No to chyba mamy sprawę zamkniętą
![]() ![]() -------------------- Blog |
|
|
![]()
Post
#18
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Ja osobiście myślę, że najwygodniejszy byłby dla usera właśnie system paneli. Coś włącza tu, coś tam - jest ok to zostawia a jeśli nie - wyłącza. Zależnie od potrzeby chwili. Problem z tym, że nie wszystko da się łatwo. przykładem może być choćby bbcode. Tak naprawdę może on wystąpić w wielu panelach i jakoś musi być przemycony transparentnie, a powinien być jednolity. Przecież każdy panel chyba nie będzie implementował własnego silnika do tego. Po prostu musisz przewidzieć, że gdzieś w każdym z nich zajdą określone zmiany, których nie przewidzisz. Ustawiasz jakieś wykonanie warunkowe funkcji trzecich wewnątrz Twojego kodu i możesz ewentualnie modlić, że autor plugina czegoś nie spaprze
![]() Co ciekawe, to fakt, że wprowadzenie niemal pełnej równoległości procesów potomnych dla mnie osobiście byłoby całkiem fajnym dodatkiem, bo rozumiem ideę tego i przejście z sekwencyjnego wykonywania skryptu do równoległego nie było by trudne, choć zapewne starsi webmasterzy by ciężko mieli z przestawieniem się. W zasadzie gdyby nie SEO to wiele stron by można zrobić już teraz naprawdę bardzo dynamicznych przy użyciu AJAX + jquery. Zmiany paneli, drag& drop, pełna personalizacja serwisu (iGoogle jest czymś w tym stylu) i serwis żyje swoim życiem ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#19
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Masz na myśli widgety?
Ale tu chodzi bardziej o wtyczki-filtry, więc muszą być hooki. ![]() -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Otóż to, świetny przykład z tym BBCode, trudno to uznać za panel/moduł, bo ingeruje bezpośrednio w jądro systemu i zmienia jego funkcjonalność, dlatego to nie wchodzi w grę, jednak potraktowanie tego jako extension też ma ograniczenia, bo jak zapewnić elastyczność, integrację a jednocześnie wydajność przy prostym kodzie i procesie instalacji/deinstalacji? Dlatego lepiej to zrobić "na sztywno" z możliwością on/off w PA aplikacji, łatwiej wtedy zadbać także o wydajność, bo można bbcode wyłączyć po prostu globalnie.
Moim zdaniem dobrze byłoby ogarnąć temat na przykładzie dodatków do tak popularnych skryptów, jak forum phpbp by Przemo itp. Po zainstalowaniu wszystkich możliwych opcji skrypt osiąga masę krytyczną i imploduje pod własnym ciężarem, myślę, że najlepiej będzie zacząć właśnie od tego i poznać wady i ograniczenia różnych rozwiązań a potem opracować swoje. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 05:11 |