Как пользоваться приложением smarty

Обновлено: 19.09.2024

You may use the Smarty logo according to the trademark notice.

For sponsorship, advertising, news or other inquiries, contact us at:

Chapter 1. Что такое Smarty?
Prev Part I. Приступая к работе Next

Chapter 1. Что такое Smarty?

Smarty - это компилирующий обработчик шаблонов для PHP. Говоря более четко, он предоставляет один из инструментов, которые позволяет добиться отделения прикладной логики и данных от представления. Это очень удобно в ситуациях, когда программист и верстальщик шаблона - различные люди.

Например, скажем, вы создаете страницу, которая показывает газетную статью.

Название статьи, автор и сама статья - элементы, которые не содержат никакой информации о том, как они будут представлены. Их передают в Smarty из приложения.

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

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

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

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

Одно из предназначений Smarty - это отделение логики приложения от представления.

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

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

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

Одна из уникальных возможностей Smarty - компилирование шаблонов. Это означает, что Smarty читает файлы шаблонов и создает PHP-код на их основе. Код создаётся один раз и потом только выполняется. Поэтому нет необходимости в медленной обработке файл шаблона для каждого запроса. Каждый шаблон может пользоваться всеми преимуществами таких компиляторов PHP и кэшируюших решений, как eAccelerator, ionCube, mmCache, Zend Accelerator и прочих.

Некоторые особенности Smarty:

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

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

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

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

Конструкции ...... передаются обработчику PHP, так что синтаксис выражения может быть настолько простым или сложным, насколько вам угодно.

Допустимо неограниченное вложение секций, условий и т.д.

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

Smarty - это движок (обработчик) шаблонов для PHP, облегчающий отделение данных (HTML / CSS) от логики приложения. Это означает, что PHP-код является логикой приложения и отделен от показа информации конечному пользователю.


Цели создания Smarty

  • отделение показа от кода приложения
  • PHP backend, Smarty шаблон frontend
  • дополняйте PHP, а не заменяйте его
  • быстрая разработка / развертывание для программистов и дизайнеров
  • быстрый и простой в обслуживании
  • синтаксис прост для понимания, не требуется знание PHP
  • гибкость для разработки на заказ
  • безопасность: изоляция от PHP
  • бесплатный, с открытым исходным кодом

Когда речь заходит о шаблонах в PHP, есть в основном два лагеря мышления. Первый лагерь восклицает, что"PHP - это шаблонный движок". Этот подход просто смешивает PHP код с HTML. Хотя этот подход быстр с точки зрения чистого выполнения скрипта, многие утверждают, что синтаксис PHP является беспорядочным и трудным для поддержания при смешивании с выводом. PHP хорошо работает для программирования, но не так хорошо для шаблонизации.

Второй лагерь восклицает, что «витрина» сайта должна быть лишена всего программного кода и вместо этого использовать простые теги, чтобы указать, где раскрывается содержимое приложения. Этот подход является общим для других шаблонных движков (и других языков программирования) и является подходом, который использует Smarty.

Почему важно отделить PHP от шаблонов?

Существует много преимуществ отделения PHP кода от шаблонов, некоторые из которых являются:

Синтаксис: Шаблоны обычно состоят из семантической разметки, такой как HTML. Синтаксис PHP хорошо работает для кода приложения, но быстро усложняется при смешивании с HTML. Простой синтаксис smarty's разработан специально для вывода. Smarty фокусирует ваши шаблоны на презентации и меньше на "коде". Это позволяет ускорить развертывание шаблона и упростить его обслуживание. Синтаксис Smarty не требует никаких рабочих знаний PHP и интуитивно понятен как для программистов, так и для не-программистов.

Особенности: механизм шаблонов имеет множество функций для презентации, которые в противном случае необходимо было бы разработать, протестировать и поддерживать в своем собственном коде приложения. Теги также маскируют сложность PHP-операторов. Например:

