в этой части мы поговорим о расширении класса контроллера, который позволяет нам создавать шаблоны
Шаблон - это не более чем вид, который базируется на вашем собственном (X)HTML коде
Перед тем как вставлять код в файл, давайте создадим папку в “/application/views/” под названием “templates”
Теперь откройте IDE в котором вы предпочитаете работать, создайте новый файл и вставьте в него следующее:
<!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="text/html; charset=UTF-8" />
<meta http-equiv="Content-Language" content="en-us" />
<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/”.
Как вы можете заметить, это выглядит немного похоже на вид который мы делали немного раньше, но он немного расширен
В отличии от вида, этот шаблон будут использовать почти все ваши проекты
С того времени как мы начнем использовать этот файл как шаблон или каркас, он сократит огромное кол-во кода, который бы пришлось вводить в каждом отображении
Теперь у нас есть шаблон, и наша система ничего не может с ним сделать до тех пор пока мы не скажем
Давайте вернемся к нашей IDE и создадим новый файл и вставим в него следующие строки:
<?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 to 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” и делает 3 основные вещи:
инициализирует некоторые переменные на доступность использования их вашими методами (actions) и
присоединяет стандартное значение им,
привязывает их к нашим шаблонным переменным перед тем, как окончательно визуализировать и вывести на экран
Это место где цикл foreach() "вступает в игру"
Цикл foreach() использует статический метод для вспомогательного класса “HTML”, один для загрузки CSS, а другой для загрузки файлов JS
Оба эти вспомогательных метода будут выполнять одно и то же действие через массив и заключать в оболочку определенного тега
Вы наверно удивитесь когда узнаете, что такое “Helper”
вот небольшое определение из документации Kohana PHP 2.x documents:
Helpers – простые, “удобные” функции созданные для того, чтобы облегчить вам разработку
Вспомогательный модули похожи на класс библиотеки, но есть одно отличие
При работе с библиотеками, вы должны создать экземпляр класса библиотек для использования
Хэлперы являются статическими методами класса, и для них не требуется введение экземпляра для работы
Их вполне можно называть “общими функциями”
С библиотеками, вспомогательные классы автоматически запускаются фреймворком, когда их используют, и нет нужды их запускать вручную
Вернемся к нашим баранам
Вы наверное заметили, что присутствует ссылка на “assets/css/reset.css"
В корневом каталоге создайте папку под названием “assets” и в этой папке создайте еще одну под названием “css”
Для файла “reset.css”, я зашел на Serene Destiny и скопировал код из статьи под названием “Создать идеальный CSS reset” и сохранил как “reset.css” в папке “assets/css/”
* {
padding: 0;
margin: 0;
}
ul {
list-style:none;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: none;
}
a:visited {
text-decoration: none;
}
a {
text-decoration: none;
color:#FFFFFF;
}
a:hover {
text-decoration: none;
color:#000000;
}
Вы можете так же создать другие папки в “/assets/”, может быть “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() // v9 >>>
{
$ko3_inner = array();
$ko3 = array();
$this->template->title = 'Kohana 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);
} // v9 <<<
Сохраните это
Вы можете заметить, что теперь у нас есть
“$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;?>
Если вы сейчас загрузите его, вы увидите, что заголовок страницы теперь “Kohana 3.0? и выглядит она немного похоже на страницу из прошлой обучалки
Но если вы посмотрите на код, то он в корне отличается
вы можете сильно удивиться переменным в шаблонах и тому, что с ними делать
Давайте вернемся и отредактируем наш метод “index” еще раз
Сделайте его таким:
public function action_index() // v10 >>>
{
$ko3_inner = array();
$ko3 = array();
$this->template->title = 'Kohana 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);
} // v10 <<<
Довольно просто
Вы наверно заметили, что я не заполнил header и footer
Я уверен, вы знаете , что с ними делать
Подсказка:
Сформируйте отображение к этим переменным
Вы наверно заметили, что я ввел “assets/css/red.css” and “assets/css/jqtest.js”
Давайте сделаем эти файлы начиная с “/assets/css/red.css”:
h1
{
color: #FF0000;
}
Следующий “/assets/js/jqtest.js”:
$("document").ready(function()
{
alert('Hello Kohana!');
});
Сохраните и обновите сайт
Вы сможете увидеть всплывающие сообщение об ошибке, и первую строку в тексте выделенную красным
Сегодня мы создали свой шаблон, расширили шаблонный контроллер и наш контроллер стал использовать этот шаблон
Есть куча всего, что можно сделать используя только это
В следующий раз, речь пойдет о моделях
удачного кодинга!
Использованы материалы: Unofficial Kohana 3 Wiki, Kohana PHP 2.x Docs
Комментариев нет:
Отправить комментарий