Від автора: Розробляючи веб-додатки, дуже хорошою практикою є відділення логіки скрипта від його дизайну. У такому випадку дуже зручно виконувати всілякі правки по дизайну, не порушуючи логіки. І навпаки, змінюючи логічний частина програми – зовнішній вигляд залишається незмінним. Але при створенні додатків за такої структури виникає питання, як змінні в дизайнерську частина? Тому в даному уроці ми з Вами навчимося створювати власний нескладний шаблонизатор, за допомогою якого можна передавати змінні з логічної частини програми дизайнерську.
Введення
Насамперед визначимося з поняттям шаблону. Шаблони — це окремі файли які займаються виведенням даних скрипта на екран. Тобто вони займаються тільки виведенням інформації, при цьому шаблон тільки отримує дані для виводу і ні як їх не формує. З цього випливає, що шаблони містять практично чистий HTML з мінімальними вставками PHP коду, який використовується для відображення даних змінних, формування умов (if — else) і опису циклів (foreach) для обходу по масивам. Шаблони бувають самих різних видів, а разом з тим і шаблонизаторы. Але розрізняють два основних види шаблонів за способом передачі даних. Перший передбачає передачу значень звичайних змінних, які в подальшому будуть виведені на екран звичайним чином, наприклад, використовуючи функцію echo:
echo $var;
Другий вид передбачає вставляти в шаблон спеціальних міток, які будуть замінені шаблонизаором на відповідні значення. Ось приклад такої мітки: {$var}
У даному уроці ми будемо розглядати перший тип шаблонів. Так як цей тип найбільш вдалий і функціональний. Дивіться, мова PHP за своєю структурою вже є дуже хорошим шаблонизатором, так як дуже легко вбудовується в розмітку. Якщо ж ми використовуємо в шаблонах спеціальні мітки ({$var}) , то для виводу даних, нам потрібно писати спеціальну функцію, яка відшукає всі мітки і замінить їх на відповідні дані. Але що виходить, PHP і так дуже добре вбудовується в PHP, а ми пишемо додаткові функції для виведення змінних на екран. Хоча можемо обмежитися звичайною функцією echo:
Створення шаблонів
Для сьогоднішнього уроку ми будемо використовувати наступний сайт:
Ось код файлу index.php який, виводить головну сторінку на екран:
foreach($cat as $item) { printf("%s",$item['id_category'],$item['name_category']); } ?>
%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));
Знову ж якщо перевірити роботу скрипта в браузері ми побачимо, що все працює відмінно. Ось таким чином ми з Вами створили власний шаблонизатор, який дуже простий за своїм кодом, але дуже функціональний.
На цьому даний урок я буду завершувати. Всього Вам доброго і вдалого кодування!!!