![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki pomocy dobrych ludzi z forum wybrałem swój framework Kohana. Ale mam z nim pewien kłopot. Jak ustawić jeden kontroler dla kilku podstron? Treść tych podstron ma być odczytywana z bazy danych. Do czego jest mi potrzebny tylko identyfikator, który jest podany w adresie, np home. Dzięki przepisywaniu adresów w apachu mam nice-url: adres.pl/home albo adres.pl/contact. Tylko, że Kohana dla takich adresów szuka kontrolerów home i contact. A kontroler ma być jeden wspólny i tylko ma pobierać różne rekordy z tej samej tabeli. Jak to zrobić przy pomocy Kohany?
pozdro |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Nieautoryzowani Postów: 2 249 Pomógł: 305 Dołączył: 2.10.2006 Ostrzeżenie: (0%) ![]() ![]() |
Powinny być dwa kontrolery. Możesz utworzyć sobie główny kontroler, np. site, po którym oba kontrolery będą dziedziczyły.
-------------------- Google knows the answer...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Niemożliwe! Musi być inne wyjście. Przecież dla 20 podstron nie będę pisać 20 kontrolerów które będą się różnić tylko identyfikatorem rekordu pobieranego z bazy?? Przy większej stronie liczba plików będzie masakrycznie duża. Na pewno nie da się tego ominąć?
pozdro |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
A pomyślałeś żeby zrobić jeden kontroler, który będzie z linku otrzymywał zmienną określającą który rekord pobrać?
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 170 Pomógł: 40 Dołączył: 14.08.2008 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
zawsze możesz namieszać w routers dla kohany 2.3.x
kohana/application/config/routes.php i robisz Kod $config['_default'] = 'witamy'; $config['strona'] = 'page/strona/1'; $config['kontakt'] = page/strona/2'; i potem jak wywołasz adres.strony/kontakt.html to do metody strona kontrolera page zostanie podana wartość 2 ;] add. bbcode ;] Ten post edytował Gryf 9.05.2010, 08:56:56 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Riklaunim, o tym pomyślałem ale nie mam pojęcia jak to zrobić.
Gryf, wybrałem Kohana3 i tam chyba trzeba to zrobić jakoś inaczej. Nawet takiego pliku jak podałeś nie ma. pozdro |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 879 Pomógł: 189 Dołączył: 14.06.2006 Skąd: Bytom Ostrzeżenie: (0%) ![]() ![]() |
@nowy_pehapowiec skoro wybrałeś Kohana 3 to powinieneś wiedzieć, że główną zmianą w stosunku do wersji 2 jest zmiana routingu. Polecam poszukać w google odpowiednich materiałów. Właśnie sprawdziłem i mogę potwierdzić, że takowe są.
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
destroyerr dzięki, trochę się naszukałem, ale wszystkiego i tak nie mam.
Znalazłem bootstrap. Tam chyba mogę dać np: Route::set('default', '(<id>)') ->defaults(array( 'controller' => 'main', 'action' => 'page', )); Wtedy wpisując strona.pl/home odwołam się do kontrolera main i akcji page? Ale teraz nie wiem jak skorzystać w tej akcji z id inaczej niż poprzez $_SERVER? I mam jeszcze jedną zagwozdkę. Co jeśli dla adresu strona.pl/contact będę chciał skorzystać z innej akcji albo kontrolera? Będę chciał wyświetlić formularz a nie pobierać dane z bazy. Jeśli znasz jakieś dobre tutki o Kohana 3 to proszę podaj linki do nich. Ja bazuje na oficjalnej (kiepskiej, bez przykładów) dokumentacji i na nasza.kohana.pl. Poza tym to tylko pojedyncze wpisy na blogach. Nigdzie nie ma niczego bardziej kompletnego? pozdro |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 640 Pomógł: 44 Dołączył: 8.02.2004 Ostrzeżenie: (0%) ![]() ![]() |
Do oddzielnych logicznie stron np. kontakt, czy list newsów stosuj oddzielne kontrolery. Jeżeli narzędzie nie ma wystarczającej dokumentacji to do kosza i głęboko zakopać
![]() -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Riklaunim właśnie takie dwa kontrolery chciałbym zrobić, jeden do "stron z bazy", drugi do "formularza kontaktowego". Ale nie wiem jak zarządzać ich użyciem. Co zrobić, żeby strona kontakt korzystała ze swojego kontrolera a reszta z innego. To powinno być w tym bootstrapie ale nie wiem jak zdefiniowac takie dopasowanie.
A dokumentacja Kohany jest gorsza niż niewystarczająca. Tylko, że nie znalazłem lepszej alternatywy. Inne FW to kobyły po kilkanaście albo kilkadziesiąt MB, tysiące funkcjonalności których nie potrzebuje. Chyba, że coś przegapiłem w swoich poszukiwaniach? pozdro |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dodajesz sobie poprostu odpowiednie reguły routingu dla odpowiednich stron.
Pamiętaj, że najbardziej ogólna reguła idzie na koniec ponieważ pierwsza pasująca jest wykonywana. Np.
Edit: Oczywiście skoro szukamy id to regex dla tego parametru powinien wyglądać raczej tak: "[0-9]+?" Ten post edytował ziqzaq 9.05.2010, 12:52:45 |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ziqzaq dzięki,
już powoli zaczynam to kumać. Po prostu wstawiam kolejne wzorce tak jak w mod_rewrite. Tylko jak jest z tym id? Jak użyć id z adresu w kontrolerze? I czy można używać innych nazw zmiennych zamiast id? pozdro Ten post edytował nowy_pehapowiec 9.05.2010, 14:01:47 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli się dobrze orientuję to masz dwa podstawowe parametry: <controller> i <action>.
Resztę definiujesz wedle uznania tak jak pokazałem wczesniej. Parametry (oprócz <controller> i <action>) są przekazywane do metody akcji. Czyli mając parametry <id> i <przykładowy> i wykonywaną akcję "index" z jakiegoś kontrolera masz:
Nazwy zmiennych w parametrach metody "action_index" powyżej są dowolne czyli równie dobrze może być:
Ten post edytował ziqzaq 9.05.2010, 14:21:13 |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czy razem to powinno być jakoś tak?
Bootstrap: Kod Route::set('default', 'contact') ->defaults(array( 'controller' => 'main', 'action' => 'contact_form', )); Route::set('default', '(<id>)') ->defaults(array( 'controller' => 'main', 'action' => 'page', )); I w kontrolerze: Kod public function action_contact_form() { //formularz } public function action_page($id) { var_dump($id); } ![]() Ten post edytował nowy_pehapowiec 9.05.2010, 14:35:15 |
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Wydaje się ok oprócz tego, że nadpisujesz sobie regułę "default" (zostanie tylko ta druga).
Ten post edytował ziqzaq 9.05.2010, 14:45:49 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
JEszcze raz dzięki!
Fakt, powinienem mieć dwie różne nazwy. Czy teraz jest ok?? Kod Route::set('nie_default_a_contact', 'contact') ->defaults(array( 'controller' => 'main', 'action' => 'contact_form', )); Route::set('default', '(<id>)') ->defaults(array( 'controller' => 'main', 'action' => 'page', )); Czy z nazw tych tras (route) gdzieś później się korzysta? pozdro |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Czy teraz jest ok?? Wygląda ok. Sprawdź sobie. Cytat Czy z nazw tych tras (route) gdzieś później się korzysta? To już zależy od twoich potrzeb. Możesz pobierać sobie zdefiniowane ścieżki routingu poprzez metodę Route::get($name). |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
A do czego może mi się przydać: Route::get($name)
Jakie może być dla tego praktyczne zastosowanie? pozdro |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 428 Pomógł: 128 Dołączył: 17.06.2007 Ostrzeżenie: (0%) ![]() ![]() |
Szybki przykład to ostatni nagłówek dokumentacji Routes, URLs, and Links.
|
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 0 Dołączył: 24.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czytałem to kilka razy ale nic ciekawego nie zauważyłem albo nie zrozumiałem :| ale dzięki za pomoc
pozdro |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 06:49 |