Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter] HMVC- podział aplikacji na moduły
Forum PHP.pl > Forum > PHP > Frameworki
webmaniak
Witam,
zaczynam swoją przygodę z CodeIgniter'em i mam pewien kłopot. Mianowicie chciałbym od początku podzielić apliakcję na moduły. Znalazłem parę poradników, pobrałem dodatek HMVC. Wszystko jest ok, gdy moduły umieszczam w katalogu modules, Problem jednak pojawia się jeśli chce zmienić nazwę tego katalogu na jakiś inny, np. cms. Dodałem do config.php:
  1. $config['modules_locations'] = array(
  2. APPPATH.'cms/' => '../cms/',
  3. );

dodatkowo dałem też w routerze:
  1. $route['default_controller'] = "cms/welcome";

No i gdy wpiszę localhost/nazwa_projektu/ to jest ok, wczytuje się widok tak jak trzeba, ale nie działa mi adres: localhost/nazwa_projektu/nazwa_modulu. Pojawia się komunikat:
Kod
404 Page Not Found
The page you requested was not found.

Chciałbym zrozumieć zasadę działania tych modułów w CI, dlatego proszę o pomoc.
mieszkos
y, nie bardzo kminię.

nie ładujesz modułu, tylko kontroler czyli

jakieswww.pl/kontroler

a nie model.

w modelu obsługujesz bazy.

a $route['default_controller'] = "cms/welcome"; dajesz samo cms nie cms/welcome

bo cms w towim przypadku to będzie kontroler a welcome to będzie akcja kontrolera cms
webmaniak
Ok, dzięki za odpowiedź. Zobaczę to co napisałeś i dam znać smile.gif
mieszkos
aha i jak nie masz zrobionego htaccess, to dajesz adres jakisadres.pl/index.php/kontroler
webmaniak
No właśnie okazuje się że problem był też w .htaccess, niby go miałem ale reguły nie były do końca prawidłowe smile.gif Teraz jest ok smile.gif Dzięki. Skoro już jesteśmy przy temacie modułów to gdzie trzymać szablony/templatki? W osobnym module i wczytywać je z innego modułu? Zapewne rozwiązań jest kilka, mógłby ktoś przedstawić mi swoje?
mieszkos
ja zawsze robie sobie w folderze views folder includes w ktorym mam 3 pliki: header.php, footer.php, template.php


i w headerze ofc daje header, w template daje :

  1. <?php
  2. $this->load->view('includes/header');
  3. $this->load->view($content);
  4. $this->load->view('includes/footer');
  5. ?>


a w footer już stopka i zamkniecie body html.

potem nomrlanie w folderze powiedzmy robie sobie plik widoku dla strony glownej czyli np. home.php i napisze sobie tam: Witaj !

i teraz robie kontroler a w nim w funkcji (akcji) index() daje
  1. $data['content'] = 'home';
  2. $this->load->view('includes/template',$data);


i tyle ;>
webmaniak
Ok, chciałbym jeszcze dodatkowo mieć osobny szablon dla panelu administracyjnego. Czy robić np. blog- i w katalogu views tak jak opisałeś, a dla panelu, np. dashboard i tam tak samo?
mieszkos
zrób sobie includes_admin i tam zrób to samo tylko dla admina i potem w adminie w kontrolerze ładuj po prostu includes_admin zamist includes ktory bedzie dla normlaniej strony
szok
Po co utrudniać sobie życie? I składać szablon z kilku plików zamiast użyć layoutów?

https://github.com/EllisLab/CodeIgniter/wiki/layout-library

mieszkos
a jakie to utrudnienie ?
webmaniak
Każdy preferuje co innego -tak jak sądziłem smile.gif Zobaczę oba rozwiązania i zapewne sam wybiorę jedno z nich smile.gif Dziękuję.
qrooel
Cytat(mieszkos @ 27.12.2012, 16:41:06 ) *
a jakie to utrudnienie ?


Takie, że w jednym pliku otwierasz tag (html, body), a w drugim go zamykasz, co sprawia problemy z podświetlaniem tagów/bloków w edytorach tekstowych chociażby. Albo człowiek gubi się i nie wie w końcu co zamyka jaki tag.
szok
Cytat(qrooel @ 27.12.2012, 18:06:58 ) *
Takie, że w jednym pliku otwierasz tag (html, body), a w drugim go zamykasz, co sprawia problemy z podświetlaniem tagów/bloków w edytorach tekstowych chociażby. Albo człowiek gubi się i nie wie w końcu co zamyka jaki tag.



+ 1 smile.gif

+ 2 - mniej plików do ładowania dla requesta.
webmaniak
Cytat(mieszkos @ 27.12.2012, 01:00:40 ) *
$route['default_controller'] = "cms/welcome"; dajesz samo cms nie cms/welcome
bo cms w towim przypadku to będzie kontroler a welcome to będzie akcja kontrolera cms

Jeszcze wrócę do początku wątku. Wpisując cms jako default_controller niestety nie działa mi:
Kod
404 Page Not Found
The page you requested was not found.

Wpisując cms/welcome, samo welcome albo jakiś inny moduł to wszystko działa.
mieszkos
a masz zrobiony taki kontroler z taką akcja ?
webmaniak
Nie mam, ponieważ to jest katalog z modułami. Czyli pobrałem ten HMVC i utworzyłem katalog modules, a później zmieniłem jego nazwę na cms, stąd ta linijka:
  1. $config['modules_locations'] = array(
  2.  
  3. APPPATH.'cms/' => '../cms/',
  4.  
  5. );

A w katalogu cms tak jak pisałem będę przechowywał moduły, więc users, pages, blog, navigation itd. Więc jako default_controller mam wpisać moduł który ma być odczytywany domyślnie? Dobrze to rozumiem?
phpion
Cytat(mieszkos @ 27.12.2012, 21:00:04 ) *
a masz zrobiony taki kontroler z taką akcja ?


Cytat(webmaniak @ 28.12.2012, 08:55:57 ) *
Nie mam, ponieważ to jest katalog z modułami.


Routing kieruje na kontroler/akcja, niepotrzebnie mieszasz tutaj z modułami. Wskaż domyślny kontroler oraz akcję dla routera, a nie katalog z modułami (router miałby wylosować odpowiedni kontroler i metodę?).
webmaniak
Ok, chyba rozumiem, zamiast cms/users mam wpisywać samo users ponieważ tam będzie kontroler users, więc dodatek cms jest zbędny. Dziękuję za pomoc w zrozumieniu smile.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.