Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Budowanie CMSa
Asmox
post 16.03.2009, 18:12:19
Post #1





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Mimo iż wiem wiele na temat php, nie jestem jakimś ekspertem, więc proszę o wyrozumiałość. Chciałbym napisać swojego CMSa (własnego, bezpiecznego, na wzór innych).
Aby to zrobić, trzeba by napisać.... jakiś framework. Nie wiem wiele o tym, ale z tego co zrozumiałem z Wikipedii ułatwia tworzenie modelu (szablonu) jakiegoś projektu - na przykład strony WWW.
Pomyślałem, że bezpieczniej będzie, jak wszystkie ważne zmienne umieszczę w pliku php z tablicą $_AXF (ma to trochę wspólnego z nazwą tego mojego "frameworka"). Ta tablica jest w oddzielnym pliku.
Tak więc zacząłem pisać klasę pages, która będzie odpowiadać za każdą stronę. Treść stron to po prostu pole w tabeli "strony".

  1. <?php
  2. class page
  3. {
  4. protected $id, $name, // i jakieś jeszcze zmienne
  5.  
  6. static function newpage($name, $dir, $source) {
  7. $_AXF = $GLOBALS['_AXF'];
  8. $now = date("Y-m-d");
  9.  
  10. try{
  11.  if (!@mysql_connect($_AXF['db_c_host'], $_AXF['db_c_login'], $_AXF['db_c_passwd']))
  12.        throw new Exception('Połączenie z bazą danych nie powidło się!');
  13.  if (!@mysql_select_db($_AXF['db_c_base']))
  14.        throw new Exception('Wybranie nazy danych nieudane!');
  15.        
  16.  if ($_AXF['db_set_results'] != "") {
  17.    if (!mysql_query('SET NAMES '.$_AXF['db_set_results']))
  18.        throw new Exception('Nie mogę wykonać zapytania!');
  19.    if (!mysql_query('SET CHARACTER SET '.$_AXF['db_set_results']))
  20.        throw new Exception('Nie mogę wykonać zapytania!');
  21.  }
  22.  if (!mysql_query("INSERT INTO ".$_AXF['db_pages_table']." VALUES(NULL, '$name', '$adress', '$now', 'Przykładowa treść');"))
  23.      throw new Exception('Nie mogę wykonać zapytania!');
  24.  
  25. }
  26.  
  27. catch (Exception $error) {
  28.  echo "Wystąpił błąd podczas działania skryptu o komunikacie: ";
  29.  echo $error->getMessage();
  30.  echo "<br />\n";
  31.  echo "Na linii: ".$error->getLine()."<br />\n";
  32. }
  33. }
  34.  
  35. function __construct() {
  36. $this->id = 0;
  37. $this->name = "example_name.ex";
  38. $this->dir = "directory/";
  39. $this->kategory = "example_kategory";
  40. $this->level = 1;
  41. }
  42. public function assign($id, $name, $dir, $source, $level) {
  43. $this->id = $id;
  44. $this->name = $name;
  45. $this->kategory = $kategory;
  46. $this->level = $level;
  47. }
  48. }
  49. ?>


Mam parę pytań co do swojej klasy.
1. Czy umieszczenie w jednej klasie metod statycznych i tych, co trzeba do ich użycia zmiennej jest w porządku?
2. Czy lepiej, aby ta jedna klasa służyła do wszystkiego wiązanego ze stronami (dodawanie, edycja, wyświetlanie...), czy lepiej, abym stworzył kilka mniejszych ?


--------------------
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
erix
post 16.03.2009, 18:18:28
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
  1. <?php
  2. $_AXF = $GLOBALS['_AXF'];
  3. ?>

Korzystasz z obiektówki i $GLOBALS...?


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

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
Asmox
post 16.03.2009, 18:33:39
Post #3





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Znaczy bo nie wiem: co jest źle? Bo to jest tak:
W pliku zmienne.php mam tablicę $_AXF. W niej mam dosłownie wszystko: dane o bazie, nazwę tabeli ze stronami i tak dalej. Ten plik ze zmiennymi includuję do pliku z klasą pages. No i jak zwykle, żeby zmienna z poza funkcji była widoczna, to muszę użyć $GLOBALS.
Tak chyba jest w porządku. A jak nie, to jak proponujesz to zrobić ?


--------------------
Go to the top of the page
+Quote Post
erix
post 16.03.2009, 18:55:22
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Zmiennych globlanych się unika jak ognia, bo często wprowadzają bałagan.

Zrób klasę statyczną, która będzie trzymała rdzeń.


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

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
Asmox
post 16.03.2009, 19:27:26
Post #5





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Aha, czyli po prostu taką klasę ze zmiennymi statycznymi publicznymi, do których można się odwoływać bezpośrednio ?
A i czy to nie jest źle, jak mam w jednej klasie wszystkie metody dotyczące w tym przykładzie stron ?

Ten post edytował Asmox 16.03.2009, 19:32:46


--------------------
Go to the top of the page
+Quote Post
Mephistofeles
post 16.03.2009, 19:54:23
Post #6





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Zainteresuj się wzorcem rejestru, korzysta z niego m.in. symfony. Wzorzec ciekawy, wręcz stworzony do konfiguracji smile.gif. Co do samego CMSa - radziłbym oddzielić PHP od HTML, inaczej niezły bałagan się zrobi. Zrób coś w rodzaju widoku (z MVC), czyli klasy z dynamicznie generowanymi polami, które ustawiasz w PHP, i ładowania w niej prostego szablonu, czyli zwykły kod HTML + PHP (ale tylko generujący HTML), korzystający ze zmiennych tej klasy. I wtedy w klasie np. Pages ustawiasz sobie tylko $this->view->error = 'Wystąpił błąd' a w widoku if (isset($this->error)) (...) itp.
Go to the top of the page
+Quote Post
Asmox
post 16.03.2009, 20:26:34
Post #7





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


OK, tylko za bardzo nie mogę się doczytać o tych wzorcach rejestru, bo na stronach są tylko suche "słownikowe" wyjaśnienia, tak że nic nie rozumiem. Jak proponujesz rozwiązać ten problem ze zmiennymi konfiguracyjnymi ? Proszę podaj jakiś przykład.
Mam też znowu kilka pytań:
1. W jakich plikach umieścić "ramy HTMLa" ? W szablonach (np. newsów, downloadzie itd.), czy gdzieś indziej ?
2. Jak dynamicznie generować pola klasy i po co właściwie?
3. Ciągle zastanawia mnie składnia odwołania: $this->view->error. Czy view to jakieś pole klasy, czy metoda... I jak można się w ten sposób odwoływać do zmiennej error ?
4. Wybrałem wyjątki, ponieważ przy wystąpieniu blokują wykonywanie kolejnych procesów, co na przykład przy bazach danych jest bardzo potrzebne. Czyżbyś sugerował mi powrót do konstrukcji die('Nie mogę utworzyć połączenia z bazą danych!') ?


--------------------
Go to the top of the page
+Quote Post
erix
post 16.03.2009, 20:50:34
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




4: absolutnie - po to stworzono wyjątki, aby z nich korzystać.
1,2,3: polecam lekturę o wzorcu MVC, rozwieją się wszystkie Twoje wątpliwości.


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

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
Mephistofeles
post 16.03.2009, 22:28:18
Post #9





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Ja sugeruję die()? W żadnym wypadku. Przecież nawet wiadomość wyjątku możesz pobrać do zmiennej, to i tak był tylko przykład.
Chodziło mi o to, że robisz sobie klasę View. Zapisujesz jej instancję do pola view twojej klasy Page. Potem w Page robisz $this->view->error (tworzy się tu automatycznie pole w klasie View, to dość dziwna cecha PHP winksmiley.jpg) = 'jakis blad'. Natomiast w klasie View masz metodę render, która pobiera szablon, więc w szablonie korzystasz z pól klasy View, dlatego masz $this->error.
Co do wzorca rejestru:
masz 2 metody statyczne: set i get. Set zapisuje do statycznej tablicy, get pobiera. Do tego możesz dorzucić ładowanie np. z INI albo XMLa...

Ten post edytował Mephistofeles 16.03.2009, 22:31:10
Go to the top of the page
+Quote Post
Asmox
post 17.03.2009, 06:46:55
Post #10





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Cytat(erix @ 16.03.2009, 20:50:34 ) *
1,2,3: polecam lekturę o wzorcu MVC, rozwieją się wszystkie Twoje wątpliwości.

Tiaaa.... pewnie już czas kupić nową książkę do PHP. Podstawy ostatnio są dla mnie niewystarczające laugh.gif


