Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [CodeIgniter] Widok czy kontroler ?, Wiele widoków czy jeden i wiele metod kontrolera ?
bor1904
post 3.12.2010, 03:06:17
Post #1





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 15.10.2009
Skąd: gdańsk

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


Witam.

Mam stronę z typowym układem (header, footer, left,right,body) i jak zwykle głównie i w największym stopniu zmienia się zawartość/wygląd body.

Wszystko niby proste i oczywiste, ale z braku doświadczenia co chwile wydaje mi się inaczej - proszę o pomoc.

Chodzi właściwie tylko o sekcje body.

Sekcje body mają w sumie 3 różne układy(layouty).

Dajmy przykład (ARTYKUŁ):

- Nagłówek
- małe zdjęcie po prawej oblane tekstem
- owy tekst (3-5 zdań)
- kilka podpunktów
- Zdanie (opcjonalnie)
- kilka podpunktów (opcjonalnie)
- stały fragment dla wszystkich artykułów (2 zdania)
- linia pozioma (opcjonalnie)
- lista numeryczna (opcjonalnie)


Uważam, że mając około 15 artykułów zawsze wyglądających podobnie powinienem zrobić widok body_art.php i zamieścić w nim oprawe graficzną i przyklejać całe bloki tekstu, które de facto zawarte są w kontrolerze art.php.

Czy to jest dobre rozwiązanie ? Czy dla takich w pełni stycznych rzeczy tworzy się odpowiednią ilość sztywno wypisanych widoków ?
(może dopowiem że artykuły to tylko część przyszłego portaliku)




Dajmy przykład (KALKULATOR):

-nagłówek
-tabela z polami formularza <opis><input> (wprowadzane dane przez userów)
-przyciski wyslij i resetuj
-tabela z polami formularza <opis><input> (przez value wyświetlane wyniki)
-podpis pod tabelą (opcjonalny)


[kalkulatory oprócz wyglądu graficznego bądą się zupełnie różniły i jest ich ponad 10, a może będzie więcej]

Pytanie czy wykorzystać helper form tworząc w osobnych metodach zawartość dla obu tabel formularza i przekazywać je do jednego tylko szablonu widoku czy to też jest statyczna strona i powinna być cała w widoku zdefiniowana a kontroler powinien tylko dokonać obliczeń i przesłąć wynik do widoku?



Wiem, że wielu z Was rozbawi to do łez, ale mimo wszystko prosiłbym o popchnięcie mnie w odpowiednim kierunku.

pozdrawiam
bor1904

PS jeżeli się niejasno wyraziłem to proszę dopytać.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
szok
post 3.12.2010, 08:38:42
Post #2





Grupa: Zarejestrowani
Postów: 165
Pomógł: 20
Dołączył: 2.03.2006

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


Nie do końca to rozumiem, ale chyba chodzi Ci o to że masz powiedzmy stronę i w niej będzie kilka widoków body? A Layout strony zawsze zostaje taki sam?

Nie wiem czy o to chodzi, ale przygotuj sobie jeden główny layout
http://codeigniter.com/wiki/layout_library/

A potem w zależności od rodzaju strony ładuj odpowiednie body.
I po kłopocie.


--------------------
Go to the top of the page
+Quote Post
bor1904
post 3.12.2010, 10:22:49
Post #3





Grupa: Zarejestrowani
Postów: 131
Pomógł: 1
Dołączył: 15.10.2009
Skąd: gdańsk

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


czyli jak ktoś doszedł na stronie do sekcji artykuły to używam jednego typu (pliku widoku) body, mimo że body dla artykułów graficznie jest podobnie skomponowane ale jednak nie ma dwóch takich samych artykułów (chodzi o sekcje, listy itd.).

