Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CodeIgniter] problem z MVC
Foxx
post
Post #1





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Witam,

od niedawna uczę się pracować na CodeIgniterze i próbuję zrealizować na nim pierwszy nieduży projekt. Jak to zwykle bywa w takich sytuacjach mam problem z rzeczami, które pewnie są oczywiste ale prawdopodobnie dlatego nigdzie nie mogę znaleźć na ten temat żadnej konkretnej informacji.

Chcę zrobić prosty system administracyjny, który będzie miał 3-poziomowe menu. Po wybraniu kategorii (np. zarządzanie stroną) w głównym menu wyświetli się menu drugiego poziomu z którego wybiorę moduł (np. newsy) i wtedy pojawi się menu przypisane do modułu z opcjami np. "dodaj news", "lista newsów".
Po wybraniu opcji zostanie załadowany odpowiedni widok, na przykład formularz dodawania newsa.

Ale jak w tym momencie miałyby wyglądać kontrolery dla takiej aplikacji? Jeżeli kontrolery będą odpowiednikami modułów, czyli np. News (z metodami "add", "delete", etc.) to kompletnie nie rozumiem co miałoby być uruchamiane po kliknięciu w menu pierwszego poziomu (oraz trzeciego). A przecież to menu trzeciego poziomu ostatecznie ma decydować co się wyświetli użytkownikowi.
Nie wiem czy jestem w stanie to jasno opisać. Jednym słowem nie mam doświadczenia i chciałbym żeby ktoś mnie nakierował na rozwiązanie.

Drugi problem jest podobny: załóżmy że mam stronę, na której jest jednopoziomowe menu z pozycjami "news", "products" i "contact". I mam kontrolery News, Products i Contact.
A teraz załóżmy, że przy każdym produkcie jest link do formularza w którym można zadać pytanie dotyczące tego przedmiotu. Czy on powinien być obsługiwany przez kotroler Products czy może już Contact i jakąś jego metodę w stylu "askProduct"?
Czy takie problemy rozwiązuje się arbitralnie i nie ma to większego znaczenia, czy są jakieś standardy?

Nie mogę nigdzie znaleźć przykładów na trochę bardziej skomplikowanych projektach...
Z góry dzięki za pomoc.

Ten post edytował Foxx 11.08.2008, 21:41:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
jarek_bolo
post
Post #2





Grupa: Zarejestrowani
Postów: 149
Pomógł: 12
Dołączył: 3.03.2008
Skąd: łódzkie

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


Musisz zastosować tutaj jakieś coś, nazwijmy to MainController dla każdej głównej pozycji Menu 1 poziomu, który to na podstawie URI będzie rozpoznawał jaki tamplate/menu teraz wyświetlić.
Jak już user dojdzie do końca, dotrze do jakichś konkretnych funkcjonalności, które będą wymagały użycia odpowiednich klas, to po prostu zaincludujesz te klasy będąc w tym MainControllerze.
Przeprowadzisz wymagane operacje i wynik z powrotem zwrócisz do MainControllera, który wyświetli odpowiedni template.

I tak za Twoim pierwszym opisem problemu musiało by to być mniej więcej tak:

1 poziom: www.strona.pl/manage_site/index -> wyświetli to swój jakiś dany template, a w nim drugi poziom menu
2 poziom: www.strona.pl/manage_site/newsy/index -> tutaj znowu wyświetlamy dany template, czyli 3 poziom
3 poziom: www.strona.pl/manage_site/newsy/{lista, dodaj, itd.} -> tutaj już konkretne funkcje do wykonania, w tym miejscu należało by zaincludować klase News, model. itd.

  1. <?php
  2. class MainController extends ciController { // nie znam dobrze CI
  3.  
  4. public function index() {
  5. $this->view('templatka_z_menu_drugiego_poziomu.html');
  6. }
  7.  
  8. public function news() {
  9. if (isset($this->uri->segment(3))) {
  10. include(News.class.php);
  11.  
  12. switch ($this->uri->segment(3)) {
  13. case 'list':
  14. // wyciągasz liste
  15. break;
  16. case 'add':
  17. // dajesz formularz
  18. break;
  19. //itd.
  20. }
  21. } else {
  22. $this->view('templatka_z_menu_trzeciego_poziomu.html');
  23. }
  24. }
  25. }
  26. ?>


I tutaj chciał bym zaznaczyć, że sam nie wiem czy to dobre rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Nie korzystałem nigdy z CI czy Kohany. Mile widziana krytyka bardziej doświadczonych użytkowników tych frameworków.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 18.10.2025 - 00:12