Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pluginy i moduły po raz n.
ZuyPan
post
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 smile.gif


--------------------
Blog
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
erix
post
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!
Go to the top of the page
+Quote Post
ZuyPan
post
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ą biggrin.gif


--------------------
Blog
Go to the top of the page
+Quote Post
erix
post
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!
Go to the top of the page
+Quote Post
ZuyPan
post
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 biggrin.gif Nigdy czegoś takiego nie pisałem, nie jestem pewny zasady na jakiej to powinno działać a zwłaszcza tego automatycznego "umieszczania się" w odpowiednim miejscu strony (bez mojego grzebania w kodzie aby umieścić to w odpowiednim miejscu).

Obiektówki się uczyłem i to dość długo. Po prostu prawdopodobnie jest dla mnie zbyt skomplikowana winksmiley.jpg


--------------------
Blog
Go to the top of the page
+Quote Post
erix
post
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!
Go to the top of the page
+Quote Post
ZuyPan
post
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
Go to the top of the page
+Quote Post
erix
post
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):

  1. add_action('post_publish', 'moja_zajekrzywabista_wtyczka');
  2.  
  3. function moja_zajekrzywabista_wtyczka($parametry){
  4. echo 'dodales wlasnie: '.(string)$parametry;
  5. }


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ł. winksmiley.jpg Nie zdziw się, jeśli przy prostym CMS-ie tych haków będzie i kilkaset. winksmiley.jpg


--------------------

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!
Go to the top of the page
+Quote Post
ZuyPan
post
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
Go to the top of the page
+Quote Post
erix
post
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. tongue.gif

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 tongue.gif) jeśli oferujesz każdemu klientowi możliwość znakowania wszystkich swoich paczek własnymi identyfikatorami, robisz dla nich miejsce przy taśmie, oni rozpoznają swoje i doklejają do przesyłki. Ale mają tam swoje miejsce - paczki będą jechały dalej nawet jeśli delikwenta nie ma.

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!
Go to the top of the page
+Quote Post
ZuyPan
post
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
Go to the top of the page
+Quote Post
erix
post
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!
Go to the top of the page
+Quote Post
ZuyPan
post
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
Go to the top of the page
+Quote Post
Pilsener
post
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:
  1. <p>
  2. {pogoda}
  3. </p>


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.
Go to the top of the page
+Quote Post
ZuyPan
post
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 smile.gif 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. Trzeba będzie zrobić podejście nr 4 do programowania obiektowego, a nóż widelec się uda tongue.gif


--------------------
Blog
Go to the top of the page
+Quote Post
erix
post
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!
Go to the top of the page
+Quote Post
ZuyPan
post
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ą smile.gif Zastosuję te hooki, ale najpierw wspomniana obiektówka, trochę ćwiczeń i może uda mi się coś wymłodzić smile.gif


--------------------
Blog
Go to the top of the page
+Quote Post
thek
post
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 biggrin.gif Wiele osób uznałoby to za czarną magię, ale po MPI taki system "rozgłoszeniowy" dla mnie już jest w miarę zrozumiały i potrafiłbym pod owym kątem sobie zaprojektować szkielet CMS oraz jego pluginy.

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 smile.gif Ty tylko i jednocześnie aż udostępniasz pewne customizowalne opcje/elementy. Na etapie planowania/projektowania jest jazda pewna, ale potem użytkowanie byłoby o tyle fajne, że to osoba odwiedzająca ma całkowity wpływ na to co chce od naszego serwisu. Jedynie może złorzeczyć, że czegoś tam nie ma jako content lub nawigacja mniej wygodna, ale poza tym ma to czego dokładnie chce/co sobie ustawił.


--------------------
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
Go to the top of the page
+Quote Post
erix
post
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. winksmiley.jpg


--------------------

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!
Go to the top of the page
+Quote Post
Pilsener
post
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.
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
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: 20.08.2025 - 05:11