Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] Struktura kontrolerów
Forum PHP.pl > Forum > PHP > Frameworki
m87
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 tongue.gif

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? tongue.gif Z góry dzięki za wszystkie rady smile.gif
nrm
w system to NIC twojego nie powinno leżeć i być modyfikowane.

Możesz jak przedstawiłeś lub jako moduł (/modules)
m87
Ok, dzięki za odpowiedź smile.gif

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ę?
Firez
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 smile.gif.

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? smile.gif.
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 smile.gif.

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 smile.gif.


Cytat
Dobrze kombinuję?

Tak smile.gif. Co do Ajaxa - jeśli jeszcze nie wybrałeś konkretnej klasy do jego obsługi polecam Xajax - w necie powinieneś znaleźć instrukcje jego zaimplementowania w Kohanie.

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ć smile.gif.
m87
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
  1. <?php echo $header; ?>
  2. <?php echo $content; ?>
  3. <?php echo $footer; ?>


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 winksmiley.jpg

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 tongue.gif).
Model pobiera zawartość katalogu, którego chciał kontroler i kontroler wsada te dane w widok, który wyglądałby w ten sposób:

  1. <root>
  2. <?php foreach ($directories as $dir) { ?>
  3. <directory>
  4. <name><?php echo $dir['name'] ?></name>
  5. <created><?php echo $dir['created'] ?></created>
  6. <modified><?php echo $dir['modified'] ?></modified>
  7. </directory>
  8. <?php } ?>
  9. <?php foreach ($files as $file) { ?>
  10. <file>
  11. <name><?php echo $file['name'] ?></name>
  12. <size><?php echo $file['name'] ?></size>
  13. <created><?php echo $file['name'] ?></created>
  14. <modified><?php echo $file['name'] ?></modified>
  15. </file>
  16. <?php } ?>
  17. </root>


Taki plik XML leci przez AJAXa do JavaScriptu, który już sobie obrabia te dane w HTMLa jak chce winksmiley.jpg

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:

  1. <?php
  2. $objResponse->assign("SomeElementId","innerHTML", $newContent);
  3. ?>


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ę?
Firez
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 smile.gif.

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 smile.gif.

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.
m87
Cytat
Otoczenie kodu XML'em nie zaszkodzi smile.gif .


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 biggrin.gif Po pierwsze dane miały o 30% mniejszy rozmiar niż w XML, a po drugie funkcja json_encode jest nieporównywalnie szybsza niż bawienie się w obiekty DOM. Nie wspominam już o parsowaniu XMLa po stronie JS, co też trochę czasu i kodu zajmuje, a w przypadku JSON to jest jeden eval biggrin.gif

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 tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.