Створення власного шаблонизатора

16

Від автора: Розробляючи веб-додатки, дуже хорошою практикою є відділення логіки скрипта від його дизайну. У такому випадку дуже зручно виконувати всілякі правки по дизайну, не порушуючи логіки. І навпаки, змінюючи логічний частина програми – зовнішній вигляд залишається незмінним. Але при створенні додатків за такої структури виникає питання, як змінні в дизайнерську частина? Тому в даному уроці ми з Вами навчимося створювати власний нескладний шаблонизатор, за допомогою якого можна передавати змінні з логічної частини програми дизайнерську.

Створення власного шаблонизатораСтворення власного шаблонизатора

Введення

Насамперед визначимося з поняттям шаблону. Шаблони — це окремі файли які займаються виведенням даних скрипта на екран. Тобто вони займаються тільки виведенням інформації, при цьому шаблон тільки отримує дані для виводу і ні як їх не формує. З цього випливає, що шаблони містять практично чистий HTML з мінімальними вставками PHP коду, який використовується для відображення даних змінних, формування умов (if — else) і опису циклів (foreach) для обходу по масивам. Шаблони бувають самих різних видів, а разом з тим і шаблонизаторы. Але розрізняють два основних види шаблонів за способом передачі даних. Перший передбачає передачу значень звичайних змінних, які в подальшому будуть виведені на екран звичайним чином, наприклад, використовуючи функцію echo:

echo $var;

Другий вид передбачає вставляти в шаблон спеціальних міток, які будуть замінені шаблонизаором на відповідні значення. Ось приклад такої мітки: {$var}

У даному уроці ми будемо розглядати перший тип шаблонів. Так як цей тип найбільш вдалий і функціональний. Дивіться, мова PHP за своєю структурою вже є дуже хорошим шаблонизатором, так як дуже легко вбудовується в розмітку. Якщо ж ми використовуємо в шаблонах спеціальні мітки ({$var}) , то для виводу даних, нам потрібно писати спеціальну функцію, яка відшукає всі мітки і замінить їх на відповідні дані. Але що виходить, PHP і так дуже добре вбудовується в PHP, а ми пишемо додаткові функції для виведення змінних на екран. Хоча можемо обмежитися звичайною функцією echo:

Створення шаблонів

Для сьогоднішнього уроку ми будемо використовувати наступний сайт:

Створення власного шаблонизатора

Ось код файлу index.php який, виводить головну сторінку на екран:

Головне меню
%s

Дата додавання: %s Створення власного шаблонизатора

%s

Переглядів: %s

«,$row[‘title’], $row[‘id’], $row[‘title’], $row[‘date’], $row[‘title’], $row[‘img_src’], $row[‘discription’], $row[‘view’]); } ?>

«.$site_name.»

«;?>

Як Ви бачите в цьому файлі логіка скрипта тісно пов’язана з його дизайном. Тому давайте це виправимо і створимо шаблон для головної сторінки тестового сайту. Ось код шаблону:

Головне меню
>
>

Дата додавання:

Створення власного шаблонизатора

Переглядів:

?>

«.$site_name.»

«;?>

Як Ви бачите цей файл я виніс лише дизайн головної сторінки сайту. Для виведення даних сайту використовуються звичайні змінні PHP. Цикл foreach описаний за допомогою альтернативного синтаксису. Зверніть увагу, що код даного файлу достатньо простий і складається практично з розмітки HTML, що спрощує редагування дизайну. Даний файл я зберігаю в папку під ім’ям templates index.tpl.php.

У свою чергу файл index.php файл, який виводить головну сторінку на екран, тепер містить лише логічну частину:

Тепер, коли у нас є шаблон, необхідно передати йому дані і вивести на екран.

Створення шаблонизатора

Як шаблонизатора в нашому випадку буде виступати функція:

