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
Foxx
post
Post #2





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

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


Rozumiem, czyli klasa Admin, która ma się zajmować wyświetlaniem odpowiednich bloków menu na stronie.
Ale co w momencie, kiedy wybiorę opcję z menu trzeciego poziomu i będzie to np. dodawanie produktów? Za to odpowiedzialny powinien być już kontroler "produkty" ze swoimi metodami "dodaj", "usuń", etc. a przecież chcę żeby cały układ menu, wszystkie trzy poziomy nadal się wyświetlały. Jeżeli będzie za to odpowiedzialny kontroler Admin, to jak mogę mieć i jedno i drugie (to znaczy zarówno trzy poziomowe menu z zaznaczonymi opcjami jak i widok dodawania produktu).

Inaczej: dopóki klikam w menu 1. i 2. poziomu w urlu będę widział powiedzmy: "admin/menu1/id_wyboru/", "admin/menu2/id_wyboru/" - kontroler admin obsługuje mi nawigację - ale jak kliknę w menu 3. poziomu to będzie już "produkty/dodaj" - a menu tak jak było wybrane musi się nadal wyświetlać.

Ten post edytował Foxx 12.08.2008, 15:01:34
Go to the top of the page
+Quote Post
Speedy
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Cytat(Foxx @ 12.08.2008, 16:00:54 ) *
Inaczej: dopóki klikam w menu 1. i 2. poziomu w urlu będę widział powiedzmy: "admin/menu1/id_wyboru/", "admin/menu2/id_wyboru/" - kontroler admin obsługuje mi nawigację - ale jak kliknę w menu 3. poziomu to będzie już "produkty/dodaj" - a menu tak jak było wybrane musi się nadal wyświetlać.


Możesz sobie includować jakiś plik, w którym będzie przechowywane menu, a w tym pliku w zależności od parametrów, jakie są podane w url-u wyświetlać menu.

np.

  1. <?if($this->uri->segment(2) == 'news'):?>
  2. menu newsów
  3.  <?if($this->uri->segment(3) == 'opcja1'):?>
  4.  menu newsów - opcja 1
  5.  <?endif;?>
  6. <?elseif($this->uri->segment(2) == 'inny_modul'):?>
  7. // ...
  8. // itd.
  9. <?endif;?>


Jeśli jest Ci wygodniej, to możesz to rozbić na jeszcze więcej plików, albo napisać sobie jakąś klasę do obsługi tego, którą będziesz ładował za każdym razem, kiedy zajdzie taka potrzeba. Koncepcje mogą być różne.

Ten post edytował Speedy 12.08.2008, 16:05:45
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: 3.10.2025 - 23:12