Встречайте третью часть серии статей о разработке с помощью Kohana PHP V3 (KO3).
Предыдущие части можно найти по ярлыку " введение в кохану 3.0 «.
На этот раз мы поговорим о создании шаблонов.
Во второй статье мы рассмотрели типы и теперь будем наследовать классы Controller, что позволит нам создать шаблон.
Шаблон — это представление, состоящее в основном из (X)HTML-кода.
Прежде чем мы начнем заполнять файлы кодом, давайте создадим новую папку в «/application/views/» и назовем ее «шаблоны».
Теперь в вашем любимом редакторе создайте пустой документ и вставьте в него следующее:
Сохраните это как «default.php» в «/application/views/templates/».<!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>
Как видите, этот код по сути похож на те представления, которые мы создали во второй части, только в более расширенной и универсальной версии, а значит, пригодной для использования на протяжении всего проекта.
О 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
-
Механическая Цепь
19 Oct, 24 -
Как Визуализировать Анимацию В Unreal Engine
19 Oct, 24 -
Юникс Для Детей
19 Oct, 24 -
Виртуальный Рабочий Стол От Pano Logic
19 Oct, 24