Smarty является слоем абстракции на PHP для упрощения обслуживания шаблонов (также как и PHP - слой абстракции поверх C для упрощения разработки).

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

Переносимость: поскольку шаблоны Smarty являются языковыми агностиками, они могут быть легко скомпилированы на другие языки (например, javascript) с помощью другого компилятора, а знакомый синтаксис также может быть перенесен на другие языки программирования.

Веб-дизайнеры и PHP

Распространенный вопрос: "веб-дизайнеры должны изучить синтаксис в любом случае, почему бы и не PHP?" Конечно, веб-дизайнеры могут изучить PHP, и они уже могут быть знакомы с ним. Проблема заключается не в их способности изучать PHP, а в поддержании PHP, смешанного с HTML. являются более простыми, интуитивно понятными и менее хрупкими, чем PHP-операторы.

Шаблоны также ограничивают то, что может быть помещено в шаблон. PHP делает его слишком легко добавлять код в шаблоны, которые не принадлежат там. Вы могли бы научить дизайнеров правилам проектирования приложений, но если они этому научатся то станут разработчиками. А им это совсем ненужно.

Smarty предоставляет веб-дизайнерам именно те инструменты, которые им нужны, и дает разработчикам точный контроль над этими инструментами. Многочисленные функции также доступны для вывода, такие как наследование шаблонов, что позволяет максимально использовать шаблон повторно и упрощает организацию.

Как это работает?

Под капотом Smarty компилирует копии шаблонов в виде PHP-скриптов. Таким образом, вы получаете преимущества как синтаксиса тегов шаблона, так и скорости PHP. Компиляция происходит один раз, когда каждый шаблон сначала вызывается, а затем скомпилированные версии используются с этого момента вперед. Smarty заботится об этом для вас, поэтому дизайнер шаблонов просто редактирует шаблоны Smarty и никогда не должен управлять скомпилированными версиями. Этот подход позволяет легко поддерживать шаблоны и в то же время сохраняет время выполнения чрезвычайно быстро. Поскольку скомпилированные версии являются PHP, ускорители op-кода, такие как APC или ZendCache, продолжают работать над скомпилированными сценариями.

Наследование шаблона

Наследование шаблонов является новым для Smarty 3, и это одна из многих отличных новых функций. До наследования шаблонов мы управляли нашими шаблонами по частям, таким как шаблоны верхнего и нижнего колонтитулов. Эта организация имеет многие проблемы, которые требуют «костылей», таких как управление контентом в верхнем/нижнем колонтитуле на основе каждой страницы. С наследованием шаблонов, вместо того, чтобы включать другие шаблоны, мы сохраняем наши шаблоны в виде отдельных страниц. Затем мы можем манипулировать блоками содержимого внутри, наследуя их. Это делает шаблоны интуитивно понятными, эффективными и простыми в управлении.

Почему бы не использовать синтаксис XML/XSLT?

На то есть несколько веских причин. Во-первых, Smarty можно использовать для больше чем как раз шаблоны на основе XML / HTML, такие как создание электронных писем, javascript, CSV и PDF-документов. Во-вторых, синтаксис XML/XSLT еще более подробен и хрупок, чем PHP-код! Это прекрасно для компьютеров, но ужасно для людей. Smarty - это то, что легко читать, понимать и поддерживать.

Безопасность шаблона

Хотя Smarty изолирует вас от PHP, у вас все еще есть возможность используйте его определенным образом, если вы хотите. Шаблон силовых структур ограничение PHP (и выберите функции Smarty.) Это полезно, если у вас есть сторонние шаблоны редактирования, и вы не хотите, чтобы раскрыть всю мощь PHP или Smarty к ним.

Другие шаблонные движки

Smarty - это не единственный движок, следующий философии "отдельный программный код от вывода". Например, Python имеет шаблонные движки, построенные на тех же принципах, таких как Шаблоны Django и Гепард. Примечание: такие языки, как Python, не смешиваются с HTML изначально, что дает им преимущество правильного разделения программного кода с самого начала. Есть доступные библиотеки чтобы смешать Python с HTML, но они, как правило,применяются редко.

