Пример создания и использования шаблона в проекте




Лекция 9. Фреймворки. CSM. Шаблонизаторы. Smarty

Фреймворки

Фреймворк – программная платформа, определяющая структуру программной системы, облегчающая разработку и объединение разных компонентов большого программного проекта. Фреймворк диктует правила построения архитектуры приложения. В отличие от библиотеки, которая может быть использована просто, как набор подпрограмм, фреймворк накладывает существенные ограничения на проект, хотя и позволяет значительно ускорить разработку. Ещё одним отличием фреймворка от библиотеки является то, что пользовательский код вызывает функции библиотеки, т.е. является внешним относительно библиотеки. А относительно фреймворка пользовательский код является внутренним и создаёт конкретную реализацию каких-то общих методов.

Выбор фреймворка является одним из наиболее важных решений в реализации проекта. Следует ещё до начала разработки понять, какая требуется скорость работы, какие функции и методы понадобятся, а какие будут не нужным грузом.

CMS

Ещё одним способом упростить разработку является использование CMS. Система управления веб-контентом (Web Content management system) – программный комплекс, предоставляющий функции создания, редактирования, контроля и организации веб-страниц.

CMS должна предоставлять:

· Использование шаблонов отображения, автоматически применяемых к новому или существующему контенту.

· Простота редактирования контента благодаря визуальным редакторам. От пользователя не требуется знание языков программирования и разметки;

· Расширяемость за счет установки дополнительных модулей и плагинов;

· Визуализация содержимого, благодаря которой пользователь может увидеть создаваемый контент до отправки его на сайт (предварительный просмотр).

· Автоматическое обновление и следование веб стандартам;

· Управление документооборотом;

· Единая категоризация всех видов содержимого (таксономия).

· Управление пользователями с различным уровнем доступа

На данный момент (2018 г.) существует около 1300 различных CMS, что позволяет подобрать удобную систему практически для любого сайта стандартной направленности, таких как личные страницы, интернет-магазины, блогов и т.п.

Различные организации создают разные списки наиболее популярных CMS, один из них:

· WordPress

· Joomla

· Drupal

· SilverStripe

· Cake PHP

· Modx

· Concrete5

· PHP Fusion

· CMS Made Simple

· PHPWiki

Системы управления контентом часто используются без какой-либо специфической настройки кода, но большинство из них являются открытыми, что позволяет менять их код по своим потребностям.

Шаблонизаторы

Конечный пользователь web-сайта не видит скрипты PHP, а только результат их работы – страницу на HTML. Подготовленная строка с HTML-кодом выводится на страницу с помощью, например, команд echo или print. Кроме того, можно просто писать HTML-код непосредственно в файле PHP и он будет выведен. Но это не всегда удобно, а главное приводит к смешению логики и представления данных. Возникает вопрос, есть ли простой способ готовить HTML-код независимо от данных. Для простого создания HTML-кода в PHP используются различные шаблонизаторы.

Шаблонизаторы представляют собой инструмент, позволяющий разделить уровень прикладной логики и уровень представления данных. Это удобно во многих случаях, но особенно, когда программист и верстальщик – это разные люди.

Чтобы лучше понять, зачем нужны шаблоны, рассмотрим такой пример: вы создаёте Интернет-магазин, а конкретно в данный момент – страницу, показывающую отдельный товар. На этой странице должны отображаться название товара, его описание, одна или несколько фотографий, отзывы и т.п. На уровне прикладной логики программист получает всю информацию из БД и обрабатывает её, структурируя удобным образом. Данные передаются из PHP в Smarty в виде набора переменных. При этом на данном этапе в данных не содержится никакой информации, как именно будут представлены данные на странице.

На уровне представления данных верстальщик создаёт шаблон, используя комбинацию тегов HTML (для статичных элементов) и тегов шаблонов (для изменяющихся частей), чтобы задать внешний вид представления полученных переменных.

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

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

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

Какие же требования предъявляются для современного шаблонизатора?

Краткость описания. Шаблонизатор должен позволять проводить операции по выводу элементов страницы максимально кратким образом. В идеале на вывод каждой переменной должно тратиться не более одного-двух вспомогательных символов. В PHP для вывода переменной потребуется вызывать команду echo, помимо самого подключения PHP.

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

Безопасность. Шаблонизаторы представляют простые возможности для экранирования символов, в том числе автоматическое экранирование.

Режим «песочницы». Возможность изменения шаблонов страницы пользователем непосредственно при работе сайта через его интерфейс. Данный режим должен иметь возможность в ограничении вызова того или иного кода (методов, функций), использовании каких-то тегов, классов и т.п. К сожалению, данная возможность пока слабо распространена даже в самых современных шаблонизаторах.

