Что такое
В одной из лекций мы уже рассматривали пример <!имя элемента> ), которые наша программа впоследствии заменяла на значения соответствующих элементов. Для чего нам был нужен такой
Наиболее распространенный ответ на вопрос, зачем нужны
Приведенный пример
Итак, задача:
Требуется сгенерировать web-страницу со списком статей, имеющихся в базе данных. Для простоты считаем, что статья имеет название title, автора author, краткое содержание abstract и полное содержание fulltext, которое представлено либо в виде текста в базе данных, либо в виде ссылки на файл. Список должен быть организован так, чтобы при щелчке мышью на названии статьи ее полное содержание появлялось в новом окне.
Как можно решить такую задачу способом простой
Нужно придумать <!имя элемента>. Поэтому мы можем написать только
<li><a href="<!fulltext>" target=new><!title></a> (<!author>)<br><p><!abstract></p>
Кроме того, здесь есть еще одна загвоздка - с отображением ссылки на полный текст статьи. Если мы будем действовать по правилу <!fulltext> вставим не ссылку на текст, а сам текст. То есть для этого элемента нужна дополнительная проверка перед заменой и какие-то дополнительные действия в случае, если в поле fulltext содержится текст статьи, а не ссылка на файл. Не будем усложнять себе жизнь и договоримся, что в поле fulltext всегда содержится только ссылка на файл. Тогда задачу можно решить следующим образом:
<?
$li_tmpl = file_get_contents("tmpl.html");
// считываем шаблон строки из файла
// устанавливаем соединение и выбираем
// базу данных
$conn = mysql_connect("localhost",
"nina","123")
or die("Can't connect");
mysql_select_db("book");
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
// отправляем запрос
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$tmpl .= $li_tmpl;
$tmpl = str_replace("<!title>",
mysql_result($q,$i,"title"),$tmpl);
$tmpl = str_replace("<!author>",
mysql_result($q,$i,"author"),$tmpl);
$tmpl = str_replace("<!abstract>",
mysql_result($q,$i,"abstract"),$tmpl);
$tmpl = str_replace("<!fulltext>",
mysql_result($q,$i,"fulltext"),$tmpl);
}
echo $tmpl;
?>
Если
| 1. | Введение в PHP (Савельева Н.В.) |
|---|---|
| Лекция дает представление о том, что такое язык PHP, для чего он создавался изначально и как используется теперь, какими возможностями обладает. | |
| 2. | Установка и настройка ПО (Иванов Иван) |
| Рекомендации по |
В принципе
Что представляет собой файл
Синтаксис {([A-Z0-9_]+)}
Это значит, что "{". Второй и последующие символы должны быть буквами верхнего регистра от A до Z, цифрами или символами подчеркивания. "}".
{TITLE}
{AUTH20}
{TOP_OF_PAGE}
Как уже было сказано, основная идея
<html>
<head><title>{TITLE_}</title>
</head>
<body>
{MAIN}
</body>
</html>
<ul>
{LIST_ELEMENT}
</ul>
<li><a href="{FULLTEXT}">{TITLE}</a>
({AUTHOR})
<br> <p> {ABSTRACT}
Перед началом работы с
include("class.FastTemplate.php3");
Следующий важный шаг - это создание
$tpl = new FastTemplate(
"/path/to/templates");
В качестве параметра передается путь к месту, где находятся наши
Далее необходимо изучить
Для работы с
Синтаксис:
define( array ( ключ => значение,
ключ1 => значение1, ... ))
$tpl->define( array (main => "main.tpl",
list_f => "list.tpl",
list_el=> "list_element.tpl" ));
Здесь мы задаем псевдонимы именам файлов main, list_f и list_el, будут использоваться в программе вместо соответствующих имен файлов main., list. и list_element..
Синтаксис:
assign( (пары ключ/значение) или
( array(пары ключ/значение) )
$tpl->assign(array(
TITLE => "Установка и настройка ПО",
TITLE => "Введение в PHP" ));
Здесь мы дважды устанавливаем значение TITLE. Эта "Введение в PHP".
Синтаксис:
parse (возвращаемая переменная,
источники шаблонов)
$tpl->parse(MAIN, "main");
// простая форма
$tpl->parse(MAIN, array ("list_f", "main"));
// составная форма
$tpl->parse(MAIN, ".list_el");
// присоединяющая форма
В простой форме MAIN. Если {MAIN} появится в более поздних
Составная форма
$tpl->parse(MAIN, "list_f"); $tpl->parse(MAIN, ".main");
это то же самое что и
$tpl->parse(MAIN, array("list_f", "main"));
Когда используется составная форма, важно, чтобы каждый {MAIN}, поскольку именно в нее передаются результаты обработки list_f. Если main не содержит {MAIN}, то результаты обработки list_f будут потеряны.
Присоединяющий стиль позволяет добавлять результаты обработки
Синтаксис:
FastPrint(обработанная переменная)
$tpl->FastPrint();
/* если продолжать предыдущий пример,
то эта функция напечатает значение
переменной MAIN */
$tpl->FastPrint("MAIN");
// эта функция сделает то же самое
Если нужно печатать не на экран, а, например, в файл, то получить ссылку на данные можно с помощью
$data = $tpl->fetch("MAIN");
fwrite($fd, $data); // запись данных в файл
Теперь попробуем собрать воедино все изученные
<?php
include("class.FastTemplate.php3"); //подключаем класс
//шаблонов FastTemplate
$tpl = new FastTemplate("c:/users/nina/tasks/"); //создаем
//объект FastTemplate
//задаем псевдонимы для имен файлов шаблонов
$tpl->define( array( main => "main.tpl",
list_f => "list.tpl",
list_el=> "list_element.tpl" ));
// Присваиваем переменной TITLE_ значение "List of articles"
$tpl->assign(TITLE_, "List of articles");
/* далее, как и раньше, устанавливаем соединение с базой
и получаем из нее значения нужных элементов */
$conn = mysql_connect("localhost","nina","123")
or die("Can't connect");
mysql_select_db("book");
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$title = mysql_result($q,$i,"title");
$author = mysql_result($q,$i,"author");
$abs = mysql_result($q,$i,"abstract");
$full = mysql_result($q,$i,"fulltext");
// присваиваем полученные значения переменным,
// использованным внутри шаблонов
$tpl->assign(array(
TITLE => $title,
AUTHOR => $author,
ABSTRACT => $abs,
FULLTEXT => $full ));
/* подставляем вместо переменных значения в шаблоне list_el и
добавляем полученное к переменной LIST_ELEMENT */
$tpl->parse(LIST_ELEMENT,".list_el");
}
//подставляем значения в шаблоны list_f и main
$tpl->parse(MAIN, array("list_f","main"));
Header("Content-type: text/plain");
$tpl->FastPrint(); // выводим обработанный шаблон на экран
exit;
?>
Заметим, что решение задачи получилось несколько более сложным, чем в первом случае, когда использовалась только
Этот класс
Рассмотрим некоторые основные конструкции механизма
Первое, с чего мы начнем, - это
<?
require('Smarty.class.php');
// подключаем файл с
// описанием класса Smarty
$smarty = new Smarty;
// создаем экземпляр класса Smarty
?>
Если при его исполнении появилась ошибка, то нужно попробовать один из перечисленных ниже вариантов.
<?
// подключаем файл с описанием класса
require('c:/users/my/Smarty/libs/
Smarty.class.php');
$smarty = new Smarty;
// создаем экземпляр класса Smarty
?>
include_path (в этом случае код менять не нужно).SMARTY_DIR.<?
define("SMARTY_DIR",
"c:/users/my/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
?>
Теперь, после того как мы убедились, что библиотеки будут найдены, нужно создать
Эти имена задаются свойствами
Создадим перечисленные
Чтобы протестировать сделанные настройки, создадим простой
index. (является c:/smarty_dirs/book/templates/)
{* Шаблон Smarty *}
Привет, {$name}!
index.php (является кодом нашей программы и находится в /~my/tasks/book/ или, что то же самое, в c:/users/my/tasks/book/ )
<?
// загружаем Smarty-библиотеку и создаем экземпляр класса
define("SMARTY_DIR","c:/users/my/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
// указываем, где находятся Smarty-директории
$smarty->template_dir = "c:/smarty_dirs/book/templates/";
$smarty->compile_dir = "c:/smarty_dirs/book/templates_c/";
$smarty->config_dir = "c:/smarty_dirs/book/configs/";
$smarty->cache_dir = "c:/smarty_dirs/book/cache/";
$smarty->assign("name","Вася"); // присваиваем переменной
// name значение Вася
$smarty->display("index.tpl"); // выводим обработанный
// шаблон
?>
В результате должны получить:
Привет, Вася!
Все настройки, необходимые для работы нашего приложения, можно вынести в отдельный файл и организовать их в качестве
Далее более подробно рассмотрим, из каких элементов могут состоять
"{" и "}", но их можно изменить. Все, что не заключено в такие ограничители, index., приведенном выше, {$name} - это "Привет," и "!" - не изменяющиеся в процессе обработки
{* Это комментарий. После обработки шаблона
он на экране не отображается *}
Каждый
{имя_функции атрибут1="значение1"
атрибут2="значение2"}
Например: {$first_name}
Элементы массива, значения которых были присвоены в {$имя_массива.ассоциативный_ключ}.
Например: {$person.last_name}
Элементы не ассоциативного массива доступны с помощью {$имя_массива[числовой_индекс]}
Например: {$person[2]}
Свойства объектов, заданные в {$имя_объекта->имя_свойства}
Например: {$person->email}
#. Также они доступны как элементы ассоциативного массива $smarty.config.
Например: {#bodyBgColor#} или {$smarty.config.bodyBgColor}
Кроме того, существует {$smarty}, зарезервированная для некоторых специальных
В
Например, чтобы перевести значение {$title} в верхний регистр, нужно применить к ней {$title|upper}
Можно использовать сразу несколько {$title|upper| переведет значение
Перечислять все имеющиеся
# глобальные переменные
pageTitle = "List of documents"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
[Customer]
pageTitle = "Список статей"
Intro = """Это значение состоит из
нескольких строк. Поэтому его нужно
заключить в тройные кавычки."""
# скрытая секция
[.Database]
host=localhost
db=book
user=nina
pass=123
Customer и Database, а кроме них заданы pageTitle, bodyBgColor, tableBgColor и rowBgColor.
Чтобы спрятать значение Database, чтобы нельзя было узнать пароль и имя пользователя, применяемые для установки соединения.
#.
Загрузка
Для работы с
Синтаксис:
void assign (смешанное значение);
void assign (имя переменной,
смешанное значение);
<?php
// передаем пары имя/значение для
// переменной Name и
// Address в отдельности
$smarty->assign("Name","Вася");
$smarty->assign("Address",$addr);
// здесь $addr может быть и массивом
// передаем ассоциативный массив
$smarty->assign(array(
"city" => "Новосибирск",
"street" => "Пирогова"));
// таким образом, переменные city и street
// получат соответствующие значения
?>
Синтаксис:
void append (смешанное значение);
void append (имя переменной,
смешанное значение);
void append (имя переменной,
смешанное значение, слияние);
Принцип действия этого примерно такой же, как и у слияние равным TRUE, то значение будет не присоединено в качестве еще одного элемента, а слито воедино с текущим массивом.
$smarty->append(array(
title => $title,
author => $author))
Здесь если title была строкой, то она становится массивом и к нему добавляется еще один элемент со значением $title. То же самое происходит с author.
void config_load(имя файла, [имя секции]);
Пример: $smarty->
void display(шаблон);
string fetch(шаблон);
Этот
Синтаксис:
{config_load file="имя_файла" }
Эта
Пример:
{config_load file="task.conf"}
Синтаксис:
{capture name="имя_блока"
assign="имя_переменной"} ...
{/capture}
Эта {capture name="varname"} и {/capture}, будет записано в varname. Захваченный таким образом контент может быть использован в $smarty.capture.varname, где varname - значение, переданное в атрибут name default.
Второй параметр name, не обязательный.
Синтаксис:
{section name="имя_секции"
loop="переменная_для_выч-ния_числа_итераций"
[,start="индекс_начальной_позиции"]
[, step="шаг"] [,max="максимум_итераций"]
[,show="показывать_ли_секцию"] }...
{/section}
name, с помощью которого задается имя loop, который представляет собой loop - это
{section name=art loop=$title}
Название: {$title[art]}<br>
{/section}
Синтаксис:
{foreach from="имя_массива"
item="имя_текущего_элемента"}
... {/foreach}
Кроме того, можно использовать дополнительные атрибуты key - имя ключа для текущего элемента массива и name - имя цикла, с помощью которого можно будет получать доступ к его свойствам. Атрибуты from и item - обязательные.
{foreach from=$articles item=art}
Title: {$art}<br>
{/foreach}
Циклы {$smarty.foreach.foreachname.varname}, где foreachname - это имя цикла, заданное его параметром name, а varname - имя свойства.
Синтаксис:
{if выражение} блок_действий
{elseif выражение1} блок_действий1
{else} блок_действий2
{/if}
Действие оператора практически аналогично оператору eq, ne, neq, gt, lt, , le, gte, ge, is even, is , is not even, is not , not, mod, div by, even by, , ==, !=, >, <, <=, >=. Каждый из них обязательно должен быть отделен от окружающих его значений пробелами. В выражениях можно использовать круглые скобки и вызывать php-
{if $name eq "Вася"}
Добро пожаловать, Вася.
{elseif $name eq "Петя"}
Добро пожаловать, Петя.
{else}
Добро пожаловать. А вы кто?
{/if}
{* этот пример не будет работать,
поскольку не поставлены
пробелы вокруг операторов сравнения *}
{if $name=="Вася" || $name=="Петя"}
...
{/if}
Теперь, после знакомства с основными конструкциями
{* Smarty template index.tpl *}
{config_load file="task.conf" }
<html>
<head><title>{#pageTitle#}</title>
</head>
<body>
<ol>
{section name=art loop=$title}
<li><a href="{$fulltext[art]}">
{$title[art]}</a>
({$author[art]})
<br> <p> {$abstract[art]}
{/section}
</ol>
</body>
</html>
В task.conf будем хранить название страницы и параметры для доступа к базе данных:
# глобальные переменные pageTitle = "List of documents" [Customer] pageTitle = "Список статей" [Database] host=localhost db=book user=nina pass=123
Скрипт ( index.php ), обрабатывающий написанный нами
<?
define("SMARTY_DIR","c:/users/nina/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
$smarty->template_dir = "c:/smarty_dirs/book/templates/";
$smarty->compile_dir = "c:/smarty_dirs/book/templates_c/";
$smarty->config_dir = "c:/smarty_dirs/book/configs/";
$smarty->cache_dir = "c:/smarty_dirs/book/cache/";
// вышеприведенный блок лучше вынести в отдельный файл
$smarty->config_load("task.conf","Database");
$host = $smarty->get_config_vars("host");
$user = $smarty->get_config_vars("user");
$pass = $smarty->get_config_vars("pass");
$db = $smarty->get_config_vars("db");
$conn = mysql_connect($host, $user, $pass) or die("Can't connect");
mysql_select_db($db);
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$title = mysql_result($q,$i,"title");
$author = mysql_result($q,$i,"author");
$abs = mysql_result($q,$i,"abstract");
$full = mysql_result($q,$i,"fulltext");
$smarty->append(array(
title => $title,
author => $author,
abstract => $abs,
fulltext => $full ));
}
$smarty->display("index.tpl");
?>
Как вы, скорее всего, заметили, программа получилась еще более громоздкой, чем в первых двух случаях, когда использовалась простая замена значений и
Итак, в этой лекции было рассказано о том, что такое
Что такое
В одной из лекций мы уже рассматривали пример <!имя элемента> ), которые наша программа впоследствии заменяла на значения соответствующих элементов. Для чего нам был нужен такой
Наиболее распространенный ответ на вопрос, зачем нужны
Приведенный пример
Итак, задача:
Требуется сгенерировать web-страницу со списком статей, имеющихся в базе данных. Для простоты считаем, что статья имеет название title, автора author, краткое содержание abstract и полное содержание fulltext, которое представлено либо в виде текста в базе данных, либо в виде ссылки на файл. Список должен быть организован так, чтобы при щелчке мышью на названии статьи ее полное содержание появлялось в новом окне.
Как можно решить такую задачу способом простой
Нужно придумать <!имя элемента>. Поэтому мы можем написать только
<li><a href="<!fulltext>" target=new><!title></a> (<!author>)<br><p><!abstract></p>
Кроме того, здесь есть еще одна загвоздка - с отображением ссылки на полный текст статьи. Если мы будем действовать по правилу <!fulltext> вставим не ссылку на текст, а сам текст. То есть для этого элемента нужна дополнительная проверка перед заменой и какие-то дополнительные действия в случае, если в поле fulltext содержится текст статьи, а не ссылка на файл. Не будем усложнять себе жизнь и договоримся, что в поле fulltext всегда содержится только ссылка на файл. Тогда задачу можно решить следующим образом:
<?
$li_tmpl = file_get_contents("tmpl.html");
// считываем шаблон строки из файла
// устанавливаем соединение и выбираем
// базу данных
$conn = mysql_connect("localhost",
"nina","123")
or die("Can't connect");
mysql_select_db("book");
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
// отправляем запрос
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$tmpl .= $li_tmpl;
$tmpl = str_replace("<!title>",
mysql_result($q,$i,"title"),$tmpl);
$tmpl = str_replace("<!author>",
mysql_result($q,$i,"author"),$tmpl);
$tmpl = str_replace("<!abstract>",
mysql_result($q,$i,"abstract"),$tmpl);
$tmpl = str_replace("<!fulltext>",
mysql_result($q,$i,"fulltext"),$tmpl);
}
echo $tmpl;
?>
Если
| 1. | Введение в PHP (Савельева Н.В.) |
|---|---|
| Лекция дает представление о том, что такое язык PHP, для чего он создавался изначально и как используется теперь, какими возможностями обладает. | |
| 2. | Установка и настройка ПО (Иванов Иван) |
| Рекомендации по |
В принципе
Что представляет собой файл
Синтаксис {([A-Z0-9_]+)}
Это значит, что "{". Второй и последующие символы должны быть буквами верхнего регистра от A до Z, цифрами или символами подчеркивания. "}".
{TITLE}
{AUTH20}
{TOP_OF_PAGE}
Как уже было сказано, основная идея
<html>
<head><title>{TITLE_}</title>
</head>
<body>
{MAIN}
</body>
</html>
<ul>
{LIST_ELEMENT}
</ul>
<li><a href="{FULLTEXT}">{TITLE}</a>
({AUTHOR})
<br> <p> {ABSTRACT}
Перед началом работы с
include("class.FastTemplate.php3");
Следующий важный шаг - это создание
$tpl = new FastTemplate(
"/path/to/templates");
В качестве параметра передается путь к месту, где находятся наши
Далее необходимо изучить
Для работы с
Синтаксис:
define( array ( ключ => значение,
ключ1 => значение1, ... ))
$tpl->define( array (main => "main.tpl",
list_f => "list.tpl",
list_el=> "list_element.tpl" ));
Здесь мы задаем псевдонимы именам файлов main, list_f и list_el, будут использоваться в программе вместо соответствующих имен файлов main., list. и list_element..
Синтаксис:
assign( (пары ключ/значение) или
( array(пары ключ/значение) )
$tpl->assign(array(
TITLE => "Установка и настройка ПО",
TITLE => "Введение в PHP" ));
Здесь мы дважды устанавливаем значение TITLE. Эта "Введение в PHP".
Синтаксис:
parse (возвращаемая переменная,
источники шаблонов)
$tpl->parse(MAIN, "main");
// простая форма
$tpl->parse(MAIN, array ("list_f", "main"));
// составная форма
$tpl->parse(MAIN, ".list_el");
// присоединяющая форма
В простой форме MAIN. Если {MAIN} появится в более поздних
Составная форма
$tpl->parse(MAIN, "list_f"); $tpl->parse(MAIN, ".main");
это то же самое что и
$tpl->parse(MAIN, array("list_f", "main"));
Когда используется составная форма, важно, чтобы каждый {MAIN}, поскольку именно в нее передаются результаты обработки list_f. Если main не содержит {MAIN}, то результаты обработки list_f будут потеряны.
Присоединяющий стиль позволяет добавлять результаты обработки
Синтаксис:
FastPrint(обработанная переменная)
$tpl->FastPrint();
/* если продолжать предыдущий пример,
то эта функция напечатает значение
переменной MAIN */
$tpl->FastPrint("MAIN");
// эта функция сделает то же самое
Если нужно печатать не на экран, а, например, в файл, то получить ссылку на данные можно с помощью
$data = $tpl->fetch("MAIN");
fwrite($fd, $data); // запись данных в файл
Теперь попробуем собрать воедино все изученные
<?php
include("class.FastTemplate.php3"); //подключаем класс
//шаблонов FastTemplate
$tpl = new FastTemplate("c:/users/nina/tasks/"); //создаем
//объект FastTemplate
//задаем псевдонимы для имен файлов шаблонов
$tpl->define( array( main => "main.tpl",
list_f => "list.tpl",
list_el=> "list_element.tpl" ));
// Присваиваем переменной TITLE_ значение "List of articles"
$tpl->assign(TITLE_, "List of articles");
/* далее, как и раньше, устанавливаем соединение с базой
и получаем из нее значения нужных элементов */
$conn = mysql_connect("localhost","nina","123")
or die("Can't connect");
mysql_select_db("book");
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$title = mysql_result($q,$i,"title");
$author = mysql_result($q,$i,"author");
$abs = mysql_result($q,$i,"abstract");
$full = mysql_result($q,$i,"fulltext");
// присваиваем полученные значения переменным,
// использованным внутри шаблонов
$tpl->assign(array(
TITLE => $title,
AUTHOR => $author,
ABSTRACT => $abs,
FULLTEXT => $full ));
/* подставляем вместо переменных значения в шаблоне list_el и
добавляем полученное к переменной LIST_ELEMENT */
$tpl->parse(LIST_ELEMENT,".list_el");
}
//подставляем значения в шаблоны list_f и main
$tpl->parse(MAIN, array("list_f","main"));
Header("Content-type: text/plain");
$tpl->FastPrint(); // выводим обработанный шаблон на экран
exit;
?>
Заметим, что решение задачи получилось несколько более сложным, чем в первом случае, когда использовалась только
Этот класс
Рассмотрим некоторые основные конструкции механизма
Первое, с чего мы начнем, - это
<?
require('Smarty.class.php');
// подключаем файл с
// описанием класса Smarty
$smarty = new Smarty;
// создаем экземпляр класса Smarty
?>
Если при его исполнении появилась ошибка, то нужно попробовать один из перечисленных ниже вариантов.
<?
// подключаем файл с описанием класса
require('c:/users/my/Smarty/libs/
Smarty.class.php');
$smarty = new Smarty;
// создаем экземпляр класса Smarty
?>
include_path (в этом случае код менять не нужно).SMARTY_DIR.<?
define("SMARTY_DIR",
"c:/users/my/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
?>
Теперь, после того как мы убедились, что библиотеки будут найдены, нужно создать
Эти имена задаются свойствами
Создадим перечисленные
Чтобы протестировать сделанные настройки, создадим простой
index. (является c:/smarty_dirs/book/templates/)
{* Шаблон Smarty *}
Привет, {$name}!
index.php (является кодом нашей программы и находится в /~my/tasks/book/ или, что то же самое, в c:/users/my/tasks/book/ )
<?
// загружаем Smarty-библиотеку и создаем экземпляр класса
define("SMARTY_DIR","c:/users/my/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
// указываем, где находятся Smarty-директории
$smarty->template_dir = "c:/smarty_dirs/book/templates/";
$smarty->compile_dir = "c:/smarty_dirs/book/templates_c/";
$smarty->config_dir = "c:/smarty_dirs/book/configs/";
$smarty->cache_dir = "c:/smarty_dirs/book/cache/";
$smarty->assign("name","Вася"); // присваиваем переменной
// name значение Вася
$smarty->display("index.tpl"); // выводим обработанный
// шаблон
?>
В результате должны получить:
Привет, Вася!
Все настройки, необходимые для работы нашего приложения, можно вынести в отдельный файл и организовать их в качестве
Далее более подробно рассмотрим, из каких элементов могут состоять
"{" и "}", но их можно изменить. Все, что не заключено в такие ограничители, index., приведенном выше, {$name} - это "Привет," и "!" - не изменяющиеся в процессе обработки
{* Это комментарий. После обработки шаблона
он на экране не отображается *}
Каждый
{имя_функции атрибут1="значение1"
атрибут2="значение2"}
Например: {$first_name}
Элементы массива, значения которых были присвоены в {$имя_массива.ассоциативный_ключ}.
Например: {$person.last_name}
Элементы не ассоциативного массива доступны с помощью {$имя_массива[числовой_индекс]}
Например: {$person[2]}
Свойства объектов, заданные в {$имя_объекта->имя_свойства}
Например: {$person->email}
#. Также они доступны как элементы ассоциативного массива $smarty.config.
Например: {#bodyBgColor#} или {$smarty.config.bodyBgColor}
Кроме того, существует {$smarty}, зарезервированная для некоторых специальных
В
Например, чтобы перевести значение {$title} в верхний регистр, нужно применить к ней {$title|upper}
Можно использовать сразу несколько {$title|upper| переведет значение
Перечислять все имеющиеся
# глобальные переменные
pageTitle = "List of documents"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
[Customer]
pageTitle = "Список статей"
Intro = """Это значение состоит из
нескольких строк. Поэтому его нужно
заключить в тройные кавычки."""
# скрытая секция
[.Database]
host=localhost
db=book
user=nina
pass=123
Customer и Database, а кроме них заданы pageTitle, bodyBgColor, tableBgColor и rowBgColor.
Чтобы спрятать значение Database, чтобы нельзя было узнать пароль и имя пользователя, применяемые для установки соединения.
#.
Загрузка
Для работы с
Синтаксис:
void assign (смешанное значение);
void assign (имя переменной,
смешанное значение);
<?php
// передаем пары имя/значение для
// переменной Name и
// Address в отдельности
$smarty->assign("Name","Вася");
$smarty->assign("Address",$addr);
// здесь $addr может быть и массивом
// передаем ассоциативный массив
$smarty->assign(array(
"city" => "Новосибирск",
"street" => "Пирогова"));
// таким образом, переменные city и street
// получат соответствующие значения
?>
Синтаксис:
void append (смешанное значение);
void append (имя переменной,
смешанное значение);
void append (имя переменной,
смешанное значение, слияние);
Принцип действия этого примерно такой же, как и у слияние равным TRUE, то значение будет не присоединено в качестве еще одного элемента, а слито воедино с текущим массивом.
$smarty->append(array(
title => $title,
author => $author))
Здесь если title была строкой, то она становится массивом и к нему добавляется еще один элемент со значением $title. То же самое происходит с author.
void config_load(имя файла, [имя секции]);
Пример: $smarty->
void display(шаблон);
string fetch(шаблон);
Этот
Синтаксис:
{config_load file="имя_файла" }
Эта
Пример:
{config_load file="task.conf"}
Синтаксис:
{capture name="имя_блока"
assign="имя_переменной"} ...
{/capture}
Эта {capture name="varname"} и {/capture}, будет записано в varname. Захваченный таким образом контент может быть использован в $smarty.capture.varname, где varname - значение, переданное в атрибут name default.
Второй параметр name, не обязательный.
Синтаксис:
{section name="имя_секции"
loop="переменная_для_выч-ния_числа_итераций"
[,start="индекс_начальной_позиции"]
[, step="шаг"] [,max="максимум_итераций"]
[,show="показывать_ли_секцию"] }...
{/section}
name, с помощью которого задается имя loop, который представляет собой loop - это
{section name=art loop=$title}
Название: {$title[art]}<br>
{/section}
Синтаксис:
{foreach from="имя_массива"
item="имя_текущего_элемента"}
... {/foreach}
Кроме того, можно использовать дополнительные атрибуты key - имя ключа для текущего элемента массива и name - имя цикла, с помощью которого можно будет получать доступ к его свойствам. Атрибуты from и item - обязательные.
{foreach from=$articles item=art}
Title: {$art}<br>
{/foreach}
Циклы {$smarty.foreach.foreachname.varname}, где foreachname - это имя цикла, заданное его параметром name, а varname - имя свойства.
Синтаксис:
{if выражение} блок_действий
{elseif выражение1} блок_действий1
{else} блок_действий2
{/if}
Действие оператора практически аналогично оператору eq, ne, neq, gt, lt, , le, gte, ge, is even, is , is not even, is not , not, mod, div by, even by, , ==, !=, >, <, <=, >=. Каждый из них обязательно должен быть отделен от окружающих его значений пробелами. В выражениях можно использовать круглые скобки и вызывать php-
{if $name eq "Вася"}
Добро пожаловать, Вася.
{elseif $name eq "Петя"}
Добро пожаловать, Петя.
{else}
Добро пожаловать. А вы кто?
{/if}
{* этот пример не будет работать,
поскольку не поставлены
пробелы вокруг операторов сравнения *}
{if $name=="Вася" || $name=="Петя"}
...
{/if}
Теперь, после знакомства с основными конструкциями
{* Smarty template index.tpl *}
{config_load file="task.conf" }
<html>
<head><title>{#pageTitle#}</title>
</head>
<body>
<ol>
{section name=art loop=$title}
<li><a href="{$fulltext[art]}">
{$title[art]}</a>
({$author[art]})
<br> <p> {$abstract[art]}
{/section}
</ol>
</body>
</html>
В task.conf будем хранить название страницы и параметры для доступа к базе данных:
# глобальные переменные pageTitle = "List of documents" [Customer] pageTitle = "Список статей" [Database] host=localhost db=book user=nina pass=123
Скрипт ( index.php ), обрабатывающий написанный нами
<?
define("SMARTY_DIR","c:/users/nina/Smarty/libs/");
require(SMARTY_DIR."Smarty.class.php");
$smarty = new Smarty;
$smarty->template_dir = "c:/smarty_dirs/book/templates/";
$smarty->compile_dir = "c:/smarty_dirs/book/templates_c/";
$smarty->config_dir = "c:/smarty_dirs/book/configs/";
$smarty->cache_dir = "c:/smarty_dirs/book/cache/";
// вышеприведенный блок лучше вынести в отдельный файл
$smarty->config_load("task.conf","Database");
$host = $smarty->get_config_vars("host");
$user = $smarty->get_config_vars("user");
$pass = $smarty->get_config_vars("pass");
$db = $smarty->get_config_vars("db");
$conn = mysql_connect($host, $user, $pass) or die("Can't connect");
mysql_select_db($db);
$sql = "SELECT * FROM Articles";
$q = mysql_query($sql,$conn);
$num = mysql_num_rows($q);
for($i=0; $i<$num; $i++){
$title = mysql_result($q,$i,"title");
$author = mysql_result($q,$i,"author");
$abs = mysql_result($q,$i,"abstract");
$full = mysql_result($q,$i,"fulltext");
$smarty->append(array(
title => $title,
author => $author,
abstract => $abs,
fulltext => $full ));
}
$smarty->display("index.tpl");
?>
Как вы, скорее всего, заметили, программа получилась еще более громоздкой, чем в первых двух случаях, когда использовалась простая замена значений и
Итак, в этой лекции было рассказано о том, что такое
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.