Jak zapewne już wiesz, według wzorca MVC nie wolno wyświetlać danych bezpośrednio w kontrolerze. Ta działka należy do widoków (views), którymi zajmiemy się w tej części artykułu.

Tworzenie prostego widoku

Za operacje na widokach odpowiedzialna jest klasa View, zatem, aby powstał widok wystarczy stworzyć obiekt tej klasy.

$widok = new View;

Konstruktor View może przyjmować do trzech parametrów:

  1. nazwa pliku – nazwa pliku widoku bez rozszerzenia (patrz parametr rozszerzenie), należy pamiętać, że nie może ona zawierać rozszerzenia pliku;
  2. dane – zmienne w formie tablicy, które będą użyte w widoku;
  3. rozszerzenie – standardowym rozszerzeniem plików widoków jest .php, ale parametr ten pozwala na wczytanie pliku o innym rozszerzeniu, np. .tpl, .html etc..

W związku z powyższym istnieją jeszcze 4 warianty na utworzenie widoku:

  1. sam widok o nazwie pliku moj_widok.php
    $view = new View('moj_widok');
  2. widok z przekazanymi danymi z tablicy $dane

    $view = new View('moj_widok', $dane);
  3. widok o nazwie pliku moj_widok.html z danymi

    $view = new View('moj_widok', $dane, 'html');
  4. widok o nazwie pliku moj_widok.html bez danych

    $view = new View('moj_widok', null, 'html');

Gdzie znajdują się pliki widoku?

Pliki widoku znajdują się w katalogu views. Zgodnie ze wspomnianym wcześniej kaskadowym systemem plików może to być system/views, models/[nazwa modelu]/views, application/views.

W przypadku naszej aplikacji będziemy umieszczać je w ostatnim z wymienionych katalogów, czyli application/views. Widoki mogą być także zawarte w podkatalogach katalogu views, wtedy przy tworzeniu obiektu należy podać względną ścieżkę do pliku, np.:

$widok = new View('podkatalog/moj_widok');

Zatem utwórzmy plik home.php w katalogu application/views. Dla przykładu umieścimy tam zmodyfikowany tekst kontrolera z poprzedniego wpisu.

Witam - jestem Kohany(m) widokiem! :)

Wyświetlenie widoku

No dobrze, wiemy jak utworzyć widok, wiemy gdzie go umieścić, ale żeby zobaczyć efekt należy go jeszcze wyświetlić.

Do tego celu służy metoda render().

Metoda ta przyjmuje dwa parametry. Drugi chwilowo możemy pominąć :) . Pierwszy z nich natomiast jest wartością logiczną decydującą o tym czy wysłać bezpośrednio zawartość widoku do przeglądarki, np.

$view->render(true);

Spowoduje wyświetlenie widoku bez dodatkowych zabiegów, natomiast taki zapis

$output = $view->render();  // lub $output = $view->render(false)
echo $output // dopiero tutaj wyświetlamy widok

spowoduje przekazanie zawartości widoku do zmiennej $output ale nie wysyła go do przeglądarki, dopiero później (np. za pomocą funkcji echo) możemy ja wyświetlić.

Jak to w praktyce będzie wyglądać? Posłużymy się wcześniej utworzonym kontrolerem home.

1
2
3
4
5
6
7
8
9
<?php defined('SYSPATH') OR die('No direct access allowed.');
class Home_Controller extends Controller {
 
        public function index()
        {
		$view = new View('home');
		$view->render(true);
        }
}

Powyższy kod spowoduje wyświetlenie napisu z naszego widoku, czyli:

Witam – jestem Kohany(m) widokiem! :)

Dodanie zmiennych

Widok już mamy, pora by stał się bardziej dynamiczny. Przekażmy mu jakieś dane do wyświetlenia.
Dane do widoku przekazujemy tak, jakbyśmy chcieli zapisać jakąś wartość własności obiektu.

Na przykład, mamy widok $view i chcemy mu utworzyć zmienną $title o wartości „Witaj!”. Nic prostszego!

$view->title = 'Witaj!';

Podobnie można postąpić w przypadku tablic:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$view->articles = array(
	array(
		'title'		=> 'Pierwszy wpis',
		'content'	=> 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.',
		'author'	=> 'Kohana',
		'date' 		=> '22-03-2009',
	),
	array(
		'title'		=> 'Kolejny wpis',
		'content'	=> 'Nulla et massa vitae erat placerat consequat.',
		'author'	=> 'Kohana',
		'date' 		=> '23-03-2009',
	),
);

Wyświetlanie zmiennych

Widoki w Kohanie są zwykłymi plikami PHP, także wyświetlanie zmiennych nie wymaga specjalnych zabiegów czy też dodatkowych znaczników.
W przypadku powyższych zmiennych będzie to wyglądało następująco:

1
2
3
4
5
6
7
8
9
10
<?php echo $title ?>
 
<h1>Artykuły</h1>
 
<?php foreach($articles as $article) { ?>
	<h2><?php echo $article['title'] ?></h2>
	<h3>Autor: <?php echo $article['author'] ?></h3>
	<h4>Data: <?php echo $article['date'] ?></h4>
	<p><?php echo $article['content'] ?></p>
<?php } ?>

Czego efektem będzie poniższy wydruk:

Witaj!

Artykuły

Pierwszy wpis

Autor: Kohana

Data: 22-03-2009

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Kolejny wpis

Autor: Kohana

Data: 23-03-2009

Nulla et massa vitae erat placerat consequat.