![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
od niedawna uczę się pracować na CodeIgniterze i próbuję zrealizować na nim pierwszy nieduży projekt. myślę że jak zaczynasz to o CI możesz poczytać tutaj: http://www.php.rk.edu.pl/w/p/kurs-ci/ na początek na pewno dobry kursik ![]() Polecam (na pewno nie tylko ja) przerzucenie się na Kohane... -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
Aż tak źle ze mną nie jest
![]() Znam ten kurs, a także oficjalny ale nie znajduję w nich odpowiedzi na moje pytania. To jest raczej pytanie o model MVC niż o konkretny framework. Najbardziej chciałbym usłyszeć jak ktoś by rozwiązał takie dwa przykłady w praktyce. Może inaczej sformułuję pytanie: Załóżmy że mam menu dwupoziomowe. W pierwszym poziomie wybieram pomiędzy "administracja konfiguracją" a "administracja stroną". Jeżeli wybiorę administrację stroną to pojawia się menu drugiego poziomu z opcjami na przykład "newsy" i "produkty". Jeżeli kliknę na "produkty" to pojawia się menu trzeciego poziomu z opcjami "dodaj" i "lista". Po wybraniu "dodaj" pojawia się formularz dodawania produktu. I teraz: logiczne wydaje się, żeby w tym momencie obsługiwał to kontroler "produkty" i wyświetlał mi widok "dodaj_produkt". A więc w url'u mam "products/add/". Wszystko jasne. Ale to dopiero po wybraniu opcji z ostatniego menu. Ale nie wiem co miałoby się dziać wcześniej, po kliknięciu na "administracja stroną" pierwszego menu a potem po wybraniu modułu z drugiego menu. Podczas gdy normalnie załatwiłbym to odpowiednimi parametrami przekazywanymi w url'u, który wyglądałby jakoś tak: "?cat=2&mod=2&option=1" to teraz nie mam pojęcia jak to rozwiązać. Jeszcze inaczej: zanim nie dokonam wyboru w ostatnim menu nie wyświetlam żadnego widoku i wobec tego nie wiem jaki kontroler miałby obsługiwać operacje na menu pierwszego i drugiego poziomu. A może już w momencie wybrania opcji z pierwszego menu powinienem uruchamiać kontroler "administracja_strona", który byłby taką wielką klasą, która swoimi metodami robi wszystko? Ale jeden kontroler to brzmi jak zły pomysł. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
A może już w momencie wybrania opcji z pierwszego menu powinienem uruchamiać kontroler "administracja_strona", który byłby taką wielką klasą, która swoimi metodami robi wszystko? Ale jeden kontroler to brzmi jak zły pomysł. przecież nie będziesz tego robił w jednej classies! robisz sobie np klasę admin w niej jakieś metody... np. welcome ![]() Następnie masz linki administracja i zarządzanie (czy coś...) no i np. dwie classy. W classie administracja w index() wrzucasz do wikoku menu2 itd.. -------------------- |
|
|
![]()
Post
#5
|
|
![]() 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 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 170 Pomógł: 4 Dołączył: 11.08.2006 Ostrzeżenie: (10%) ![]() ![]() |
Cytat Rozumiem, czyli klasa Admin, która ma się zajmować wyświetlaniem odpowiednich bloków menu na stronie. NIE Cytat 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ć. nie wiem dokładnie jak to jest w CI a w Kohanaphp masz coś takiego jak Tepmlate Controller który pewnie by ci to ułatwił - http://docs.kohanaphp.com/addons/template?s[]=template -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 651 Pomógł: 28 Dołączył: 4.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
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.
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 -------------------- Sygnatura niezgodna z regulaminem.
|
|
|
![]()
Post
#8
|
|
![]() 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.
I tutaj chciał bym zaznaczyć, że sam nie wiem czy to dobre rozwiązanie ![]() Nie korzystałem nigdy z CI czy Kohany. Mile widziana krytyka bardziej doświadczonych użytkowników tych frameworków. -------------------- "Jeden człowiek nie zmieni świata, ale jeden człowiek może przekazać informację która zmieni świat." - David Icke
| PAMIĘTAJ, JESTEŚ POLAKIEM !!! | Jam jest Polska, Ojczyzna Twoja, ziemia Ojców, z której wzrosłeś. Wszystko, czym jesteś, po Bogu - mnie zawdzięczasz!! |
|
|
![]()
Post
#9
|
|
![]() Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Witam, od niedawna uczę się pracować na CodeIgniterze i próbuję zrealizować na nim pierwszy nieduży projekt. Jeśli możesz to olej CI i przenieś się na Kohana. Jest to osobny framework bazujący na idei CI w całości napisany w PHP5 i, co istotne, rozwijany ![]() |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 896 Pomógł: 76 Dołączył: 15.11.2003 Skąd: Sosnowiec/Kraków Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wszystkim za pomoc, teraz potrzebuję czasu żeby to wypróbować.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 07:37 |