tak więc ja zrobiłbym w kontrolerze:

  1. jeżeli art = 1
  2. {
  3.  
  4. $tytul = "pierwszy";
  5. $zawartoscGora[zdj]= "link do foto";
  6.  
  7. $zawartoscGora[pierwszy_akapit]=" sadfaSDFad ADA sdasd ASD ASD Ad aSD DF ASDF SADFSADFdasd ASD ASD
  8. Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASAd
  9. ASD ASD dasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad
  10. aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD
  11. Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD Ddasd ASD ASD Ad aSD D";
  12.  
  13. $zawartoscGora[lista]=array(' pierwsszy punkt cds dfs dfsdf sdfsdfsdfsdf sdsdfsdf sdf s ',
  14. ' drugi punkt cds dfs dfsdf sdfsdfsdfsdf sdsdfsdf sdf s ',
  15. ......);
  16. $zawartoscSrodek[kolejna_sekcja]="";
  17. $zawartoscDol[linia]="true";
  18. $zawartoscDol[sekcja_ostatnia]="ASD ASD dasd ASDASD ASD dasd ASDASD ASD dasd ASD ASD ASD dasd ASD";
  19.  
  20. }


Podobne sekcje zawarte by były w kontrolerze, a za jakiś czas wszystkie te statyczne strony(ich zawartość) wrzucę do bazy i już model będzie się z tym bawił szukając po id treści.

A w widoku miałbym jedno body z układem graficznym i wrzucał bym w nie całe sekcje danych z kontrolera:

...<?=tytul ?>
...<?=gora ?>
...<?=srodek ?>
...<?=dol ?>

Mimo iż czasem góra będzie zawierała 3 punkty, a czasem 23 oraz np sekcja dół może bywać pusta.

I nie wiem czy tak powinno to się robić najbardziej prawidłowo?
===================================================

Chociaż więcej wątpliwości mam co do kalkulatorów...

Powiedzmy, że mam takie kalkulatory (click!) (trochę bardziej złożone), ale nie wszystkie na jednej podstronie, a każdy na innej podstronie(w body):



i teraz one są bardzo podobne do siebie jeżeli chodzi o układ graficzny, ale ta oprawa graficzna stanowi tylko niewielki odsetek zawartości takiej podstrony. Czy mino to powinienem tworzyć całe wpisy formularza po stronie kontrolera, a potem przesyłać tylko tablice z tymi wpisami do widoku?



Teraz chyba jest to zrozumiałe i ktoś będzie mógł potwierdzić albo zaprzeczyć smile.gif

oczekuję na pomoc


Go to the top of the page
+Quote Post
derdiusz
post 3.12.2010, 13:52:57
Post #4





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 3.12.2010

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


ja bym nie dawał w kontrolerze żadnej treści akapitów. co najwyżej np. tytuły wyświetlanych stron.

najlepiej stworzyć kilka widoków layoutów, np.
- layout1_view.php - układ 3 kolumnowy
- layout2_view.php - układ 2 kolumnowy
itp.

każdy layout powinien mieć miejsce na umieszczenie treści np. w postaci zmiennej $content:

  1.  
  2. $data = array(
  3. 'content' => $this->load->view('content/kalkulator1', null, true)
  4. );
  5.  
  6. $this->load->view('layouts/layout1_view', $data);
  7.  


Dzięki temu możesz dynamicznie zmieniać content jak i layout. Najprostszy sposób:

Załóżmy, że to metoda w kontrolerze odpowiedzialna za kalkulatory:
  1. function kalkulator($id)
  2. {
  3. $layout = 'layout-calc';
  4.  
  5. switch($id)
  6. {
  7. case 1: $c = 'kalkulator1'; break;
  8. case 2: $c = 'kalkulator-kredytow'; break;
  9. // ...itd.
  10. }
  11.  
  12. $data = array(
  13. 'content' => $this->load->view('content/calculators/'.$c.'_view', null, true);
  14. );
  15.  
  16. $this->load->view($layout.'_view', $data);
  17.  
  18. }


Switch realizuje wybranie odpowiedniego kalkulatora w zależności od podanego ID, potem pobieramy jego widok i zapisujemy w $data['content'] i wyświetlamy widok bazując na zmiennej $layout i przekazujemy do niego dane z tablicy $data.


--
Warszawa
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 22:45