Smarty php код в шаблоне

Smarty – один из самых известных шаблонизаторов. Шаблонизатор нужен для разделения PHP-кода от HTML-кода. Если первый раз с этим сталкиваешься, преимущества такого подхода заметны не сразу, но потом ты удивляешься, как раньше мог обходиться без шаблонов.

  • Smarty довольно быстр (есть и более быстрые шаблонизаторы, но на практике узким местом в проекте является не шаблонизатор, а база данных)
  • Он эффективен, так как PHP делает за него грязную работу.
  • Никакой лишней обработки шаблонов, они компилируются только один раз.

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

  • Можно создавать пользовательские функции и модификаторы, что делает язык шаблонов чрезвычайно расширяемым.
  • Конструкции if/elseif/else/endif передаются обработчику PHP, так что синтаксис выражения {if …} может быть настолько простым или сложным, насколько вам угодно.
  • Допустимо неограниченное вложение секций, условий и т. д.
  • Встроенный механизм кеширования.

Рассмотрим примеры с использованием Smarty:

<?php // подключаем класс Smarty require_once(‘smarty/Smarty.class.php’); // Создаем объект класса $smarty = new Smarty(); // Устанавливаем папки шаблонов // ‘templates’ – каталог, в котором хранятся шаблоны // ‘templates_c’ — туда Smarty сохраняет скомпилированные шаблоны $smarty->template_dir = ‘templates’; $smarty->compile_dir = ‘templates_c’; // Получение данных их БД (в виде ассоциативного массива) $news = $DB->query(«SELECT * FROM news ORDER BY id LIMIT 0,10»); // передаем массив в шаблонизатор $smarty->assign(‘news’, $news); /* Допустим что наша задача была в простом выводе данных в шаблон, что мы уже и сделали, и это конечный этап – вызываем метод display() класса smarty, который выводит, передаёт данные в шаблон, перекомпилирует (если были изменения) и выводит контент. Методу передается имя файла шаблона, в котором как предполагается был обработан нужным образом массив news */ $smarty->display(‘news.tpl’); ?>

Теперь рассмотрим непосредственно файл шаблона news.tpl, фактически это обычный html с вставками переменных и конструкций циклов. Все переменные заключены в фигурные скобки. Шаблон

<html> {foreach from=$news item=item} Заголовок: {$item.title} Текст новости: {item.description} <a href=»index.php?id={$item.id}» mce_href=»index.php?id={$item.id}»>Подробнее…</a> {/foreach} </html>

Вот собственно и все, это рабочий пример, который будет выводить 10 извлечённых нами новостей из базы данных. Может показаться, что в данном примере можно было бы обойтись обычным php с html-вставками. Но в большом проекте шаблонизатор заметно упрощает работу с проектом.

Smarty работает на любом хостинге и широко известен (довольно часто я встречал его в вакансиях).

Как выполнить php в шаблонах Smarty ?

Поэтому, гораздо проще будет найти человека, работающего со Smarty нежели с другим шаблонизатором. Не нужно бояться большой документации. Никто не заставляет вас использовать весь потенциал Smarty. Вам потребуется не более 10-20% функциональности Smarty. Сам я работал еще с Blitz, но там совсем другая идеология. В нем нет многих простых фич, которые есть в Smarty. А насчет скорости приведу в пример Flickr, который использует Smarty – еще раз повторюсь, что узкое место это БД и кэширование данных.

Официальный сайт
On-line документация Smarty (на русском)
Скачать русскую документацию Smarty (pdf 0.8 Mb)

Базовый синтаксис языка шаблонов Smarty

Все тэги шаблонов Smarty располагаются между специальными разделителями { и }.

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

Комментарии

Комментарии в шаблонах заключаются в звездочки (*) окруженные . разделителями, например: {* это комментарий *}. Комментарии не отображаются в выводе шаблона. Они используются для внутренних примечаний в шаблонах.

{* шаблон Smarty *}   {* подключаем шапку шаблона *}{includefile="header.tpl"}   {* выпадающий список *}<select name=company>{html_optionsvalues=$vals selected=$selected output=$output}</select>   …

Функции

Каждый тэг Smarty либо выводит значение переменной, либо вызывает некоторую функцию. Для вызова функции нужно название функции и ее параметры заключить в разделители, например: {funcname attr1=«val» attr2=«val»}.

{includefile="header.tpl"}   {if$highlight_name} Welcome, <font color="{$fontColor}">{$name}!</font>{else} Welcome, {$name}! {/if}   {includefile="footer.tpl"}

Параметры

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

smarty Использование PHP кода в шаблоне — как вставлять

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

Некоторые параметры принимают логические значения (правда или ложь). Они могут быть указаны словами true или false.

{includefile="header.tpl"}   {html_select_date display_days=true}   <select name=company>{html_optionsvalues=$vals selected=$selected output=$output}</select>   …

Внедренные переменные в двойных кавычках

Smarty распознает переменные, если они встречаются в строках, заключенных в двойные кавычки. Распознаются переменные, состоящие из чисел, букв, символов _,[,]. Если надо использовать другие символы для указания переменной (точка или →), то переменную необходимо заключить в обратные кавычки «.

Пример синтаксиса: {func var="test $foo test"} <— ищет $foo {func var="test $foo_bar test"} <— ищет $foo_bar {func var="test $foo[0] test"} <— ищет $foo[0] {func var="test $foo[bar] test"} <— ищет $foo[bar] {func var="test $foo.bar test"} <— ищет $foo (не $foo.bar) {func var="test `$foo.bar` test"} <— ищет $foo.bar Практические примеры: {include file="$tpl_name.tpl"} <— заменит $tpl_name на ее значение {cycle values="one,two,`$smarty.config.myval`"} <— надо заключать в обратные кавычки

Следующая глава.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Настраиваемые {разделители} тэгов шаблона, то есть вы можете использовать , , и т.д.

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

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

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

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

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

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

    Использование php в шаблоне

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

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

I have assigned a smarty variable as such in my php file:

How to mix regular html string with smarty variable?

I want to do something like:

But the smarty template engine fails to evaluate properly the variable

Recommend:Using PHP code in Smarty tpl FIle

the documentation and searched on google but could not find how to use php code they say we need to configure smarty to allow php execution but could not find how to do it.

Smarty: оцените шаблон, хранящийся в переменной PHP

Kindly help me in this regard. Thanks php smarty prestashop

phpsmarty
  |
  this question asked Dec 14 ’09 at 8:10 Graviton 37.5k 108 340 519



 | 

1 Answers
1

—Accepted—Accepted—Accepted—

(note the shift of opening curly brace).

  |
  this answer answered Dec 14 ’09 at 8:11 Michael Krelin — hacker 69.7k 9 143 145      Thanks! I banged myself against the wall for not seeing this. –  Graviton Dec 14 ’09 at 8:20



 | 

Recommend:php — Smarty variable in controller to a tpl

I created a smarty variable to a controller (OrderController.php). The customer select a value and his choice is in this variable. This work perfectly. Now, I want to use this variable (value) in my back office (tpl file) to display the val

oriUlr:http://stackoverflow.com/questions/1899583/concatenate-smarty-variable-with-a-string-in-tpl

——splitte line—————————-

foreach,foreachelse

Имя аттрибута Тип Обязателен По умолчанию Описание
from строка (string) Да n/a Имя массива, по которому надо пройтись
item строка (string) Да n/a Имя переменной, которая будет выступать в качестве значения текущего елемента
key строка (string) Нет n/a Имя переменной, которая будет выступать в качестве ключа текущего елемента
name строка (string) Нет n/a Название цикла foreach для доступа к его свойствам

Циклы foreach являются альтернативой циклам section. Циклы foreach используются для прохождения по одному массиву. Синтаксис foreach намного проще, чем section, но его можно использовать только для одного массива. Тэг foreach должен иметь в пару тэг /foreach. Обязательные параметры — from и item. Название цикла foreach может быть любой последовательностью букв, цифр и знаков подчеркиваний _. Циклы foreach могут быть вложенные, и имена вложенных циклов должны быть уникальные. Переменная from (обычно массив значений) указывает количество итераций цикла. foreachelse выполняется, если нету значений в переменной from.

Пример 7-4. foreach

{* выводятся все значния массива $custid *} {foreach from=$custid item=curr_id} id: {$curr_id}<br> {/foreach} OUTPUT: id: 1000<br> id: 1001<br> id: 1002<br>

Пример 7-5. foreach key

{* The key contains the key for each looped value assignment looks like this: $smarty->assign(«contacts», array(array(«phone» => «1», «fax» => «2», «cell» => «3»), array(«phone» => «555-4444», «fax» => «555-3333», «cell» => «760-1234»))); *} {foreach name=outer item=contact from=$contacts} {foreach key=key item=item from=$contact} {$key}: {$item}<br> {/foreach} {/foreach} OUTPUT: phone: 1<br> fax: 2<br> cell: 3<br> phone: 555-4444<br> fax: 555-3333<br> cell: 760-1234<br>

Циклы foreach имеют свои свойства, доступ к которым реализуется через {$smarty.foreach.foreachname.varname}, где foreachname это название цикла (значение аттрибута name), а varname — имя свойства.

iteration

Количество отработанных итераций.

Отсчет начинается с 1 и увеличивается на единицу на каждой итерации.

first

first устанавливается в true, если текущая итерация первая.

last

last устанавливается в true, если текущая итерация последняя.

show

Аттрибут show может принимать логические значения (истина или ложь).

Get Smarty

Если ложь, то цикл foreach не будет отображаться. Если присутствует тэг foreachelse, то он будет отображен.

total

total хранит количество итераций цикла. Может быть использовано как в цикле, так и вне его..

Добавить комментарий

Закрыть меню