Чем Smarty не является

Smarty - это не платформа для разработки приложений. Smarty - это не MVC. Smarty не является альтернативой Zend Framework, CodeIgniter, CakePHP или любой другой инфраструктуре разработки приложений для PHP.

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

Разве Smarty подходит мне?

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

СИНТАКСИС ШАБЛОНА. Вы согласны с тегами PHP, смешанными с HTML? Ваши веб-дизайнеры комфортно с PHP? Может быть, ваши веб-дизайнеры предпочитают синтаксис на основе тегов, предназначенный для презентации? Некоторый опыт работы как с Smarty, так и с PHP помогает ответить на эти вопросы.

Бизнес-кейс: есть ли требование изолировать шаблоны от PHP? Есть ли у вас ненадежные партии редактирования шаблонов, которые вы не хотите, чтобы развязать власть PHP к? Необходимо ли программно управлять тем, что доступно и что недоступно в шаблонах? Smarty предоставляет эти возможности по дизайну.

Набор функций: есть ли функции Smarty's, такие как кэширование, наследование шаблонов и архитектура плагинов, которые сохраняют циклы разработки, пишущие код, который был бы необходим в противном случае? Имеет ли кодовая база или платформа, которую вы планируете использовать, необходимые функции для компонента презентации?

Многие известные PHP-проекты используют Smarty, такие как XOOPS CMS , CMS Made Simple и Tiki CMS/Groupware.

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

  • разделение PHP и HTML / CSS
  • удобочитаемость для организации и управления
  • безопасность для доступа к шаблонам сторонних производителей
  • завершенность, легко расширяемый к вашим собственным потребностям
  • массивная база пользователей
  • Лицензия LGPL для коммерческого использования
  • 100% бесплатно, проект с открытым исходным кодом

Базовая установка

Пример 2-1. Необходимые файлы библиотеки Smarty

Пример 2-2. Ручная установка константы SMARTY_DIR

<?php
// стиль *nix (не забывайте о заглавной 'S')
define ( 'SMARTY_DIR' , '/usr/local/lib/Smarty-v.e.r/libs/' );

// стиль windows
define ( 'SMARTY_DIR' , 'c:/webroot/libs/Smarty-v.e.r/libs/' );

// пример хака для работы одновременно с *nix и windows
// предполагается, что Smarty находится в директории 'includes/' относительно текущего скрипта
define ( 'SMARTY_DIR' , str_replace ( "\\" , "/" , getcwd ()). '/includes/Smarty-v.e.r/libs/' );

require_once( SMARTY_DIR . 'Smarty.class.php' );
$smarty = new Smarty ();
?>

Пример 2-3. Передача абсолютного пути к файлам библиотеки

<?php
// стиль *nix (не забывайте о заглавной 'S')
require_once( '/usr/local/lib/Smarty-v.e.r/libs/Smarty.class.php' );

// стиль windows
require_once( 'c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php' );

$smarty = new Smarty ();
?>

Пример 2-4. Добавление библиотеки в путь в файле php.ini

;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;

; *nix: "/path1:/path2"
include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"

; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"

Пример 2-5. Дописывание include_path из PHP-скрипта используя ini_set()

<?php
// *nix
ini_set ( 'include_path' , ini_get ( 'include_path' ). PATH_SEPARATOR . '/usr/local/lib/Smarty-v.e.r/libs/' );

// windows
ini_set ( 'include_path' , ini_get ( 'include_path' ). PATH_SEPARATOR . 'c:/webroot/lib/Smarty-v.e.r/libs/' );
?>

Smarty нужно четыре директории, которые по умолчанию называются templates/ , templates_c/ , configs/ и cache/

Пример 2-6. Вот как выглядит файловая структура

Пример 2-7. Установка прав доступа к файлам и директориям