--------------------
Go to the top of the page
+Quote Post
Crozin
post 17.03.2009, 13:28:24
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Chcesz się brać za pisanie CMSa nie mając podstawowej wiedzy...?

Ja bym Ci proponował tego CMSa napisać przy wykorzystaniu jakiegoś FW, polecam Symfony, ale ZF, Kohana i inne też się oczywiście nadadzą
Go to the top of the page
+Quote Post
Asmox
post 17.03.2009, 16:23:03
Post #12





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Nie, nie źle mnie zrozumiałeś Crozin. Mam książkę o PODSTAWACH PHP pt. "Praktyczny kurs PHP5" autorstwa Marcina Lisa. Niestety są to tylko podstawy, a ja chciałbym dalej rozwijać swoją wiedzę o PHP (znaczy się, że opanowałem podstawy).
Co do wykorzystania Frameworków... Nie wiem, czy to źle, ale ja zawsze wolę wszystko zrobić samemu tj. w tym wypadku napisać własnego Frameworka, nawet jeśli będzie on nie tak dobry jak pozostałe.


--------------------
Go to the top of the page
+Quote Post
Riklaunim
post 17.03.2009, 16:34:03
Post #13





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

Ostrzeżenie: (0%)
-----


Cytat(Asmox @ 17.03.2009, 18:23:03 ) *
Co do wykorzystania Frameworków... Nie wiem, czy to źle, ale ja zawsze wolę wszystko zrobić samemu tj. w tym wypadku napisać własnego Frameworka, nawet jeśli będzie on nie tak dobry jak pozostałe.

Własnego frameworka nie napiszesz - nie coś co mogło by być nazywane frameworkiem obok CakePHP, CodeIgniter, czy Symfony. To nie jest coś co nawet doświadczony programista pisze "od tak". Zamiast męczyć się z bezproduktywnym klepaniem kodu "prawie jak framework" naprawdę polecam skorzystanie z jakiegoś. Masz gotowy szkielet pod tworzenie aplikacji www o konkretnym działaniu smile.gif


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
Crozin
post 17.03.2009, 17:09:32
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Cytat
Co do wykorzystania Frameworków... Nie wiem, czy to źle, ale ja zawsze wolę wszystko zrobić samemu tj. w tym wypadku napisać własnego Frameworka, nawet jeśli będzie on nie tak dobry jak pozostałe.
Też kiedyś "tak miałem". Ale uwierz i ucz się na cudzych, a nie własnych błędach: nie warto. winksmiley.jpg

A już tym bardziej nie warto, gdy celem jest zrobienie CMSa, a nie FW.
Go to the top of the page
+Quote Post
Asmox
post 17.03.2009, 20:25:25
Post #15





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Cytat(Riklaunim @ 17.03.2009, 16:34:03 ) *
Własnego frameworka nie napiszesz - nie coś co mogło by być nazywane frameworkiem obok CakePHP, CodeIgniter, czy Symfony. To nie jest coś co nawet doświadczony programista pisze "od tak". Zamiast męczyć się z bezproduktywnym klepaniem kodu "prawie jak framework" naprawdę polecam skorzystanie z jakiegoś. Masz gotowy szkielet pod tworzenie aplikacji www o konkretnym działaniu smile.gif

No bo sam nie wiem jak wykorzystać klasy - wszyscy piszą żeby sobie coś poczytać, albo coś innego, a ja za bardzo nie kumam. Więc wpadłem na pomysł na zbudowanie własnego FW, który zawsze by mi pomagał przy tworzeniu jakiejkolwiek strony i mógłbym go edytować jak mi się podoba. Pewnie Zend i inne FW też umożliwiają łatwe tworzenie własnych klas, ale chciałbym najpierw zrobić swojego. Żeby ogólnie się zaznajomić z klasami w PHP, z kilku powodów:
- programowanie obiektowe to zapewne kierunek, w którym idą wszyscy programiści
- znudziło mi się pisanie nieskończonej liczby funkcji i ich codzienne poprawianie
- bo są fajne rolleyes.gif
Chyba najpierw muszę dostać niezłego kopniaka od PHP, żeby zacząć używać normalnych Frameworków.
Cytat(Crozin)
A już tym bardziej nie warto, gdy celem jest zrobienie CMSa, a nie FW.

Co ? Właśnie zamierzałem zrobić własnego CMSa na własnym Frameworku.


--------------------
Go to the top of the page
+Quote Post
Mephistofeles
post 17.03.2009, 21:05:20
Post #16





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


Jeśli chcesz szybko skończyć swój projekt to polecam symfony - sam jestem nim bardzo mile zaskoczony, i bardzo prawdopodobne, że się na niego przerzucę w najbliższym czasie. Teraz również piszę własnego miniframeworka, ale z każdą kolejną klasą mi się coraz bardziej odechciewa winksmiley.jpg.
Go to the top of the page
+Quote Post
Riklaunim
post 17.03.2009, 21:07:09
Post #17





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

Ostrzeżenie: (0%)
-----


Za dużo hasełek się naczytałeś... OOP, obiektowość, zawartość obiektu w obiekcie. Tworzenie prostego CMSa na 20 klasach abstrakcyjnych, singletonie i obiektowym ORMie samo z siebie brzmi dziwnie winksmiley.jpg Swego czasu bawiłem się we własne rozwiązania, po tym spróbowałem frameworka CI i różnica była znacząca, bo zamiast przejmować się jakimi durnotami typu zawartość obiektów w obiekcie mogłem od razu tworzyć funkcjonalne moduły serwisu. Teraz siedzę na Django i nie obchodzi mnie ile tam jest klas, gdzie i jaka jest dziedziczona i czy przypadkiem nie jest za mało obiektowości tongue.gif Ułatwia pracę znacząco i to się liczy. Zdolność napisania gotowego serwisu jest zaletą, znajomość klas we frameworków to tylko u profesora na uniwerku.


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post
kbsucha
post 17.03.2009, 21:27:37
Post #18





Grupa: Zarejestrowani
Postów: 113
Pomógł: 19
Dołączył: 2.08.2007

Ostrzeżenie: (0%)
-----


Ale z drugiej strony doszliscie do takich wnioskow dopiero po napisaniu, lub rozpoczeciu swojego FW. Zauwazylem ze od momentu kiedy zaczelismy tworzyc swoj wlasny framework, wiele istotnych zagadnien i rozwiazan stalo sie o wiele bardziej zrozumiale. Latwiej mi teraz przegladac zrodla Symfony czy Zenda, uczyc sie z ich rozwiazan, czy je nasladowac.
Moim zdaniem pisanie swojego FW jest jednym z etapow ktore, dobrze jest przejsc, aby samemu dojsc do odpowiednich wnioskow. Kazdy kiedys zaczynal od globali, odkrywal PDO, czy ORM'y i ostatecznie sam wybierze sobie rozwiazania odpowiednie dla siebie.

pozdr


--------------------
Go to the top of the page
+Quote Post
Asmox
post 18.03.2009, 06:57:31
Post #19





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Chciałbym bardzo zrobić coś samemu, bo swoją ostatnią stronę napisałem kilka lat temu i w dodatku bardzo kiepską. Dlatego na razie nie chcę korzystać z żadnych pomocy, typu Zend, Smarty i jakieś tam inne, tylko napisać coś samodzielnie. Jak skończę swoją stronkę, to zacznę się przyglądać pomocniczym mechanizmom.

Jak patrzyłem po podpisach, to chyba każdy z modów/przyjaciół/adminów i osób, które się liczą na tym forum mają swoją stronę. Taką prawdziwą, którą można pokazać kumplom. Też chciałbym taką zrobić, ale żebym mógł powiedzieć, że to tylko moje dzieło (jeżeli robisz coś bez pomocy to zawsze jest się później bardziej uradowanym, niż jak się tylko rozbuduje jakiś projekt)

Ten post edytował Asmox 18.03.2009, 07:00:25


--------------------
Go to the top of the page
+Quote Post
Riklaunim
post 18.03.2009, 09:19:22
Post #20





Grupa: Zarejestrowani
Postów: 640
Pomógł: 44
Dołączył: 8.02.2004

Ostrzeżenie: (0%)
-----


Cytat(Asmox @ 18.03.2009, 08:57:31 ) *
Jak patrzyłem po podpisach, to chyba każdy z modów/przyjaciół/adminów i osób, które się liczą na tym forum mają swoją stronę.

Ja mam napisaną za pomocą Django winksmiley.jpg


--------------------
Biblioteki: Skrypty, CMS | Kurs PHP | Python
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:54