function render($tmp,$vars = array()) {
if(file_exists(‘templates/’.$tmp.’.tpl.php’)) {
ob_start();
extract($vars);
require ‘templates/’.$tmp.’.tpl.php’;
return ob_get_clean();
}
}

Дана функція, що приймає два параметри: $tmp – ім’я шаблону (тільки ім’я – без розширення та рядка tpl), $vars = array() – необов’язковий параметр – масив змінних, які необхідно передати в шаблон.

В даній функції перевіряємо, чи існує у папці templates потрібний шаблон. І якщо він існує — то першим ділом включаємо буферізірованний висновок, використовуючи функцію ob_start(). При цьому весь вивід на екран буде потрапляти в буфер обміну. Далі потрібно створити змінні, які будуть передані в шаблон. Ці змінні ми передаємо у вигляді масиву $vars. Це звичайний асоціативний масив, ключі якого містять імен змінних, а значення, відповідно – значення цих змінних. Використовуючи функцію extract($vars), ми створюємо в пам’яті змінні з масиву $vars. Імена яких, відповідають ключів даного масиву.

Після цього необхідно лише підключити потрібний файл шаблону, що ми власне і робимо. При цьому на екран нічого виведено не буде, так як включений буферізірованний висновок. Значить необхідно очистити буфер обміну. Для цього використовуємо функцію ob_get_clean(), вона очищає буфер обміну і повертає його вміст, який ми повернемо як результат роботи функції в цілому.

На цьому шаблонизатор завішаний.

Висновок шаблону на екран

Тепер давайте подивимося як використовувати даний шаблонизатор. У файлі index.php, який виводить головну сторінку на екран додамо наступний код:

echo render(‘index’,array(‘cat’=>$cat,’result’=>$result));

Тобто виводить на екран дані, які поверне функція render. При цьому передаємо їй ім’я шаблону ‘index’ і масив змінних, які потрібно передати в шаблон. Масив складаємо наступним чином. Ключ – містить ім’я переданої змінної (змінної, яка використовується в шаблоні), а значення – відповідно значення цієї змінної. В моєму випадку потрібно передати дві змінні: $cat і $result, що власне я і роблю.

Якщо перевірити роботу шаблону в браузері ми побачимо, що все працює відмінно.

Вкладені шаблони

Будь-який хороший шаблонизатор, повинен підтримувати вкладеність шаблонів – наш шаблонизатор не виняток і по своїм можливостям повністю підтримує вкладені в шаблони. Давайте подивимося, як працювати з вкладеними шаблонами. Отже, давайте розділимо шаблон index.tpl.php на три окремих шаблону. Шаблон виводу списку категорій, який назвемо menu.tpl.php:

Головне меню
>

Шаблон виводу списку статей – файл content.tpl.php:

>

Дата додавання:

Створення власного шаблонизатора

Переглядів:

?>

І головний файл шаблону, в якому повинні бути включені вкладені в шаблони. Вкладені шаблони повинні бути виведені як значення змінних $menu і $content. Тобто значення цих змінних повинні включати в себе файли, які ми описали вище.

«.$site_name.»

«;?>

Тепер у файлі index.php, використовуючи шаблонизатор виведемо дані на екран наступним чином. Формуємо значення змінної $menu, при цьому викликаємо функцію шаблонизатора передаємо назва шаблону menu і передаємо масив категорій.

$menu = render(‘menu’,array(‘cat’=>$cat));

Далі аналогічним чином формуємо змінну $content:

$content = render(‘content’,array(‘result’=>$result));

І нарешті, виводимо загальний шаблон на екран, передаючи функції render() його ім’я і значення змінних, які були сформовані вище:

echo render(‘main’, array(‘menu’=>$menu,’content’=>$content));

Знову ж якщо перевірити роботу скрипта в браузері ми побачимо, що все працює відмінно. Ось таким чином ми з Вами створили власний шаблонизатор, який дуже простий за своїм кодом, але дуже функціональний.

На цьому даний урок я буду завершувати. Всього Вам доброго і вдалого кодування!!!