Знакомство С Kohana 3.0. Часть 3.

Встречайте третью часть серии статей о разработке с помощью Kohana PHP V3 (KO3).

Предыдущие части можно найти по ярлыку " введение в кохану 3.0 «.

На этот раз мы поговорим о создании шаблонов.

Во второй статье мы рассмотрели типы и теперь будем наследовать классы Controller, что позволит нам создать шаблон.

Шаблон — это представление, состоящее в основном из (X)HTML-кода.

Прежде чем мы начнем заполнять файлы кодом, давайте создадим новую папку в «/application/views/» и назовем ее «шаблоны».

Теперь в вашем любимом редакторе создайте пустой документ и вставьте в него следующее:

  
  
  
  
  
  
  
  
   

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> <html xmlns=" http://www.w3.org/1999/xhtml " xml:lang="en " lang="en"> <head> <meta http-equiv="Content-type" content="текст/html; кодировка = UTF-8" /> <meta http-equiv="Content-Language" content="в нас" /> <title><Эphp echo $title;?></title> <meta name="keywords" content="<Эphp echo $meta_keywords;?>" /> <meta name="description" content="<Эphp echo $meta_description;?>" /> <meta name="copyright" content="<Эphp echo $meta_copywrite;?>" /> <Эphp foreach($styles as $file => $type) { echo HTML::style($file, array('media' => $type)), "\n"; }?> <Эphp foreach($scripts as $file) { echo HTML::script($file, NULL, TRUE), "\n"; }?> </head> <body> <div id="container"> <Эphp echo $header;?> <Эphp echo $content;?> <Эphp echo $footer;?> </div> </body> </html>

Сохраните это как «default.php» в «/application/views/templates/».

Как видите, этот код по сути похож на те представления, которые мы создали во второй части, только в более расширенной и универсальной версии, а значит, пригодной для использования на протяжении всего проекта.

О foreach я расскажу позже.

На данный момент у нас есть шаблон, но нет инструкций для системы, что с ним делать.

Итак, давайте создадим новый файл со следующим содержимым:

<Эphp defined('SYSPATH') or die('No direct script access.'); class Controller_DefaultTemplate extends Controller_Template { public $template = 'templates/default'; /** * Initialize properties before running the controller methods (actions), * so they are available to our action. */ public function before() { // Run anything that need ot run before this. parent::before(); if($this->auto_render) { // Initialize empty values $this->template->title = ''; $this->template->meta_keywords = ''; $this->template->meta_description = ''; $this->template->meta_copywrite = ''; $this->template->header = ''; $this->template->content = ''; $this->template->footer = ''; $this->template->styles = array(); $this->template->scripts = array(); } } /** * Fill in default values for our properties before rendering the output. */ public function after() { if($this->auto_render) { // Define defaults $styles = array('assets/css/reset.css' => 'screen'); $scripts = array(' http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js '); // Add defaults to template variables. $this->template->styles = array_reverse(array_merge($this->template->styles, $styles)); $this->template->scripts = array_reverse(array_merge($this->template->scripts, $scripts)); } // Run anything that needs to run after this. parent::after(); } }

Сохраните его как «defaulttemplate.php» в папке «/application/classes/controller/».

В этом скрипте мы наследуем класс «Controller_Template» и делаем три основные вещи: делаем некоторые свойства (переменные) доступными для наших методов (действий), присваиваем им значения по умолчанию, а затем привязываем их к переменным из шаблона перед его рендерингом.

Здесь в игру вступает цикл foreach() из шаблона.

Он использует статические методы вспомогательного класса «HTML»: один для загрузки стилей CSS, другой для файлов JavaScript. Эти методы при выполнении в цикле создадут правильный HTML-код для включения файлов.

Они принимают как URL-адрес, так и относительный путь.

Если вы не знаете, что такое вспомогательный класс, вот краткое определение из документации Kohana 2.x:

Помощники — это удобные функции, призванные помочь вам в развитии.

Они похожи на библиотечные функции, но есть небольшая разница.

В случае библиотек вам необходимо создать экземпляр класса библиотеки, чтобы использовать ее методы.

Помощники — это статические методы класса, которые автоматически загружаются фреймворком, поэтому дополнительных действий выполнять не нужно.

Итак, вернемся к коду.

Как вы могли заметить, в нем есть упоминание «assets/css/reset.css», так что давайте в этом разберемся.

В корневой папке создайте каталог «assets», а в нем — «css».

Стили я скопировал из статьи « Создайте идеальный сброс CSS » и поместил его в файл «reset.css», который был помещен в «assets/css/».

Вы также можете создавать каталоги «images», «js» и «files» внутри папки «/assets/».

Эта папка будет использоваться для хранения статических файлов.

Наше приложение пока не знает, что со всем этим делать, поэтому давайте сменим наш контроллер.

Откройте «/application/classes/controller/ko3.php» и замените строку:

class Controller_Ko3 extends Controller

на:

class Controller_Ko3 extends Controller_DefaultTemplate

Вам также необходимо изменить действие «index» (метод action_index()) на следующий вид:

public function action_index() { $ko3_inner = array(); $ko3 = array(); $this->template->title = 'Как место 3.0'; View::set_global('x', 'This is a global variable'); $ko3_inner['content'] = 'We have more data'; $ko3['content'] = 'We have data'; $ko3['ko3_inner'] = View::factory('blocks/ko3_inner', $ko3_inner) ->render(); $this->template->content = View::factory('pages/ko3', $ko3); }

Сохраните файл.

Возможно, вы заметили, что строка «$this-> template-> title = ‘Kohana 3.0’;» был добавлен, который будет присваивать значение переменной «title» в наших шаблонах.

В конце мы также избавились от метода «render()».

Вызывать его больше не нужно, поскольку метод «factory()» автоматически визуализирует представление в переменную «content» шаблона.

Довольно просто, правда? Перед загрузкой страницы в браузере, возможно, стоит удалить часть кода, который больше не нужен.

Откройте «ko3.php», который находится в папке «application/views/pages/», и измените его на следующий вид:

<h1>This is my first view</h1> <Эphp echo $content;?> <Эphp echo $ko3_inner; ?> <br/><Эphp echo $x;?>

Теперь, обновив страницу в браузере, вы должны увидеть, что внешне она практически не изменилась, если не считать появления заголовка «Кохана 3.0», но исходный код стал совершенно другим.

Возможно, вам неясно назначение остальных переменных в шаблоне, поэтому давайте вернемся к действию «индекс» и заменим его следующим кодом:

public function action_index() { $ko3_inner = array(); $ko3 = array(); $this->template->title = 'Как место 3.0'; $this->template->meta_keywords = 'PHP, Kohana, KO3, Framework'; $this->template->meta_description = 'A test of of the KO3 framework'; $this->template->styles = array('assets/css/red.css' => 'screen'); $this->template->scripts = array('assets/js/jqtest.js'); View::set_global('x', 'This is a global variable'); $ko3_inner['content'] = 'We have more data'; $ko3['content'] = 'We have data'; $ko3['ko3_inner'] = View::factory('blocks/ko3_inner', $ko3_inner) ->render(); $this->template->content = View::factory('pages/ko3', $ko3); }

Довольно просто.

Возможно, вы заметили, что я не заполнил верхний и нижний колонтитулы страницы.

Но я уверен, что вы догадываетесь, что здесь нужно сделать.

Подсказка: визуализируйте представление этой переменной (смайлик).

Вы также можете заметить, что я включил «assets/css/red.css» и «assets/css/jqtest.js».

Давайте теперь заполним их, начиная с «/assets/css/red.css»:

h1 { color: #FF0000; }

Теперь «/assets/js/jqtest.js»:

$("document").

ready(function() { alert('Hello Kohana!'); });

Сохраните их и обновите сайт. Должно появиться всплывающее окно, и первая строка должна стать красной.

Поздравляем, в этой части вы создали свой собственный контроллер на основе встроенного контроллера «Шаблон», используя созданный вами файл шаблона.

Теги: #знакомство с Kohana 3.0 #kohana 3 #kohana #framework #kohana

Вместе с данным постом часто просматривают: