Podręcznik użytkownika CodeIgniter wersja 2.2.1


Widoki

Widok to prosta strona, albo jej fragment taki jak nagłówek, stopka, panel albo inny element. Właściwie każdy widok może być dowolnie osadzony w innych widokach jeżeli potrzebujesz takiej struktury.

Widoki nigdy są wywoływane bezpośrednio, muszą być ładowane przez kontroler. Pamiętaj, że architektura MVC frameworka polega na tym, że kontroler znajduje się na początku procesu - pobiera i wyświetla wybrany widok. Jeżeli nie czytałeś jeszcze sekcji kontroler powinieneś od niej zacząć.

Wykorzystując przykładowy kontroler dodaj do niego widok.

Tworzenie widoku

Korzystając z edytora tekstowego utwórz plik blogview.php i wstaw do niego treść:

Zapisz plik w katalogu application/views/.

Ładowanie widoku

Aby załadować dany widok skorzystaj z funkcji:

$this->load->view('name');

Gdzie name to nazwa pliku widoku. Uwaga: Nie trzeba dodawać rozszerzenia .php dopóki nasz plik nie używa innego rozszerzenia niż .php.

Teraz otwórz kontroler, który utworzyłeś wcześniej o nazwie blog.php i zamień wywołanie echo na metodę ładującą widok:

Jeśli przeglądasz stronę za pomocą adresu URL, z którego korzystałeś wcześniej, powinieneś zobaczyć nowy widok. Adres URL był taki sam jak ten:

example.com/index.php/blog/

Ładowanie wielu widoków

CodeIgniter będzie inteligentnie obsługiwał wiele odwołań do $this->load->view z kontrolera. Jeśli pojawi się więcej niż jedno odwołanie, zostaną one połączone w jedno. Dla przykładu, możesz chcieć posiadać widok nagłówka, menu, treści oraz stopki. Może to wyglądać w ten sposób:

<?php

class Page extends CI_Controller {

   function index()
   {
      $data['page_title'] = 'Twój tytuł';
      $this->load->view('header');
      $this->load->view('menu');
      $this->load->view('content', $data);
      $this->load->view('footer');
   }

}
?>

W powyższym przykładzie używamy "dynamicznie dodanej zmiennej data", którą wykorzystamy poniżej.

Przechowywanie widoków w podkatalogach

Twoje widoki mogą być także przechowywane w podkatalogach, jeśli lubisz ten rodzaj organizacji. Kiedy korzystasz z takiej opcji, musisz dołączyć nazwę katalogu do metody ładującej widok. Przykład:

$this->load->view('nazwa_katalogu/nazwa_pliku');

Dodawanie dynamicznych zmiennych do widoku

Zmienne są przypisywane z kontrolera do widoku za pomocą tablicy lub obiektu w drugim parametrze metody view. Tutaj mamy przykład wykorzystujący tablicę:

$data = array(
               'title' => 'Mój tytuł',
               'heading' => 'Mój nagłówek',
               'message' => 'Moja wiadomość'
          );

$this->load->view('blogview', $data);

A tutaj mamy przykład wykorzystujący obiekt:

$data = new Jakasklasa();
$this->load->view('blogview', $data);

Uwaga: W przypadku korzystania z obiektu, zmienne klasy zostaną zamienione na elementy tablicy.

Spróbujmy tego z Twoim kontrolerem. Otwórz go i podaj kod:

Teraz otwórz plik widoku i zmień tekst na zmienne, odpowiadające kluczom tablicy data:

Teraz przeładuj adres w przeglądarce. Powinieneś zobaczyć zastąpione zmienne.

Tworzenie pętli

Tablice, które przekazujesz do widoków, nie są ograniczone do prostych zmiennych. Możesz przypisywać wielowymiarowe tablice, które później możesz zapętlać, aby uzystać wiele wierszy. Dla przykładu, jeśli wczytasz dane z bazy danych, będą one zazwyczaj w formie wielowymiarowej tablicy.

Tutaj mamy prosty przykład. Dodaj to do Twojego kontrolera:

Teraz otwórz plik widoku i utwórz pętlę:

Uwaga: Zauważyłeś, że w przykładzie powyżej używamy alternatywnej składni PHP. Jeśli nie jesteś z nią zaznajomiony, możesz poczytać o niej tutaj.

Zwracanie widoków jako danych

Istnieje trzeci opcjonalny parametr, który pozwala zmienić zachowanie funkcji, która w tym wypadku zwraca dane jako ciąg znaków, zamiast zwracać go do przeglądarki. To może być użyteczne jeśli chcemy przetworzyć te dane w jakiś sposób. Jeśli ustawisz parametr na true (boolean) zwróci on dane. Domyślnym ustawieniem jest false, co powoduje wysłanie danych do przeglądarki. Pamiętaj o przekazaniu danych do zmiennej, jeśli chcesz ich później użyć:

$string = $this->load->view('mojplik', '', true);