![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 4 Dołączył: 5.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Chciałbym pod Kohaną zrobić prostego CMSa, nie jestem tylko pewny czy dobrze zaplanowałem kontrolery. Pomysł jest taki:
application/controllers/site.php - rozszerza Template_Controller'a, ustawia widok strony głównej (menu, stopka, itd.) Dla każdej podstrony robię osobny kontroler, który rozszerza Site_Controller'a i ustawia widok podstrony wstawiony gdzieś w środku widoku strony głównej. application/controllers/admin.php - rozszerza Template_Controller'a, ustawia widok panelu administracyjnego. Do katalogu application/controllers/admin wrzucam kontrolery odpowiadające za dodawanie newsów, userów itd, każdy rozszerza Admin_Controller'a. To powinno działać tak: domena.pl/ - strona główna, czyli to co jest w Site_Controllerze (application/controllers/site.php) domena.pl/kontakt - jakaś podstrona, Kontakt_Controller (application/controllers/kontakt.php) domena.pl/admin - strona główna panelu, Admin_Controller (application/controllers/admin.php) domena.pl/admin/news - zarządzanie newsami, News_Controller (application/controllers/admin/news.php) Czy to jest dobre rozwiązanie, czy powinno się to robić jakoś inaczej? Nie mam doświadczenia we frameworkach, więc pytam żeby potem nie przepisywać połowy kodu ![]() Może wszystkie kontrolery i widoki panelu administracyjnego powinny być zrobione jako moduł albo leżeć w katalogu system? Panel będzie uniwersalny, dla wielu różnych stron, ale w 90% wszędzie taki sam - to które funkcje panelu są włączone będzie zapisane jedynie w bazie danych. Może ktoś robił coś podobnego pod Kohaną i podzieli się doświadczeniami? ![]() ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
w system to NIC twojego nie powinno leżeć i być modyfikowane.
Możesz jak przedstawiłeś lub jako moduł (/modules) -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 4 Dołączył: 5.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Ok, dzięki za odpowiedź
![]() Pytanie drugie. W panelu chcę zrobić przeglądarkę plików w AJAXie. Tzn przechodzenie między katalogami będzie się odbywało przez wysłanie AJAXowego zapytania do PHP. PHP musi zwrócić listę plików w podanym katalogu w postaci XMLa (tak miałem do tej pory) lub JSON. Czy zawartość katalogu to jest coś co powinno siedzieć w modelu? Planowałem to zrobić tak: - model: klasa Directory_Model, ma metody pozwalające na przeglądanie katalogu, tworzenie w nim plików/katalogów, usuwanie itd. - kontroler: sprawdza czy wywołany został przez AJAXa, tworzy nowy obiekt Directory_Model, wstawia dane do widoku - widok: szablon XML lub JSON Dobrze kombinuję? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 4 Dołączył: 6.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Do katalogu application/controllers/admin wrzucam kontrolery odpowiadające za dodawanie newsów, userów itd, każdy rozszerza Admin_Controller'a. Hmm a nie lepiej po prostu napisać kontrolera 'Admin' a funkcje w nim nazwać add_user, del_user etc. Dzięki Kohanie uzyskasz wtedy bardzo ładne i wygodne linki ![]() Cytat rozszerza Template_Controller'a Tworzyłeś/używałeś jakiegoś Template Controllera? Dla mnie najwygodniejsze się wydawało rozwiązanie typu: Kod $view = new View('template'); $view->header = new View('theme/header'); $view->content = new View('theme/addfile'); $view->footer = new View('theme/footer'); $view->content->result=$result; $view->content->name=$name; Jeśli tworzysz coś dość prostego - może wystarczy zaimplementować takie proste rozwiązanie? ![]() template.php Kod <?php echo $header; ?> <?php echo $content; ?> <?php echo $footer; ?> Przykładowy addfile.php [w folderze views/theme/] Kod Rezultat:<?=$result ?><br /> Nazwat:<?=$name ?><br /> Zastosowanie tego bardzo skróciło u mnie learning curve Kohany ![]() Cytat Czy zawartość katalogu to jest coś co powinno siedzieć w modelu? Hmm... Imho model odpowiada m.in. za pobieranie danych - a to jest pobieranie danych na temat zawartości katalogu ![]() Cytat Dobrze kombinuję? Tak ![]() Cytat Może ktoś robił coś podobnego pod Kohaną i podzieli się doświadczeniami? tongue.gif Tworzyłem prosty panel administracyjny. Do np. usuwania komentarza napisałem sobie funkcję w module [jeśli dobrze pamiętam] del_com($tutajargumenty) i w ramach potrzeby wywoływałem tą funkcję po prostu z kontrolera newsa bądź kontrolera admin. Cytat wstawia dane do widoku To już pewnie szczegół ale... Jeśli dobrze zrozumiałem planujesz wysłać poprzez Ajax od razu otoczone HTML'em dane - rozwiązanie takie jest nieco prostsze niemniej jeśli oczekujesz wysokiej szybkości/odwiedzalności może lepiej wysłać poprzez Ajax same dane a następnie poukładać je na stronie już za pomocą samego JS [nawiązując do zasady wykorzystuj moc obliczeniową komputera usera jak tylko możesz ;] ]. Serwer powinien nieco na tym odciążyć ![]() Ten post edytował Firez 10.07.2008, 21:42:36 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 4 Dołączył: 5.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Hmm a nie lepiej po prostu napisać kontrolera 'Admin' a funkcje w nim nazwać add_user, del_user etc. Dzięki Kohanie uzyskasz wtedy bardzo ładne i wygodne linki smile.gif. W panelu będę mieć w sumie sporo takich 'modułów': users, news, articles, menu, files. Właściwie każdy z nich będzie miał akcję add, delete, edit, niektóre coś więcej. To tylko te podstawowe, do tego dojdą jeszcze jakieś specyficzne dla konkretnego klienta. Wydaje mi się, że chyba jednak warto to rozbić na osobne kontrolery. Cytat Jeśli tworzysz coś dość prostego - może wystarczy zaimplementować takie proste rozwiązanie? smile.gif. template.php Właściwie tak samo chciałem to zrobić, z tym wyjątkiem, że template.php jest już obudowany w cały szablon HTML, czyli to co będzie takie same na podstronach. Ewentualne osobne widoki np. z menu wyłącznie ze względu na wygode w edytowaniu tych szablonów ![]() Cytat Jeśli dobrze zrozumiałem planujesz wysłać poprzez Ajax od razu otoczone HTML'em dane - rozwiązanie takie jest nieco prostsze niemniej jeśli oczekujesz wysokiej szybkości/odwiedzalności może lepiej wysłać poprzez Ajax same dane a następnie poukładać je na stronie już za pomocą samego JS [nawiązując do zasady wykorzystuj moc obliczeniową komputera usera jak tylko możesz ;] ]. Serwer powinien nieco na tym odciążyć smile.gif. Hmm, planowałem przez Ajax wysłać dane otoczone XML (lub JSON, ale dopiero niedawno sprawdziłem jak to w ogóle wygląda ![]() Model pobiera zawartość katalogu, którego chciał kontroler i kontroler wsada te dane w widok, który wyglądałby w ten sposób:
Taki plik XML leci przez AJAXa do JavaScriptu, który już sobie obrabia te dane w HTMLa jak chce ![]() W taki sposób robiłem to do tej pory. Nie korzystałem z żadnej klasy PHP do AJAXa, miałem zwykły skrypt który generował XMLa. Od strony JavaScriptu korzystałem z JQuery do otworzenia zapytania i potem parsowania otrzymanego XMLa. Przyznam, że jeszcze dokładnie nie zagłębiłem się w Xajax, ale czy to będzie w moim przypadku pomocne? Chciałem po prostu w Kohanie sprawdzić czy zapytanie przyszło przez AJAXa, a potem wyrenderować odpowiedni XML. Funkcje w JS żeby to wszystko ładnie wyglądało i działało to już i tak sobie sam napiszę. Z tego co widziałem na pierwszy rzut oka, dzięki Xajaxowi mogę przerzucić to co normalnie pisałbym w JS do PHP:
Standardowo skrypt PHP zwróciłby mi wartość $newContent, a potem w JS ustawiłbym ją jako innerHTML jakiegoś elementu. Tutaj już w PHP piszę co ma się stać z wartością. Tylko to chyba i tak nie załatwi mi takich rzeczy jak np. sortowanie plików w tabelce czy zaznaczanie plików. Ale może się mylę? |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 4 Dołączył: 6.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat każdy rozszerza Admin_Controller'a. Cytat W panelu będę mieć w sumie sporo takich 'modułów': users, news, articles, menu, files. Właściwie każdy z nich będzie miał akcję add, delete, edit, niektóre coś więcej. To tylko te podstawowe, do tego dojdą jeszcze jakieś specyficzne dla konkretnego klienta. Wydaje mi się, że chyba jednak warto to rozbić na osobne kontrolery. Hmm w sumie to może jednak być wygodne, pod warunkiem że 'moduły' te będą miały wiele wspólnych funkcji. Cytat Hmm, planowałem przez Ajax wysłać dane otoczone XML (lub JSON, ale dopiero niedawno sprawdziłem jak to w ogóle wygląda tongue.gif). Otoczenie kodu XML'em nie zaszkodzi ![]() Cytat Przyznam, że jeszcze dokładnie nie zagłębiłem się w Xajax, ale czy to będzie w moim przypadku pomocne? IMHO praca z nim jest dużo wygodniejsza, możliwe nawet że kod ten będzie działał szybciej [w końcu sporo osób nad nim pracowało, poprawiało go, optymalizowało etc.]. Cytat Z tego co widziałem na pierwszy rzut oka, dzięki Xajaxowi mogę przerzucić to co normalnie pisałbym w JS do PHP: Dokładnie ![]() Cytat Tylko to chyba i tak nie załatwi mi takich rzeczy jak np. sortowanie plików w tabelce czy zaznaczanie plików. Ale może się mylę? Hmm chyba będzie trzeba wczytać dane przesyłane przez ajax do jakiejś zmiennej/tablicy/obiektu i następnie własnoręcznie na nich operować za pomocą js. Niemniej nie wiem czy xajax ma jakieś możliwości sortowania danych - ja do swoich potrzeb używałem jedynie mozliwości przekazywania danych jako innerhtml. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 21 Pomógł: 4 Dołączył: 5.07.2008 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Otoczenie kodu XML'em nie zaszkodzi ![]() Właśnie wczoraj pierwszy raz bawiłem się z JSON i chyba już nigdy nie użyję XMLa do przekazywania danych miedzy PHP i JS ![]() ![]() Cytat Hmm chyba będzie trzeba wczytać dane przesyłane przez ajax do jakiejś zmiennej/tablicy/obiektu i następnie własnoręcznie na nich operować za pomocą js. Niemniej nie wiem czy xajax ma jakieś możliwości sortowania danych - ja do swoich potrzeb używałem jedynie mozliwości przekazywania danych jako innerhtml. No właśnie - do przkazywania prostych danych i wstawiania ich poprostu na stronę to faktycznie jest bardzo dobre. W moim przypadku naprawdę dużo z tymi danymi robię po stronie JS. Podejrzewam, że można to wszystko też zrobić przez Xajax'a, ale pewnie byłoby z tym więcej zabawy niż napisanie odpowiedniego JS samemu ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:54 |