![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 215 Pomógł: 0 Dołączył: 18.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
Jako twórca pewnej aplikacji internetowej mam pewien problem.
Zastanawiam się nad tym by zrobić automat do update'u. Oczywiście wszystko jest piękne do czasu gdy w kodzie php (w klasach, metodach itd) nie pojawiają się pewne specyficzne metody, obliczenia. Czy macie jakiś pomysł w jaki sposób oznaczyć kod tak by update dotyczył całej aplikacji oprócz pewnych "segmentów", które były zrobione specjalnie dla danego klienta (indywidualizacja?). Proste to niby gdy mamy osobne metody specyficzne dla klienta i trzymame je w innej klasie/pliku/miejscu. Jednak gorzej jest gdy zmiany dotyczą już istniejących metod. Myślałem by każdą instrukcję np. if else dzielić na jakieś bloki np. [php:1:b25050b7fe]<?php if(warunek){ realizacja } #1# #after 1 elseif(warunek){ specyficzna realizacja kodu. tego normalnie nie ma } #before 2 elseif(warunek){ realizacja } #2# else { realizacja } #3# ?>[/php:1:b25050b7fe] Oczywiście to prymitywny przykład i łatwo tą sytuację rozwiązać. Chodzi mi jednak o sens. W normalnym/standardowym kodzie części instrukcji elseif między #after 1 i #before 2 nie będzie i w czasie update musi być wiadome, że tam a nie gdzie indziej ten warunek musi być wstawiony/nieruszony. Czy macie jakieś lepsze pomysły/doświadczenie? -------------------- Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Hmm... a nie najprostsze rozwiązanie?
Tworzysz sobie dwa pliki: w jednym ogolne klasy, funkcje itd, a w drugim takie specyficzne - przy update tylko podmieniasz pierwszy plik. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 215 Pomógł: 0 Dołączył: 18.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
no to jest banalne rozwiazanie [; i o tym juz pisalem ... jednak czasem trzeba pogrzebac w kodzie, ktorego nie chce zmieniac bo coz ... mam jakas metode w klasie i ona cos realizuje (np. wyszukuje) i gdzies odwoluje sie do tej metody i teraz ... robi sie syf w przypadku gdy musialbym tworzyc nowa podobna metode (specyficzna dla klienta) poniewaz w wielu innych plikach odwoluje sie do tej metody i w ten sposob zmuszony bylbym do zmiany nie jednego pliku ale np. 5-10
tak samo tyczy sie to obliczen, dodawania do tabel itp. dlatego by zrobic mniejszy chaos dokonuje zmian juz w istniejacych metodach i przy return po prostu jest inny wynik. -------------------- Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 110 Pomógł: 1 Dołączył: 29.07.2003 Ostrzeżenie: (10%) ![]() ![]() |
A gdyby tak zmieniać konkretne linijki w pliku? Np. 55 a wniej tylko echo"Skrypt": by było...
Jeszcze przydała by się mozliwość wstawiania nowych linijek między istniejące, sktypt poza tym musiał by mieć swoją wersję gdzieś zapisaną... -------------------- Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 215 Pomógł: 0 Dołączył: 18.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
czyli 1 linijka = 1 czynnosc ?
wyjscie takze ale co w przypadku gdy sa roznice w liniach? najwazniejsze przeciez jest to by skrypt nie wstawial tylko nowych linii ale by wstawial je w odpowiednie miejsca. tak jak pisalem myslalem o specyficznych oznaczeniach kazdej funkcji/czynnosci/dzialania tak by w latwy sposob latwo bylo sie znalezc w kodzie ale to tez troche utrudnia sprawe bo przeciez zmuszeni jestesmy do oznaczania wszystkiego co skrypt ma robic a komu by sie to chcialo? chodzi tu o cos uniwersalnego co by mialo nawet szersze zastosowanie ... a jesli nawet nie szersze to bynajmniej by sprawdzalo sie dobrze w konkretnym przypadku -------------------- Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 66 Pomógł: 0 Dołączył: 22.04.2003 Skąd: Żory / K-ce Ostrzeżenie: (0%) ![]() ![]() |
Najbardziej uniwersalne byłoby chyba parsowanie plików php. php ma wbudowany w siebie parser:
http://www.php.net/manual/pl/ref.tokenizer.php http://www.php.net/manual/pl/tokens.php Trzeba by "tylko" zaprogramować język w jakim dałoby się określić co należy zmienić (takie skrypty aktualizacyjne) np. jako dialekt XML-a. To by miało szerokie zastosowanie i można by tego użyć do np. implementacji systemu wersji w php coś jak CVS. Ale jest to trochę pisania i projektowania. -------------------- Gadu-Gadu: 3909164
|
|
|
![]()
Post
#7
|
|
![]() Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
Podobny wątek był na forum webcity.php.pl, może wnioski i rozwiązania z tamtąd sie przydadzą:
:arrow: http://webcity.php.pl/forum/index.php?act=...t=ST&f=15&t=952 -------------------- "Programmers are in a race with the Universe to create bigger and better idiot-proof programs, while the Universe is trying to create bigger and better idiots. So far the Universe is winning."
Cudi's devBlog |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 566 Pomógł: 18 Dołączył: 23.08.2003 Skąd: Łomża Ostrzeżenie: (0%) ![]() ![]() |
klasy inwidualne oznacz komentazami jakimis i przy aktualizacji pomijaj text miedzy tymi komentazami...
|
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 215 Pomógł: 0 Dołączył: 18.01.2003 Ostrzeżenie: (0%) ![]() ![]() |
grayHat << to juz bylo pisane. pestka jest to gdy robisz specjalne osobne moduly (klasy/metody) dla indywidualnego klienta i to wszystko po prostu wciskam do innego pliku to najlatwiej ... ale co gdy zmiana musi miec miejsce w kodzie oryginalnym tylko dlatego, ze do tego wlasnie kodu odwoluje sie z wielu innych miejsc np. obliczenie ceny brutto biorac pod uwage marze lub narzut, cene zakupu, stawke vat i upust (rabat).
regula jest niby taka sama ale jak widac klienci sa rozni i jeden juz wyskoczyl z pomyslem iz chce by to bylo wszystko inaczej obliczane ... to przyklad. takich zmian jest masa ... problem tez gdy zmuszony jestem do stworzenia osobnej tabeli w SQL'u i zastosowania jej w juz istniejacych zapytaniach ... mozna by to rozwiazac albo tworzac wszystkie zapytania SQL od poczatku uwzgledniajac dodatkowa tabele albo zrobic w podzapytaniu inne zapytanie ... bynajmniej tu i tu wymagana jest juz ingerencja w oryginalny kod -------------------- Działam w OpenSolution.org, autor Quick.Cms i Quick.Cart już od ponad 10 lat
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 25.04.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Najprostrze rozwiązania bywają najlepsze ...
Czy nie wystrarczy "Patcha" pisać normalnie jako plik txt, a jego zawartość niech będzie identyczna w strukturze jak pliki instalacji Modów do PHPbb? np Cytat ----[OPEN FILE: {PLIK}]-------
----[FIND: {JAKAS LINIJKA}]------ ----[AFTER ADD]------- {JAKIS KOD} ----[/AFTER ADD]------ Wydaje mi się że tego typu "aktualizacja" jest najprostrza... -------------------- r.
|
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 110 Pomógł: 1 Dołączył: 29.07.2003 Ostrzeżenie: (10%) ![]() ![]() |
A jest jakiś program który automatycznie wgrywa mody?
-------------------- Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 25.04.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat A jest jakiś program który automatycznie wgrywa mody?
Wystarczy napisać "parser" do tego typu "kodu" który podałem wcześniej ![]() -------------------- r.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 110 Pomógł: 1 Dołączył: 29.07.2003 Ostrzeżenie: (10%) ![]() ![]() |
A może ktoś zna link do takiego paraser'a? Jeżeli byłby oficjalny (czy coś takiego 8) ), mógłbyś przy okazji podpatrzeć "jak oni to robią"... :wink:
-------------------- Zbiór najlepszych technologicznych artykułów (programowanie, internet, linux)
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 36 Pomógł: 0 Dołączył: 30.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Być może nie jest to odpowiedź na pytanie autora wątku, ale dyskusja schodzi dość jednoznacznie na przepisywanie w php bardzo starych i sprawdzonych narzędzi, które są w każdym unixopodobnym systemie i nazywają się diff i patch
![]() W szczególności nie rozumiem, Nalfein][WR, do czego miałoby prowadzić przepisanie korzystających z tych dwóch - będących standardem - rozwiązań w php. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 14.06.2002 Ostrzeżenie: (0%) ![]() ![]() |
heh... mój brat (Zyx z webcity[.php].pl) w swoim enginie stron www (http://fillarws.sourceforge.net) zrobił taki bajer z patchami że wystarczy zrobić plik patrzujący który wygląda mniej więcej tak:
[php:1:3cb0141db9]c|This is a sample patch file! g|37 -| private $session_id; -| var $session_user; -| var $session_ip; +| var $session_id; +| private $session_user; +| private $session_ip; | var $session_browser; -| var $session_page; +| private $session_page; g|51 +| // Main constructor +| // calls init_session(); g|70 -| $sql -> sql_query('UPDATE users, sessions SET user_lastvisit = sessions.session_time WHERE sessions.session_time < '.(time() - fws::$config -> SESSION_TIME)); -| $sql -> sql_query('DELETE FROM sessions WHERE session_time < '.(time() - fws::$config -> SESSION_TIME)); c|*************** c|* Let's add something to the session init c|*************** f| $this -> session_type = $session_type; +| $this -> session_bizi = 19; g|196 +| // elele +| // elele e|[/php:1:3cb0141db9] c - komentarz patcha - - usunięcie linijki + - dodanie linijki - (spacja) pozostawienie linijki tak, jak jest g - idź do linii XXX f - znajdź linię e - zakończ patch Dzięki takiej konstrukcji możeliwe jest też łatwe odinstalowanie patcha, ponieważ interpreter zamienia sobie funkcjami + i - i plik powraca do pierwotnej formy. |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 103 Pomógł: 0 Dołączył: 25.04.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
@eXtreme: mawet sobie ściągnełem ten "framework" niestety nie mogę znaleźć parsera odpowiedzialnego za przetworzenie tego pliku...
PS. Czy mogę wykorzystać w swoim projekcie klase do obsługi szablonów... // nie moge znaleźć gg Zyx'a :/ -------------------- r.
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 14.06.2002 Ostrzeżenie: (0%) ![]() ![]() |
engine/filesystem.php
metoda: patch_file(); ps. tu od zyxa messag: "FWS to nie jest framework ![]() |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 11.01.2004 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czy macie jakiś pomysł w jaki sposób oznaczyć kod tak by update dotyczył całej aplikacji oprócz pewnych "segmentów", które były zrobione specjalnie dla danego klienta (indywidualizacja?).
Myślę, że tą kwestię najlepiej rozwiązać na poziomie architektury samej aplikacji. W końcu to wręcz podręcznikowa sytuacja, w której warto zastosować programowanie obiektowe. Chcesz wyświetlić indeks newsów w serwisie. Piszesz klasę PageNewsIndex wykorzystującą szablon Page/NewsIndex.html i korzystającą z klasy News.php (obsługującej odczyt danych z tabeli "news" w bazie danych albo innego źródła). Jeśli chcesz dopisać nowe funkcje specjalnie dla konkretnego klienta, to tworzysz klasę PageNewsIndexKonkretnyKlient bazującą na PageNewsIndex, rozszerzającą już napisane lub dodającą nowe metody. Wystarczy teraz umieścić obie klasy w innych katalogach i możesz uaktualniać PageNewsIndex do woli, a u klienta wyświetlanie newsów będzie wciąż działało tak jak sobie zażyczył. Często nie trzeba nawet tworzyć nowej klasy, wystarczy zastosować inny szablon. Na tej właśnie zasadzie (w duużym skrócie) opiera się nasz system A1 Framework. -------------------- Michał Jaskólski
A1 Internet // inżynierowie infostrady // http://www.a1.pl :: płatne wsparcie techniczne dla PHP, MySQL i Apache |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 16:14 |