Примечание: chmod 770 даёт достаточно жесткую защиту - разрешает только пользователю "nobody" и группе "nobody" доступ на чтение и запись в эти директории. Если вы хотите открыть доступ на чтение для всех (обычно для собственного удобства при просмотре этих файлов), вы можете использовать значение 775 .

Техническое замечание: - это комментарий шаблона. Он не является обязательным, но его размещение в начале каждого шаблона является хорошим тоном. Это позволяет проще различать файлы независимо от их расширения. К примеру, текстовые редакторы могут узнавать этот файл и включать особенную подсветку синтаксиса.

require_once( SMARTY_DIR . 'Smarty.class.php' );

$smarty = new Smarty ();

$smarty -> assign ( 'name' , 'Катруська' );

//** раскомментируйте следующую строку для отображения отладочной консоли
//$smarty->debugging = true;


Описание: обрезает строку. Можно задать длину строки для обрезания, чем заканчивается обрезанная часть и обрезать ли слова.

Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after.
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E.
Two Sisters Re..ckout Counter.

replace:

Описание: передает для замены строку или массив (значения через запятую). Если на что менять не задано, то просто удаляет совпадения

Данный пример удалит пробелы:

regex_replace:

Описание: поиск и замена по регулярному выражению

Данный пример очистит номер телефона от лишних символов:

mb_substr:

удалить первый символ переменной

удалить последний символ переменной

strip_tags:

Описание: Удаляет теги html разметки

Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.
Blind Woman Gets New Kidney from Dad she Hasn't Seen in years .

Кодирование-декодирование URL:

Конкатенация (добавление к переменной):

Подсчитать кол-во символов (параграфов, предложений, слов):

Аналогично: count_paragraphs, count_sentences и count_words

Отрезать все, что после символа &:

Проверка вхождения в $text подстроки $sub:

Первые n-символов в переменной:

Текущая дата:

Завтра (+ 1 день):

Заменяет все переносы строк на тэг <br /> в заданной переменной:

Добавляет пробел между разрядами крупных чисел:

Например 65000 приводится к виду 65 000.

Форматирование строк:

Напр. отрезать символы дальше сотых:

Экранирование:

Еще больше полезностей из Smarty:

Информация о переменной:

Как закомментировать?

Как экранировать код в котором встречаются <>:

Как создать внутреннюю переменную smarty (напр $var) и присвоить ей значение:

Использование условий if:

Как посчитать количество элементов в массиве:

in_array:

Описание: Проверяет наличие значения переменной $module в массиве

Пример 2: Проверка вхождения переменной $pname в массив get-параметров v1

Как организовать цикл for:

Например нужен такой цикл: for($i=1;$i<10;$i++)

Первый и последний элемент цикла:

Прервать цикл foreach:

  • Более сложная задача - вывести записи из цикла отдельными блоками по 4 шт:

Вывод первых 3 свойств через срез массива:

Где: 0 - начало среза, 3 - кол-во элементов

Преобразовать строку в массив $widgets_ids по одинаковому разделителю ",":

Записать значения id в массив $labels_ids:

Проверка различия между массивами:

Ф-я array_diff($array1, $array2) даст те элементы, которые есть в массиве array1, но нет в массиве array2

Рандомное число:

Получение GET-параметра:

Отображение параметра "page" из формы ($_POST['page'])

Отображение значения cookie "name" ($_COOKIE['name'])

Отображение серверной переменной "SERVER_NAME" ($_SERVER['SERVER_NAME'])

Адрес текущей страницы:

Адрес текущей страницы без GET-параметров:

Отображение переменной системного окружения "PATH":

Получить ID сессии:

Определение разрешения файла:

Подключить шаблон:

Документация Smarty:

UPD: обновлено 29.10.2021

Расшифровка шаблонов мобильного дизайна

Расшифровка названий файлов шаблонов мобильного дизайна

Обмен данными между системой 1С:Предприятие 8 и 5CMS

В данной статье подробно описан протокол обмена данными между системой 1С:Предприятие 8 и 5CMS

Читайте также: