![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zacząłem swoją przygodę z CI. Czy dobrze myślę?
chodzi mi o te funkcje _getNewMovies. Np mam pobrac z bazy 3, najnowsze filmy, 4 cytaty itp. Czy dobrym pomyslem jest robienie nowych funkcji nie widocznych dla URL'a? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 245 Pomógł: 4 Dołączył: 22.01.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ja bym to zrobił tak:
![]() Polecam poczytać User Guide: http://codeigniter.com/user_guide/database...ive_record.html |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 0 Dołączył: 29.09.2007 Ostrzeżenie: (0%) ![]() ![]() |
DIWI
Ale wtedy to jest MVC bez M (Modelu) ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
No dobrze, ale dlaczego całą stroną powinien zarządzać 1 kontroller a nie każdą podstroną 1 kontroller?
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego od razu jeden kontroler? Nie widzę sensu robienia funkcji takich jak Twoja niedostępnych z poziomu URL, a to z tego powodu, że zwyczajem w CI jest dodawanie na początku pliku:
Kod if (!defined('BASEPATH')) exit('No direct script access allowed'); .To rozwiązuje problemy z bezpośrednim dostępem do funkcji przez kogoś kto chce ją wywołać bezpośrednio. Ja bym to tak napisał:
i później odpowiednia funkcja w modelu Film_Model, który załadujesz albo w konstruktorze albo w funkcji index(). Polecam stronę http://code-igniter.pl - może nie ma jeszcze wielu postów, ale te z odnośniami do tutoriali po polsku są. Ten post edytował grzesiek_g 9.11.2007, 08:23:35 -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ale ja zadałem pytanie dlaczego każda podstrona nie powinna mieć swojego kontrollera. I kiedy tworzyć nowy kontroller? Gdzie foreach'owac wyniki z bazy?
Btw. Dobrze mam napisana funkcje w modelu?
Ten post edytował Exodus 9.11.2007, 13:14:31 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Dajmy taki przykładowy kontroler newsy, tutaj nie ma sensu pisać wielu funkcji, więc jeden kontroller - jedna podstrona. Inny przykład w newsy w panelu, możemy tutaj obsługiwać kilka podstron, a posłużą do tego funkcje w kontrolerze, m.in. dodaj, edytuj, usuń, zablokuj...
Jeśli chodzi o wyrzucenie wyników z bazy jeśli mam wyswietlić bezpośrednio do widoku to nie bawię się w kontrolerze, gdy korzystam z szablonu dedykowanego dla jednego rekordu wtedy przypisuję w kontrolerze dane do widoku pojedyńczo w pętli, a następnie tablicę utworzoną z takich szablonów ładuję do widoku który jest nadrzędny. Np.
-- EDIT -- Co do funkcji to jest ok, ale można by dodać jeszcze warunek jeśli zapytanie nie zwróci wyników. Ten post edytował grzesiek_g 9.11.2007, 14:43:49 -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Severity: Notice
Message: Undefined variable: row Filename: views/index.php Line Number: 4
Wyczytałem żeby nie foreachować wyników w kontrollerze. Kiepsko coś tłumaczysz, bo nie mogę zrozumieć kiedy mam tworzyc nowy kontroller, a kiedy operować na 1 |
|
|
![]() ![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Zacząłem swoją przygodę z CI. Czy dobrze myślę? Dobrze. Czy dobrym pomyslem jest robienie nowych funkcji nie widocznych dla URL'a? Zależy od sytuacji ale ogólnie bardzo dobrym. Ja bym to zrobił tak: Nie propaguj złych nawyków ![]() No dobrze, ale dlaczego całą stroną powinien zarządzać 1 kontroller a nie każdą podstroną 1 kontroller? A po co? 1 podstrona=1 kontroler? ile byś tego miał? w tym żadnego sensu nie ma. I kiedy tworzyć nowy kontroller? Gdzie foreach'owac wyniki z bazy? Btw. Dobrze mam napisana funkcje w modelu? Wtedy kiedy logika mówi, że potrzebujesz nowy. Wyniki przetwarzasz w widoku. Dobrze. -------------------- |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Kiepsko mi się trochę widzi. Wkońcu Widok jest żeby "oduzależnić" PHP od strony wizualnej. Mówisz, że najlepszą opcją jest używanie "forecza" w widoku ?
Cytat A po co? 1 podstrona=1 kontroler? ile byś tego miał? w tym żadnego sensu nie ma. A jaki sens jest, żeby PHP parsowało za każdym razem te podstrony do których tak naprawdę nie wchodzisz. Wchodzisz na strone główną a parsuje wszystkie podstrony. Czy nie wydaje Ci się, że to jest Non-Sens? Ten post edytował Exodus 9.11.2007, 15:39:38 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Co do bezsensu 1 kontroler = 1 podstrona mogę się częściowo zgodzić, np gdy piszemy panel, tam możemy ładnie pogrupować sobie metody w klasach (kontrolerach), gdy piszemy dużą stronę to jeśli w innym wypadku pogrupujemy w kontrolerach różne podstrony musimy korzystać z routera. Poza tym to trochę nam zaciemni kod, przynajmniej tak mi się wydaje.
OK, wytłumaczę jak ja to widzę dokładniej: Mamy taką niewielką stronę: - newsy pogrupowane w kategorie, - formularz kontaktowy, - strona o nas, Chcemy uzyskać taką strukturę linków: http://example.org/news/12/ruszyla-nowa-strona http://example.org/newsy/1 http://example.org/kategoria/1/nowosci http://example.org/kontakt ... 1. Piszemy kontroler dla kategorii newsów w panelu z metodami: index (lista), dodaj, edytuj, usun. dostaniemy np taki adres: http://example.org/kategorie_admin/edytuj/123 2. Podobny kontroler dla zarządzania newsami. 3. Na głównej wyświetlamy newsy - kontroler np Newsy 4. Rozwinięcie newsa - kontroler News (można też dać oddzielną metodę w kontrolerze Newsy, ale wtedy albo nam się wydłuży url, albo będziemy musieli utworzyć regułę dla routera) 5. Kontroler dla formularza kontaktowego 6. Kontroler dla pozostałych stron statycznych i tu podobnie, albo dłuższy url, albo router (można też rozbić to na oddzielne kontrolery) Wszystko moim zdaniem zależy od tego ile przewidujemy kontrolerów, jeśli mała stronka to można spokojnie pisać na wielu kontrolerach, ale w pewnym momencie, wraz ze wzrostem liczby kontrolerów bardziej sensownym rozwiązaniem będzie tak jak pisze normanos, grupowanie. Parsowana jest jedynie metoda którą wywołujesz, więc nic nie stoi na przeszkodzie by kilka metod umieścić w jednym kontrolerze. Jeśli chodzi o foreach-owanie danych z bazy w kontrolerze to jest to dyskusyjna sprawa, robię tak by widok był mniej skomplikowany, ale tylko jeśli mam szablon który powtarzam wielokrotnie. Ten post edytował grzesiek_g 9.11.2007, 16:09:09 -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Masz zupełnie złe podejście w obu sprawach:
ad. 1 - kontroler jest od sterowania przebiegiem, widok jest oddzielony od aplikacji. Gdzie chcesz pomielić dane z htmlem? w modelu, kontrolerze? To podstawowy błąd osób początkujących,myślą, że jak oddzielenie to nie może być tam ani grama php ![]() ad.2 ale co Ci się znowu parsuje skoro masz wywoływane odpowiednie metody a nie wszystkie?!? Tak, wydaje mi się, że tok Twojego myślenia jest nonsensowny ![]() 5. Kontroler dla formularza kontaktowego 6. Kontroler dla pozostałych stron statycznych i tu podobnie, albo dłuższy url, albo router (można też rozbić to na oddzielne kontrolery) Tu się z Tobą nie zgodzę. Po co tyle kontrolerów? Kontroler dla formularza? WTF?!? Wystarczy jedna metoda. Linki sobie ustawisz w routerze wg.własnego widzimisię. Kontrolery powinniście tworzyć wg.klucza logicznego: obsługa newsów, artykułów, userów, itd. i nie sugerować się urlem tylko logiką. -------------------- |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
ad. 1 - kontroler jest od sterowania przebiegiem, widok jest oddzielony od aplikacji. Gdzie chcesz pomielić dane z htmlem? w modelu, kontrolerze? To podstawowy błąd osób początkujących,myślą, że jak oddzielenie to nie może być tam ani grama php ![]() Ale ja nie neguję użycia php w widoku, wyraźnie napisałem, że ładuję do widoku dane z bazy danych - przekazane od kontrolera bez żadnej jego obróbki. Ale jeśli mam szablony wielokrotne to najpierw ładuję w foreach dane do szablonów, a dopiero później wysyłam to do widoku. Ale to tylko w tym wypadku, poza tym nie widzę nic złego w umieszczeniu w kontrolerze odwołania do funkcji która mi obcina z danych odpowiednią ilość znaków, wyświetla datę... ad.2 ale co Ci się znowu parsuje skoro masz wywoływane odpowiednie metody a nie wszystkie?!? Tak, wydaje mi się, że tok Twojego myślenia jest nonsensowny ![]() Nie wiem czy to akurat do mnie, bo to była odpowiedź na wcześniejszy post Exodusa. Tu się z Tobą nie zgodzę. Po co tyle kontrolerów? Kontroler dla formularza? WTF?!? Wystarczy jedna metoda. Linki sobie ustawisz w routerze wg.własnego widzimisię. Nie napisałem, że tak ma być - CI jest tak elastyczny, że daje nam swobodę wyboru i jaką ktoś drogę obierze - taka będzie dobra, co nie znaczy, że najlepsza... Ja osobiście wolę rozbicie jeśli nie mam wielu plików, wtedy mam wszystko uporządkowane. Używania routera nie neguję, tak jak napisałem - jak wygodniej. -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zacząłem już trochę robić
![]() Czy ten model jest napisany, dobrze i optymalnie ?
|
|
|
![]()
Post
#15
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
function getNewUsers($how){ $this->db->limit($how,0); $this->db->orderby('register_date','DESC'); $this->db->where('activation', '0') return $this->db->get('users'); } Można też tak:
Od razu mamy pobrany w modelu wynik zapytania poprzez funkcje result(), oraz sprawdzamy czy zapytanie się wykonało. Ale może normanos jeszcze się wypowie na ten temat. -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
No i teraz znowu mam pytanie.
Załóżmy chcę zrobić podgląd profilu danego użytkownika. To mam stworzyć nowy kontroler np. profile, dać w nim funkcje index() zwracającą listę wszystkich użytkowników, look(); tam będzie pobierane id usera i na podstawie jego wyświetlany profil, czy robić to w tym samym kontrolerze co zrobiłem dotychczas czyt. Index. |
|
|
![]()
Post
#17
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
poza tym nie widzę nic złego w umieszczeniu w kontrolerze odwołania do funkcji która mi obcina z danych odpowiednią ilość znaków, wyświetla datę... No, a ja właśnie widzę ![]() Wyobraź sobie np.metody /feed/atom i /feed/rss kontrolera feed (po prawdzie to jedną metodę). Z modelu pobierasz dane i przekazujesz je do widoku (wczytujesz wersje rss/atom). Gdybyś teraz chciał się bawić tymi helperami poza widokiem to musiałbyś robić osobne ścieżki dojścia do tych widoków. Tylko niepotrzebne kombinacje. Co więcej, robiąc zmiany, dodając coś, masz już kontroler strasznie ukierunkowany na daną czynność (lub model) i wtedy pod znakiem zapytania staje wykorzystanie danej metody w innym celu. A jak starasz się to zrobić bardziej ogólnie to wtedy problemem staje się tylko wczytanie odpowiedniego widoku a nie pisanie kolejnych metod. Pamiętaj KISS (tudzież BUZI) ![]() Od razu mamy pobrany w modelu wynik zapytania poprzez funkcje result(), oraz sprawdzamy czy zapytanie się wykonało. Ale może normanos jeszcze się wypowie na ten temat. Słusznie, można to robić np. tak:
Załóżmy chcę zrobić podgląd profilu danego użytkownika. To mam stworzyć nowy kontroler np. profile, dać w nim funkcje index() zwracającą listę wszystkich użytkowników, look(); tam będzie pobierane id usera i na podstawie jego wyświetlany profil, czy robić to w tym samym kontrolerze co zrobiłem dotychczas czyt. Index. Na logikę: osobny kontroler. U mnie profil to blisko 40 różnych funkcji więc logicznym było wydzielenie tego. Ten post edytował normanos 9.11.2007, 17:31:45 -------------------- |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
A chciałbym wiedzieć jeszcze jedną kwestię. Jak to zrobić? Bo mam w tej chwili szablon pocięty na 3 części:
-Header --XXX -Footer W tej chwili header nie ma żadnego kontrollera, jest tylko luźnym widokiem. To samo footer. Ale jak przyjdzie robić w headerze że jeżeli użytkownik jest zalogowany to nie wyświetla okna logowania, tylko linki typu. >Witaj xxx, Edytuj profil itp. Jak to zrobic żeby nie pisać w każdym kontrollerze funkcji sprawdzającej czy użytkownik jest zalogowany ? |
|
|
![]()
Post
#19
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ja bym stworzył nowy kontroler, który obsługuje profile i w oddzielnych metodach lista, profil użytkownika, pliki użytkownika, czy co tylko nam potrzeba...
Cytat Jak to zrobic żeby nie pisać w każdym kontrollerze funkcji sprawdzającej czy użytkownik jest zalogowany ? Piszesz klasę do obsługi autoryzacji i autentykacji, ładujesz ją w konstruktorze i wywołujesz tylko metodę z tej klasy. Cytat W tej chwili header nie ma żadnego kontrollera, jest tylko luźnym widokiem. Jak chcesz zrobić kontroler dla nagłówka? Nie w tą stronę idziesz. Ja w kontrolerze w metodzie, w zależności od potrzeb wysyłam różne dane do nagłówka, np. tytuł strony, wywołanie pliku javascript... Ale jest to kontroler odpowiedzialny za treść strony, np newsy. Wspólne dane dla różnych metod tego samego kontrolera możemy wstępnie ustawić w konstruktorze. Ten post edytował grzesiek_g 9.11.2007, 17:42:52 -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ale gdzie tą klasę piszę... Gdzie ją umieszczam ...
|
|
|
![]()
Post
#21
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
$this->load->view('costam',#data);
a w costam: <?php $this->load->view('header');?> twoja tresc <?php $this->load->view('footer');?> choć osobiście korzystam z zupełnie innej biblioteki widoku, która jest wygoniejsza w użyciu.Postaram się to opisać z akilka dni na blogu. -------------------- |
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
To może powiedziałbyś mi skąd pobrać tą bilbiotekę (tylko dokładny link), byłbym wdzięczny. Póki nie jest jeszcze za późno;)
|
|
|
![]()
Post
#23
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zdaje się, że coś takiego było w http://www.php.rk.edu.pl/w/p/kurs-ci/, kolejny link na wiki codeignitera: http://codeigniter.com/wiki/Category:Libra...:Authorization/. Na podstawie tego na pewno, albo coś sobie wybierzesz, albo napiszesz coś swojego. Co do FreakAuth to podobno jest trochę przeładowana biblioteka, ale nie wiem tego z własnego doświadczenia.
Poza tym tutaj http://www.code-igniter.pl/index.php/board,3.0.html znajdziesz jeszcze parę odnośników do zasobów. -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#24
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
-------------------- |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hmm... Cos sie popsulo chyba, bo link widzi jako folder tzw. Zapętlowany mod_rewrite
jestem w index wchodze w jakas podstrone jest index/index/podstrona wchodze jeszcze raz i jest index/index/index/podstrona |
|
|
![]()
Post
#26
|
|
![]() Grupa: Zarejestrowani Postów: 627 Pomógł: 33 Dołączył: 1.05.2005 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
ale o czym ty mówisz?
![]() ![]() -------------------- |
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zapomnialem o site_url
![]() Chcę zrobić trzyetapową rejestrację a mianowicie 1 etap - Akceptacja regulaminu 2 etap - Formularz rejestracyjny 3 etap - strona z błędami Jak to najlepiej zrobić. Mam robić 2 funkcje register i register_accepted i 3 widoki register, register_accepted, register_errors ? Jak jeszcze zrobić, no bo nie ma sensu chyba w każdym kontrollerze pisać funkcji obliczajacej średnią arytmetyczną. Gdzie napisać taką funkcję, w jakim folderze umieścić jak załadowac i jak na niej operować? Mógłby mi ktoś pomóc? Ten post edytował Exodus 10.11.2007, 20:44:26 |
|
|
![]()
Post
#28
|
|
![]() Grupa: Zarejestrowani Postów: 249 Pomógł: 30 Dołączył: 18.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Jeden kontroler, trzy widoki.
Funkcje wspólne umieszczasz w klasie w folderze system/application/libraries, przykład:
Następnie ładujemy bibliotekę:
i w kodzie:
Ten post edytował grzesiek_g 10.11.2007, 19:59:17 -------------------- Warsztat: Ubuntu 12.10, PHPStorm
http://vertoo.pl |
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Grzesiek jak mozesz podaj mi na PW swoje gg
![]() Jeszcze takie zasadnicze pytanie: Strona ma wyglądać tak Strona główna -Filmy -Cytaty -Opisy gg -Reszta I najlepszy sposobem bedzie zrobienie tak: Pierwszy kontroller - Index (funkcja tylko jedna- index) - Domyslny Drugi kontroller - Movies (funkcje index - kategorie z filmami jakies tam info, movie - lista filmow ktore naleza do danej kategorii, video - film) Trzeci kontroller Cytaty (ala movies) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 17:53 |