Obsługiwanie stron - switch najlepszy?, pages.php? |
Obsługiwanie stron - switch najlepszy?, pages.php? |
21.04.2009, 11:10:29
Post
#21
|
|
Grupa: Zarejestrowani Postów: 461 Pomógł: 32 Dołączył: 17.09.2003 Skąd: Łódź Ostrzeżenie: (0%) |
Sorry za offtopica.
Apocalyptiq jak chcesz pisać takie posty to lepiej zdejmij sobie ze stopki ten link i buttona - już google mnie przyprowadziło do tego tematu jak sprawdzałem "firmę" estender.net, szkoda sobie psuć wizerunek zadając takie pytania Potencjalny klient to zobaczy i odpuści a wierz mi, że klienci na których możesz dobrze zarobić prześwietlą Cię najpierw porządnie. Pozdrawiam, Łukasz ps: w sprawie serwera z Rubym zapraszam na PW |
|
|
21.04.2009, 14:57:15
Post
#22
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Dzięki za rade
Hm, tak poczytałem o MVC, fajna sprawa. Ale też poczytałem o tym, że lepiej czasami stosować gotowe rozwiązania, np. Zend Framwork. On korzysta z modelu MVC? Ja jakoś lubię programować od podstaw... Używa ktoś tego Zend Framworka? Warto się tym zainsteresować? Np. do serwisu z newsami, artykulami, komentarzami i ocenami do nich z panelem admina do tego wszystkiego, będzie użyteczny? Bo niby takie proste serwisy raczej nie problem bez żadnych frameworków napisać. -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
21.04.2009, 15:06:08
Post
#23
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) |
Szczerze Symfony z jego Admin-Generatorem ma większą moc od Zenda Zend to raczej zbiór bardzo dobrych bibliotek i trzeba umieć z niego korzystać. A poza tym - chyba wszystkie frameworki korzystają ze wzorca MVC
|
|
|
21.04.2009, 15:15:38
Post
#24
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Ja jednak spróbuje samemu napisać prosty system oparty o MVC - z użytkownikami (rejestracja, logowanie), newsami, artykułami, no i zapleczem adminowym do tego wszystkiego.
Mam jeszcze jedno pytanie co do tego MVC - przeczytałem tutorial o nim, ale nie było sprecyzowane, jak w tym Kontrolerze (sterowniku) przekierowywać na dane działanie, przez switch? Np. user wszedł na podstronę z jakimś newsem, więc mam page=new i id=5 na przykład, więc muszę utworzyć switcha ze wszstkimi możliwymi akcjami (podstronami), a tam przy każdej będzie zawarte pobranie odpowiednich danych z bazy (model) i ich wyświetlenie (widok, u mnie odpowiada za to system szablonów PHPTAL, więc sprowadza sie to do załadowania odpowiedniego szablonu xml i przekazaniu do niego danych pobranych z bazy)? Bo wyżej mówiliście, że switch to złe wyjście, więc tu chyba go nie powinno być? -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
21.04.2009, 15:43:39
Post
#25
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 40 Dołączył: 20.08.2008 Ostrzeżenie: (0%) |
Masz url w postaci :
a ) zendowy router umożliwia tworzenie takich urli
b ) bez bawienia się w rewrite
Następnie w swoim głównym kontrolerze (centrum aplikacji) odbierasz wpisany adres przy pomocy, np. $_GET i wiesz, że musisz wywołać kontroler o nazwie "news" i akcję należącą do tego kontrolera o nazwie "show", a także masz przekazać jej parametr "id=4". Kontroler to nic innego jak klasa, pliki z kontrolerami możesz sobie includować z jakiegoś folderu, w razie braku pliku o podanej nazwie możesz dołączyć domyślny (np. z błędem), a potem to już tylko wywołujesz daną funkcję należącą do kontrolera(klasy). Ten post edytował ikssde 21.04.2009, 15:44:20 |
|
|
21.04.2009, 15:55:41
Post
#26
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Dzięki, nieco mi to wyjaśniłeś Więc najpierw ładuję kontroler klase News, ktorej przekazuje numer newsa. Ta klasa pobiera z bazy danych treść tego newsa i inne dane o nim jak data itp, następnie przekazuje to wszystko do widoku - tj. ładuje odpowiedni szablon html i wrzuca w zawartość w odpowiednie miejsce informacje o newsie? Więc ta klasa news (praktycznie należaloby ją nazwać "New", news to przecież nowości a nie nowość z ang , no ale słowo New jest chyba zastrzeżone w php) będzie wyglądać tak:
Tak to by wyglądało? No i jeszcze musiałbym przekazać jakoś obiekt z bazą danych $db do klasy News, co tu pominąłem -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
21.04.2009, 16:06:47
Post
#27
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 40 Dołączył: 20.08.2008 Ostrzeżenie: (0%) |
W gwoli ścisłość ta architektura implementuje trzy elementy Model-Widok-Kontroler, u Ciebie są tylko dwa.
Masz kontroler (controllerNews) w którym odwołujesz się do modelu (news), w modelu (klasie) masz zbiór funkcji odpowiedzialnych za wszelkie działania na określonym zbiorze, w tym przypadku na nowościach, czyli, np. odczytywanie po id, odczytywanie wszystkiego, odczytywanie 3 najnowszych, itp.
Ten post edytował ikssde 21.04.2009, 16:10:09 |
|
|
21.04.2009, 16:36:00
Post
#28
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) |
@ikssde ładnie wytłumaczył - masz 3 warstwy - kontroler, który za pomocą modelu pobiera dane z bazy np. tak:
I dopiero teraz przekazujesz dane do widoku. Czyli do systemu szablonów. No i oprócz samego kontrolera wywołuje się w nim akcję (metodę), żeby ułatwić zarządzanie. Np. metoda index() w kontrolerze News odpowiada za wyświetlenie 10 najnowszych wiadomości i uruchamiana jest jak nie poda się innych metod. Metoda pokazJeden() w kontrolerze News odpowiada za wyświetlenie tylko jednej wiadomości o id, jaki przekażesz w URL'u. |
|
|
21.04.2009, 16:54:13
Post
#29
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Dzięki za wytłumaczenie tego, ale jeszcze co do tej akcji index() nie rozumiem - nie ma być ona przecież funkcją __construct? Jak ma być uruchamiana jak sie nie poda innej metody (która rozumiem ma coś wyświetlać)?
-------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
21.04.2009, 17:37:30
Post
#30
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) |
__construct() jest uruchamiane niezależnie od wszystkiego - czyli za każdym utworzeniem obiektu. Zaś metoda index() będzie działać tylko, jeśli ją wywołasz. Skrótem - do __construct() możesz wrzucić wszystko co się będzie powtarzać dla każdej akcji.
EDIT: Musisz decydować wcześniej przed tworzeniem kontrolera jaka metoda ma być wywołana. Jak nie ma żadnej wywołujesz index(). Ten post edytował megawebmaster 21.04.2009, 17:49:42 |
|
|
21.04.2009, 20:01:30
Post
#31
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Dzięki za wytłumaczenie tego mechanizmu
Tak zacząłem czytać o tym Zend Framwork, no i z tego co czytałem wygląda na użyteczny, ale na wstępie zauważyłem jedną wadę - waży 17MB, ta minimalna wersja ;/ Może jakieś nieużywane biblioteki z tego można wywalić? Bo raczej nie wykorzystam wszystkich mozliwości Zenda przy np. stronce z newsami, artykułami, komentarzami i panelem admina do tego -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
21.04.2009, 22:14:01
Post
#32
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 40 Dołączył: 20.08.2008 Ostrzeżenie: (0%) |
Jak budujesz sobie stronę na podstawie Zenda, to nie dodawaj bibliotek Zend'owskich z automatu tylko je sobie includuj, żebyś później wiedział co jest wykorzystywane. Tym sposobem z 17mb zrobi Ci się 3 Zresztą 17mb to chyba znowu nie aż tak dużo, no ale jak uważasz.
Tak przy okazji, jeśli chcesz korzystać z gotowych rozwiązań, a nie masz ochoty uczyć się masy innych niepotrzebnych (niekoniecznie potrzebnych) rzeczy, korzystaj z Zenda Naprawdę dobrze się z tym pracuje, może Cię zniechęcić polski support, ale jeśli w miarę dobrze władasz angielskim nie będziesz miał najmniejszych problemów. |
|
|
22.04.2009, 10:08:24
Post
#33
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Narazie coś nie mogę się w tym połapać - pracuje z PHPTALem, systemem szablonów - jest świetny i za nic nie chce z niego zrezygnować Znalazłem gotowe rozwiązanie jak zintegrować Zend z PHPTALem, ale właśnie nie mogę się w tym wszystkim połapać. O MVC poczytałem, o Zendzie również troche. Ale w tym tutorialu jest troche dziwna struktura:
Cytat |/application | |/modules # modules directory | | |/default # directory of the module named 'default' | | | |/contollers # controllers of the default module | | | |/views # views of the default module (may contain also helpers and filters) | | | | /templates # templates of the default module (default ZF name is scripts) | | | | /layouts # this one holds scripts (templates) for the IndexController | | |/nextmodule | | | |/controllers | | | |/... W folderze application jest folder modules, w którym są chyba wszystkie moduły, a w każdym module kontrollery do niego i widoki. Mi się zdawało, że to kontrollery mają być trzonem danej akcji, a nie moduły które tylko pobierają dane z bazy danych ;| A dodatkowo coś nie mogę tu znaleźć modułów - widzę tu tylko kontroller (w folderze controllers IndexController.php) i widok (layouts i templates w views, tj. główne szablony strony www i szablony podstron). Tak ta struktura powinna wyglądać? I gdzie są te moduły? A co mi w ogóle daje ten Zend że tak warto jego używać? Chyba nie problem napisać klasę kontrollera, modułu i widoku Bo nie wiem czy warto wtajemniczać się w to, czy zabrać się za swój mały MVC framework. Ten post edytował Apocalyptiq 22.04.2009, 10:02:42 -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
22.04.2009, 12:10:26
Post
#34
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) |
Warto, bo otrzymujesz pewne stabilne i pewne mechanizmy (np. Router, FrontController), które zostały sprawdzone przez wielu ludzi, więc przetestowane pod każdym możliwym względem.
|
|
|
22.04.2009, 12:11:54
Post
#35
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 55 Dołączył: 1.03.2005 Skąd: śląsk Ostrzeżenie: (0%) |
no nie, ale ściąga plik nie, nie ściąga pliku. przeglądarka pobiera tylko efekt działania pliku z php. -------------------- aplikacje internetowe | Symfony
|
|
|
22.04.2009, 13:36:23
Post
#36
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Nawet bym przeszedł na Zend, ale wiem, gdzie są te moduły? No bo miały być te kontrollery - mam IndexController.php, widoki - w views są jakieś szablony, a gdzie sie podziały moduły? Struktura dwa posty wyżej
Narazie nie mogę dodać nawet podstrony drugiej :/ Dodałem plik NewsController.php do folderu z kontrollerami, tam klase NewsController, w szablonach dodałem folder news i tam index.tpl.html. A zend wywala mi: Cytat Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /home/szymon/domains/estender.net/public_html/framework/application/modules/default/controllers/NewsController.php, line 1' in /home/szymon/domains/estender.net/public_html/framework/library/Zend/Controller/Response/Abstract.php:281 Stack trace: #0 /home/szymon/domains/estender.net/public_html/framework/library/Zend/Controller/Response/Abstract.php(114): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /home/szymon/domains/estender.net/public_html/framework/application/Bootstrap.php(115): Zend_Controller_Response_Abstract->setHeader('Content-Type', 'text/html; char...') #2 /home/szymon/domains/estender.net/public_html/framework/application/Bootstrap.php(39): Bootstrap::sendResponse(Object(Zend_Controller_Response_Http)) #3 /home/szymon/domains/estender.net/public_html/framework/www/index.php(4): Bootstrap::run() #4 {main} thrown in /home/szymon/domains/estender.net/public_html/framework/library/Zend/Controller/Response/Abstract.php on line 281 Co robie nie tak? -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
22.04.2009, 14:15:21
Post
#37
|
|
Grupa: Zarejestrowani Postów: 143 Pomógł: 17 Dołączył: 8.11.2008 Skąd: Libiąż Ostrzeżenie: (0%) |
http://www.heavymind.net/zend-framework-tutorial/
Samouczek do Zenda po polsku. Co prawda jest tego tylko początek, ale początek jest najtrudniejszy wg. mnie |
|
|
22.04.2009, 14:21:05
Post
#38
|
|
Grupa: Zarejestrowani Postów: 217 Pomógł: 40 Dołączył: 20.08.2008 Ostrzeżenie: (0%) |
Moduły to nie modele. Równie dobrze możesz pominąć katalog z modułem default, jest to tylko takie udogodnienie, że w jednym module możesz umieścić stronę, a w drugim np. panel administracyjny.
|
|
|
25.05.2009, 10:44:57
Post
#39
|
|
Grupa: Zarejestrowani Postów: 230 Pomógł: 3 Dołączył: 8.01.2008 Ostrzeżenie: (10%) |
Tym razem robiłem wszystko od początku, zgodnie z tutorialem Zend Frameworka. Utknąłem przy tworzeniu podstrony do errora - stworzyłem ErrorController.php i error/error.phtml, ale przy wpisaniu jakiegoś nieistniejącego urla, wywala mi błąd:
Cytat Fatal error: Uncaught exception 'Zend_Controller_Response_Exception' with message 'Cannot send headers; headers already sent in /home/szymon/domains/apocalyptiq.duu.pl/application/bootstrap.php, line 1' in /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php:281 Stack trace: #0 /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php(299): Zend_Controller_Response_Abstract->canSendHeaders(true) #1 /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php(727): Zend_Controller_Response_Abstract->sendHeaders() #2 /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Front.php(972): Zend_Controller_Response_Abstract->sendResponse() #3 /home/szymon/domains/apocalyptiq.duu.pl/public_html/index.php(48): Zend_Controller_Front->dispatch() #4 {main} thrown in /home/szymon/domains/apocalyptiq.duu.pl/library/Zend/Controller/Response/Abstract.php on line 281 Mój .htaccess w public_html: Cytat RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-s RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^.*$ /index.php [NC,L] Hm, co robię nie tak? Może to jest spowodowane tym, że mam nieco inny .htaccess niż kazali w tutorialu (zmieniłem nieco, ponieważ ten z tutoriala mi nie działał), oto ten z tutoriala: Cytat RewriteEngine On RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ /index.php [NC,L] Zainstalowałem XAMPPa (Ubuntu 8.10), może to wina serwera była że nie łykał tego .htaccess z tutoriala zenda. Jeszcze ściągam tam zenda, jak sprawdze czy coś to dało, dam znać Wrzucenie w .htaccess tego: Cytat RewriteEngine on RewriteCond %{SCRIPT_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 W koncu doprowadziło do działania Zenda Tak czytam tutoriala, no i faktycznie Zend ma fajne funkcjonalności Jednak przeszedłem na Kohana Framework - tworzony przez społeczność a nie firmę, jest lżejsza, elastyczniejsza, po prostu super mi się na niej pracuje :-) -------------------- http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
|
|
|
Wersja Lo-Fi | Aktualny czas: 27.05.2024 - 22:11 |