Kohana Framework: Layouty, widoki, szablony

W poprzednim wpisie poruszyliśmy kwestię instalacji oraz konfiguracji samego frameworka. Proces ten dla niektórych trudny dla innych prosty jest głównym korzeniem naszych lekcji. W dzisiejszym wpisie przedstawię Wam zwinny sposób na zarządzanie layoutami, widokami/szablonami. Tytuł może być trochę mylący ze względu na słowo „szablony” (nie, nie będziemy używać smarty). Jako, że seria wpisów poświęcona Kohanie będzie skierowana do osób bardzo początkujących pominiemy takie kwestie jak systemy szablonów i skupimy się na standardowych widokach PHP, które oferuje Kohana lecz z lekką modyfikacją.

Załóżmy, że nasza aplikacja będzie miała różne układy graficzne w różnych jej częściach. Przykładowo chcielibyśmy aby w aktualnościach był układ 2-kolumnowy, a w podstronie CMS 1-kolumnowy. Widoki views posłużą nam tylko do prezentacji przekazywanego obiektu i ich nazewnictwo będzie stricte powiązane ze ścieżką routingu, a raczej nazewnictwem akcji kontrolera.

Zanim zaczniemy zabawę z kontrolerami oraz widokami, stwórzmy najpierw plik konfiguracyjny dla bazy danych oraz „zepnijmy” framework ze wcześniej utworzoną bazą. W tym celu w katalogu /app/application/config/ (jeśli go nie ma, utwórzmy go), stwórzmy plik o nazwie database.php i umieśćmy w jego zawartości następujący kod, zamieniając opisane elementy własnymi parametrami logowania do bazy.

Od tej pory nasza aplikacja będzie miała dostęp do tabel bazy danych, które stworzymy w przyszłości oraz tych stworzonych w poprzednim wpisie (pages).

Przygotowanie

Musimy ustalić pewien standard widoków by łatwo nam było w przyszłości ingerować w kod, by łatwiej nam było odnaleźć poszczególne elementy widoków itp. Dlatego, napiszemy główny kontroler po którym będziemy dziedziczyć pozostałe kontrolery naszej aplikacji. Umieśćmy go w nieco innej lokalizacji, w tym celu utwórzmy katalog /app/application/classes/Application, w tym katalogu stwórzmy nowy plik o nazwie Controller.php /app/application/classes/Application/Controller.php. Jego zawartość jest następująca:

Dla krótkiego wyjaśnienia: w funkcji before, która wykonuje się przed wszelkimi akcjami kontrolera następuje ustanowienie obiektu widoku. Do jednej zmiennej publicznej przypisywany jest widok, a do drugiej layout, który de-facto jest również widokiem opakowującym całość. Ścieżką widoku dla akcji każdego kontrolera jest jej ścieżka względem nazewnictwa klas.

Musimy stworzyć pierwszy layout w katalogu: /app/application/views/layouts (utwórz katalogi jeśli ich nie ma), o nazwie default.php /app/application/views/layouts/default.php o zawartości przypominającej standardowy szkielet HTML z dołączonymi stylami Twitter Bootstrap.

Jak możecie zauważyć w domyślnym pliku layoutu jest wywołanie zmiennej $content do której nasz kontroler rodzic Application/Controller przypisał obiekt klasy View generującej widok. Ścieżki widoków view będą się uzupełniały analogicznie do struktury kontrolera.
Przykładowo dla kontrolera Cms /app/application/classes/Controller/Cms.php ścieżką widoków będzie /app/application/views/cms/ – w tym właśnie katalogu musimy utworzyć pliki odpowiadające nazwom akcji kontrolera Cms: index.php oraz read.php.

Do widoku akcji index kontrolera Cms index.php wklejamy kod/treść, która przywita użytkownika po wejściu w główny adres naszej strony.

Do pliku read.php wklejamy zaś listing odpowiadający za wyświetlenie strony z bazy danych. Zmienne którymi się posłużymy nie zostały użyte tam bez powodu, wzorzec MVC jasno określa, że w widoku operujemy na zmiennych i obiektach przekazanych przez kontroler.

Kontroler

Jeśli mamy przygotowany już routing, widoki oraz layout czas na kontroler odpowiadający za wyświetlanie naszych stron. Zgodnie z tym co zadeklarowaliśmy w routingu kontrolerem będzie Cms /app/application/classes/Controller/Cms.php. Oto jego zawartość:

Akcja index jest celowo pusta ponieważ nic się nie dzieje w części serwisu odpowiadającej za powitanie użytkownika więc wyświetlamy tylko widok views/cms/index.php.

Z racji, że czas na panel administracyjny do dodawania edycji oraz dodawania treści napiszemy później dodajmy teraz pierwszą podstronę bezpośrednio do bazy danych.

Po dodaniu strony i wybraniu z nawigacji „Kim jesteśmy” powinniśmy zobaczyć na ekranie naszą stronę:

Podsumowanie

Mamy już napisaną solidną podstawę naszej aplikacji. W kolejnych wpisach rozbudujemy nasz kontroler „rodzic”, dodając do niego kilka elementów, parametry SEO (tytuł, opis, słowa kluczowe) do layoutu, stworzymy strukturę bazy danych do aktualności oraz napiszemy podstawowe klasy. Poniżej załączam link do repozytorium Github, na którym będę zamieszczał zmiany w naszej aplikacji analogicznie do nowych wpisów.

 

Programista, administrator - miłośnik nowych technologii. Jak każdy fachowiec w branży nie oprę się porannej kawie w towarzystwie świeżej prasy. Hobbystycznie fotografuję, psuję, naprawiam, lutuję. Czego nie lubię? Nieskromnych ludzi i brzydkiego kodu.

Send this to a friend