Существует достаточно много различных шаблонизаторов. Самые популярные из них: Twig, PHPTAL, Dwoo, Smarty (включая 2 и 3 версии), Calypso, eZ Templates, Django и т.д.

Рассмотрим шаблонизаторы на примере библиотеки Smarty. Эта библиотека имеет свои недостатки, но на данный момент де-факто является стандартом для PHP.

Smarty – это компилирующий обработчик шаблонов для PHP.

Шаблоны Smarty в целом позволяют переносить часть логики в представление, особенно это касается подключения внутри одного шаблона других, последовательной обработки массивов, чередования элементов (например, для окраски в разные цвета строк таблицы), частичной обработки строк (приведение регистра) и т.п. Перенесение такой «логики» в шаблоны только приветствуется. Но вся прочая логика может быть перенесена в шаблоны Smarty только на страх и риск программиста и подобная практика не приветствуется. Удобнее заранее подготовить все данные в PHP.

Достоинства Smarty:

· Smarty представляет собой процедурный язык с простым синтаксисом, поэтому не требует дополнительного изучения.

· Он очень быстр.

· Он эффективен, так как обработчик PHP делает за него «грязную» работу.

· Никакой лишней обработки шаблонов, они компилируются только один раз.

· Перекомпилируются только те шаблоны, которые изменились.

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

· Настраиваемые {разделители} тэгов шаблона, то есть вы можете использовать {$foo}, {{$foo}}, <!--{$foo}--> и т.д.

· Существует возможность включения PHP-кода прямо в ваш шаблон, однако обычно в этом нет необходимости (и это не рекомендуется), так как движок весьма гибок и расширяем.

· Встроенный механизм кэширования.

· Произвольные источники шаблонов.

· Пользовательские функции кэширования.

· Компонентная архитектура.

Подключение Smarty

Smarty подключается к PHP версии 4.0.6 или выше.

Для подключения достаточно скачать библиотеку, распаковать папку libs в каталог, находящийся в проекте.

Smarty использует константу PHP SMARTY_DIR, которая указывает полный путь к директории libs/ из Smarty. Обычно, если ваше приложение может найти файл Smarty.class.php, то нет необходимости устанавливать SMARTY_DIR – Smarty сам во всём разберётся. Если Smarty.class.php не может быть найден в вашем include_path или вы не указывали абсолютный путь к нему в приложении, то вы должны определить SMARTY_DIR вручную. SMARTY_DIR должна включать завершающий слэш.

Более подробную информацию об установке Smarty можно найти на официальном сайте: https://www.smarty.net/docsv2/ru/installing.smarty.basic.tpl.

Пример создания и использования шаблона в проекте

<?php

// Обратите внимание: в слове Smarty буква 'S' должна быть заглавной

require_once('Smarty.class.php');

$smarty = new Smarty();

Для передачи параметров в шаблон используется команда assign:

$smarty->assign('title', $title);

Чтобы вывести результат работы на экран команда display:

$smarty->display('Имя_шаблона.tpl');

А для получения строки с HTML-кодом команда fetch:

$smarty->fetch('Имя_шаблона.tpl');

Синтаксис Smarty

Синтаксис Smarty в целом очень прост. Всё, что не относится к тегам Smarty, считается частью HTML-кода. Теги стандартно выделяются фигурными скобками {}. Теги так же, как в HTML, делятся на требующие специального закрытия и «однострочные». Если тег требует специального закрытия, то это закрытие имеет вид

{/имя_тега}

Рассмотрим наиболее часто встречающиеся теги.

Ветвление

Стандартный оператор if:

{if $object.title }

<div class="list-elem clearfix">

<div class="title">Название:</div>

<div class="value"><strong><a href="/object/{$object.id}">

{$object.title}

</a></strong></div>

</div>

{else}

<div>Нет названия</div>

{/if}

Цикл foreach

{foreach key=nid item=history_elem from=$object.history name=history}

<tr>

<td><strong>{$history_elem.date}:</strong></td>

<td>{$history_elem.status}</td>

</tr>

{foreachelse}

Тут что-то ещё

{/foreach}

Параметры цикла задаются в виде

ключ=значение

Всего 4 параметра:

· key – ключ элемента массива

· item – элемент массива

· from – сам массив

· name – имя данного цикла. Имя необходимо в случае, если вам потребуется совершить какие-то операции непосредственно над циклом. Например, узнать, является ли текущий элемент массива первым (или последним).

{if $smarty.foreach.history.last}Делаем, что хотели{/if}

Присваивание

Для присваивания используется команда assign:

{assign var=row_count value=$data.data|@count}

У команды 2 параметра:

· var – имя новой (или старой) переменной

· value – её значение



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-02-10 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: