2008-01-22 21:04:44 +00:00
|
|
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
2004-03-30 09:06:15 +00:00
|
|
|
|
<!-- $Revision$ -->
|
2008-05-25 15:06:11 +00:00
|
|
|
|
<!-- EN-Revision: 2598 Maintainer: freespace Status: ready -->
|
2004-03-30 09:06:15 +00:00
|
|
|
|
<chapter id="tips">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Советы</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para></para>
|
|
|
|
|
|
<sect1 id="tips.blank.var.handling">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Обработка пустых переменных</title>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Иногда, например, для того чтобы фон таблицы работал корректно,
|
|
|
|
|
|
необходимо вывести вместо пустого значения переменной, значение
|
|
|
|
|
|
по умолчанию, например <literal>&nbsp;</literal>.
|
|
|
|
|
|
Многие бы использовали конструкцию
|
|
|
|
|
|
<link linkend="language.function.if"><varname>{if}</varname></link>
|
|
|
|
|
|
в данной ситуации,
|
|
|
|
|
|
но в Smatry есть более короткий путь - используя модификатор переменной
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<link
|
|
|
|
|
|
linkend="language.modifier.default"><emphasis>default</emphasis></link>.
|
2008-01-22 21:04:44 +00:00
|
|
|
|
|
|
|
|
|
|
<note>
|
|
|
|
|
|
<para>
|
|
|
|
|
|
PHP выдаст ошибку <quote>Undefined variable</quote> в случае, если
|
|
|
|
|
|
<ulink url="&url.php-manual;error_reporting">
|
|
|
|
|
|
<varname>error_reporting()</varname></ulink> установлен в <constant>E_ALL</constant>
|
|
|
|
|
|
и переменная не была присвоена шаблону Smarty.
|
|
|
|
|
|
</para>
|
|
|
|
|
|
</note>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
</para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Вывод &nbsp;, если переменная пуста</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<![CDATA[
|
2008-01-22 21:04:44 +00:00
|
|
|
|
{* длинный путь *}
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{if $title eq ''}
|
2004-04-14 15:29:09 +00:00
|
|
|
|
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{else}
|
|
|
|
|
|
{$title}
|
|
|
|
|
|
{/if}
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-01-22 21:04:44 +00:00
|
|
|
|
{* короткий путь *}
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{$title|default:' '}
|
2004-04-14 15:29:09 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
См. также <link linkend="language.modifier.default">default</link> и
|
|
|
|
|
|
<link linkend="tips.default.var.handling">Обработка переменных по умолчанию</link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
|
|
<sect1 id="tips.default.var.handling">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Обработка переменных по умолчанию</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Если переменная встречается часто, то использование модификатора
|
|
|
|
|
|
<link linkend="language.modifier.default"><varname>default</varname></link>
|
|
|
|
|
|
каждый раз можно избежать, используя функцию
|
|
|
|
|
|
<link linkend="language.function.assign"><varname>{assign}</varname></link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Назначение переменной шаблона значения по умолчанию</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<![CDATA[
|
2008-01-22 21:04:44 +00:00
|
|
|
|
{* где-то в начале шаблона *}
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{assign var='title' value=$title|default:'no title'}
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2008-01-22 21:04:44 +00:00
|
|
|
|
{* если переменная $title была пустой, то сейчас она содержит "no title" *}
|
2004-04-14 15:29:09 +00:00
|
|
|
|
{$title}
|
|
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
См. также
|
|
|
|
|
|
<link linkend="language.modifier.default"><varname>default</varname></link> и
|
|
|
|
|
|
<link linkend="tips.blank.var.handling">Обработка пустых переменных</link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
|
|
<sect1 id="tips.passing.vars">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Присвоение переменной заголовка (title) шаблону-шапке</title>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Если большинство ваших шаблонов имеют похожие верхние и нижние
|
|
|
|
|
|
части, то имеет смысл вынести их в отдельные файлы и
|
|
|
|
|
|
<link linkend="language.function.include">подключать</link> их.
|
|
|
|
|
|
Но как быть, если шапка должна иметь различные заголовки на различных
|
|
|
|
|
|
страницах? Вы можете передавать текст заголовка шапке в качестве <link
|
|
|
|
|
|
linkend="language.syntax.attributes">атрибута</link> в момент её включения.
|
2004-04-14 15:29:09 +00:00
|
|
|
|
</para>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Присвоение переменной заголовка (title) шаблону-шапке</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<filename>mainpage.tpl</filename> - когда отображается главная страница,
|
|
|
|
|
|
заголовок <quote>Main Page</quote> передается в
|
|
|
|
|
|
<filename>header.tpl</filename>,
|
|
|
|
|
|
и будет в дальнейшем использован в качестве заголовка.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<programlisting>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<![CDATA[
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{include file='header.tpl' title='Main Page'}
|
2008-01-22 21:04:44 +00:00
|
|
|
|
{* тут находится тело шаблона *}
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{include file='footer.tpl'}
|
2005-08-28 16:51:15 +00:00
|
|
|
|
]]>
|
|
|
|
|
|
</programlisting>
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<filename>archives.tpl</filename> - когда отображается страница архива,
|
|
|
|
|
|
заголовок будет <quote>Archives</quote>.
|
|
|
|
|
|
Обратите внимание, что в этом примере мы
|
|
|
|
|
|
используем переменную из <filename>archives_page.conf</filename>, вместо
|
|
|
|
|
|
того, чтобы жестко прописать её в шаблоне.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<programlisting>
|
|
|
|
|
|
<![CDATA[
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{config_load file='archive_page.conf'}
|
2008-01-22 21:04:44 +00:00
|
|
|
|
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{include file='header.tpl' title=#archivePageTitle#}
|
2008-01-22 21:04:44 +00:00
|
|
|
|
{* тут находится тело шаблона *}
|
2006-03-24 14:45:37 +00:00
|
|
|
|
{include file='footer.tpl'}
|
2005-08-28 16:51:15 +00:00
|
|
|
|
]]>
|
|
|
|
|
|
</programlisting>
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<filename>header.tpl</filename> - Обратите внимание, что
|
|
|
|
|
|
<quote>Smarty News</quote> отображается тогда, когда $title не задан,
|
|
|
|
|
|
благодаря модификатору
|
|
|
|
|
|
<link linkend="language.modifier.default"><varname>default</varname></link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<programlisting>
|
|
|
|
|
|
<![CDATA[
|
|
|
|
|
|
<html>
|
|
|
|
|
|
<head>
|
2006-04-21 10:01:03 +00:00
|
|
|
|
<title>{$title|default:'Smarty News'}</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</head>
|
|
|
|
|
|
<body>
|
|
|
|
|
|
]]>
|
|
|
|
|
|
</programlisting>
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
|
|
|
|
|
<filename>footer.tpl</filename>
|
|
|
|
|
|
</para>
|
|
|
|
|
|
<programlisting>
|
|
|
|
|
|
<![CDATA[
|
|
|
|
|
|
</body>
|
|
|
|
|
|
</html>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
|
|
<sect1 id="tips.dates">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Даты</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Обычно даты в Smarty всегда передаются как
|
|
|
|
|
|
<ulink url="&url.php-manual;time">временные метки</ulink> (англ. timestamp),
|
|
|
|
|
|
что позволяет проектировщикам шаблонов использовать <link
|
|
|
|
|
|
linkend="language.modifier.date.format"><varname>date_format</varname></link>
|
|
|
|
|
|
для полного контроля над форматированием даты и также делает легким
|
|
|
|
|
|
сравнение дат там, где это необходимо.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<note>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Начиная с версии Smarty 1.4.0, вы можете передавать даты в Smarty в виде
|
|
|
|
|
|
меток времени Unix (unix timestamps), mysql, или в любом другом виде,
|
|
|
|
|
|
который понимает функция
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<ulink url="&url.php-manual;strtotime">strtotime()</ulink>.
|
|
|
|
|
|
</para>
|
|
|
|
|
|
</note>
|
|
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Использование date_format</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting>
|
2004-03-30 09:16:44 +00:00
|
|
|
|
<![CDATA[
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{$startDate|date_format}
|
2004-09-28 11:49:27 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Результат работы:
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<screen>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<![CDATA[
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Jan 4, 2009
|
2004-09-28 11:49:27 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</screen>
|
|
|
|
|
|
<programlisting>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<![CDATA[
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{$startDate|date_format:"%Y/%m/%d"}
|
2004-09-28 11:49:27 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Результат работы:
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<screen>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<![CDATA[
|
2008-01-22 21:04:44 +00:00
|
|
|
|
2009/01/04
|
2004-09-28 11:49:27 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</screen>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<para>
|
|
|
|
|
|
Даты можно ставнивать в шаблонах путем сравнения
|
|
|
|
|
|
меток времени следующим образом:
|
|
|
|
|
|
</para>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<![CDATA[
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{if $date1 < $date2}
|
2008-01-22 21:04:44 +00:00
|
|
|
|
... делаем что-то полезное ...
|
2004-03-30 09:16:44 +00:00
|
|
|
|
{/if}
|
2004-09-28 11:49:27 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Когда <link linkend="language.function.html.select.date">
|
|
|
|
|
|
<varname>{html_select_date}</varname></link>
|
|
|
|
|
|
используется в шаблоне, программист наверняка захочет преобразовать
|
|
|
|
|
|
данные из формы назад в формат временной метки. Вот функция, которая
|
|
|
|
|
|
поможет вам сделать это.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Преобразование элементов формы ввода даты назад к временной метке</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting role="php">
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<![CDATA[
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// Предполагается, что ваши элементы формы названы
|
2004-03-30 09:06:15 +00:00
|
|
|
|
// startDate_Day, startDate_Month, startDate_Year
|
|
|
|
|
|
|
2004-09-28 11:49:27 +00:00
|
|
|
|
$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2005-08-28 16:51:15 +00:00
|
|
|
|
function makeTimeStamp($year='', $month='', $day='')
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{
|
2004-09-28 11:49:27 +00:00
|
|
|
|
if(empty($year)) {
|
2008-01-22 21:04:44 +00:00
|
|
|
|
$year = strftime('%Y');
|
2004-09-28 11:49:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
if(empty($month)) {
|
2008-01-22 21:04:44 +00:00
|
|
|
|
$month = strftime('%m');
|
2004-09-28 11:49:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
if(empty($day)) {
|
2008-01-22 21:04:44 +00:00
|
|
|
|
$day = strftime('%d');
|
2004-09-28 11:49:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return mktime(0, 0, 0, $month, $day, $year);
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
См. также
|
|
|
|
|
|
<link linkend="language.function.html.select.date">
|
|
|
|
|
|
<varname>{html_select_date}</varname></link>,
|
|
|
|
|
|
<link linkend="language.function.html.select.time">
|
|
|
|
|
|
<varname>{html_select_time}</varname></link>,
|
|
|
|
|
|
<link linkend="language.modifier.date.format">
|
|
|
|
|
|
<varname>date_format</varname></link> и
|
|
|
|
|
|
<link linkend="language.variables.smarty.now">
|
|
|
|
|
|
<parameter>$smarty.now</parameter></link>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
|
|
<sect1 id="tips.wap">
|
|
|
|
|
|
<title>WAP/WML</title>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
WAP/WML шаблоны требуют, чтобы
|
|
|
|
|
|
<ulink url="&url.php-manual;header">заголовок Content-Type</ulink>
|
|
|
|
|
|
был передан вместе с шаблоном. Простейший путь - написать
|
|
|
|
|
|
пользовательскую функцию, которая будет выводить заголовки.
|
|
|
|
|
|
Если вы используете <link linkend="caching">кэширование</link>,
|
|
|
|
|
|
это не сработает, так что мы сделаем это с помощью тэга
|
|
|
|
|
|
<link linkend="language.function.insert"><varname>{insert}</varname></link>;
|
|
|
|
|
|
не забывайте, что тэги <varname>{insert}</varname> не кэшируются!
|
|
|
|
|
|
Убедитесь, что перед шаблоном в браузер ничего не выводится,
|
|
|
|
|
|
иначе отправить заголовок не получится.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Использование {insert} для отправки заголовка Content-Type для WML</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting role="php">
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<![CDATA[
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// убедитесь, что apache настроен на обработку расширений .wml!
|
|
|
|
|
|
// добавьте эту функцию в своё приложение или в Smarty.addons.php
|
2004-11-25 23:07:24 +00:00
|
|
|
|
function insert_header($params)
|
2004-09-28 11:49:27 +00:00
|
|
|
|
{
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// эта функция ожидает аргумент $content
|
2004-09-28 11:49:27 +00:00
|
|
|
|
if (empty($params['content'])) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
header($params['content']);
|
|
|
|
|
|
return;
|
2004-03-30 09:06:15 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2004-09-28 11:49:27 +00:00
|
|
|
|
?>
|
|
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
ваш шаблон Smarty <emphasis>должен</emphasis> начинаться с тэга insert:
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<programlisting>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<![CDATA[
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{insert name=header content="Content-Type: text/vnd.wap.wml"}
|
|
|
|
|
|
|
2004-11-25 23:07:24 +00:00
|
|
|
|
<?xml version="1.0"?>
|
|
|
|
|
|
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
2004-04-14 15:29:09 +00:00
|
|
|
|
|
2004-11-25 23:07:24 +00:00
|
|
|
|
<!-- begin new wml deck -->
|
|
|
|
|
|
<wml>
|
|
|
|
|
|
<!-- begin first card -->
|
|
|
|
|
|
<card>
|
|
|
|
|
|
<do type="accept">
|
|
|
|
|
|
<go href="#two"/>
|
|
|
|
|
|
</do>
|
|
|
|
|
|
<p>
|
|
|
|
|
|
Welcome to WAP with Smarty!
|
|
|
|
|
|
Press OK to continue...
|
|
|
|
|
|
</p>
|
|
|
|
|
|
</card>
|
|
|
|
|
|
<!-- begin second card -->
|
|
|
|
|
|
<card id="two">
|
|
|
|
|
|
<p>
|
|
|
|
|
|
Pretty easy isn't it?
|
|
|
|
|
|
</p>
|
|
|
|
|
|
</card>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
</wml>
|
|
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
|
|
<sect1 id="tips.componentized.templates">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Составные шаблоны</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
По традиции, программирование шаблонов в вашем приложении идёт следующим
|
|
|
|
|
|
путём: Сначала вы формируете переменные внутри вашего приложения PHP
|
|
|
|
|
|
(возможно, используя запросы к базе данных). Затем вы создаёте экземпляр
|
|
|
|
|
|
объекта Smarty,
|
|
|
|
|
|
<link linkend="api.assign">назначаете</link> переменные и
|
|
|
|
|
|
<link linkend="api.display">отображаете</link> шаблон.
|
|
|
|
|
|
Давайте представим себе такую ситуацию: К примеру, у нас есть котировщик
|
|
|
|
|
|
ценных бумаг в нашем шаблоне. Мы собираем данные о котировках ценных бумаг
|
|
|
|
|
|
в нашем приложении, затем передаём эти переменные в шаблон и отображаем
|
|
|
|
|
|
его. Правда, было бы здорово, если бы этот котировщик можно было перенести
|
|
|
|
|
|
в другое приложение, просто подключив к нему шаблон, не беспокоясь об
|
|
|
|
|
|
источнике данных.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Вы можете сделать это, написав собственное расширение для получения
|
|
|
|
|
|
данных и присваивания их переменной шаблона.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>составной шаблон</title>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<para>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<filename>function.load_ticker.php</filename> -
|
2008-01-22 21:04:44 +00:00
|
|
|
|
поместите файл в
|
|
|
|
|
|
<link linkend="variable.plugins.dir">
|
|
|
|
|
|
<parameter>директорию $plugins</parameter></link>
|
2004-09-28 11:49:27 +00:00
|
|
|
|
</para>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting role="php">
|
2004-03-30 09:35:30 +00:00
|
|
|
|
<![CDATA[
|
2004-09-28 11:49:27 +00:00
|
|
|
|
<?php
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// настраиваем нашу функцию для получения информации о ценных бумагах
|
2004-11-25 23:07:24 +00:00
|
|
|
|
function fetch_ticker($symbol)
|
2004-09-28 11:49:27 +00:00
|
|
|
|
{
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// здесь находится логика формирования $ticker_info
|
|
|
|
|
|
// из какого-то источника
|
2004-09-28 11:49:27 +00:00
|
|
|
|
return $ticker_info;
|
|
|
|
|
|
}
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2004-11-25 23:07:24 +00:00
|
|
|
|
function smarty_function_load_ticker($params, &$smarty)
|
2004-09-28 11:49:27 +00:00
|
|
|
|
{
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// вызываем функцию
|
2004-09-28 11:49:27 +00:00
|
|
|
|
$ticker_info = fetch_ticker($params['symbol']);
|
2004-11-25 23:07:24 +00:00
|
|
|
|
|
2008-01-22 21:04:44 +00:00
|
|
|
|
// присваиваем переменную шаблона
|
2004-09-28 11:49:27 +00:00
|
|
|
|
$smarty->assign($params['assign'], $ticker_info);
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|
|
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
<para>
|
|
|
|
|
|
<filename>index.tpl</filename>
|
|
|
|
|
|
</para>
|
|
|
|
|
|
<programlisting>
|
2004-03-30 09:35:30 +00:00
|
|
|
|
<![CDATA[
|
2006-04-21 10:01:03 +00:00
|
|
|
|
{load_ticker symbol='SMARTY' assign='ticker'}
|
2004-03-30 09:06:15 +00:00
|
|
|
|
|
2005-08-28 16:51:15 +00:00
|
|
|
|
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
|
2004-09-28 11:49:27 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
См. также
|
|
|
|
|
|
<link linkend="language.function.include.php">
|
|
|
|
|
|
<varname>{include_php}</varname></link>,
|
|
|
|
|
|
<link linkend="language.function.include">
|
|
|
|
|
|
<varname>{include}</varname></link> и
|
|
|
|
|
|
<link linkend="language.function.php"><varname>{php}</varname></link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
</sect1>
|
|
|
|
|
|
|
|
|
|
|
|
<sect1 id="tips.obfuscating.email">
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Сокрытие E-mail адреса</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Вы когда-нибудь удивлялись, как ваш e-mail адрес попадает в такое
|
|
|
|
|
|
количество спамерских рассылок? Один из способов сбора e-mail адресов
|
|
|
|
|
|
заключается в просмотре веб-страниц. Чтобы помочь предотвратить эту
|
|
|
|
|
|
проблему, вы можете сделать так, чотбы ваш e-mail адрес отображался
|
|
|
|
|
|
в скрытом за javascript'ом виде в HTML-исходниках, в то же время
|
|
|
|
|
|
выглядя и работая корректно в браузере. Это можно совершить при помощи
|
|
|
|
|
|
расширения <link linkend="language.function.mailto">
|
|
|
|
|
|
<varname>{mailto}</varname></link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
<example>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Пример сокрытия e-mail адреса в шаблоне</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<programlisting>
|
2004-04-14 15:29:09 +00:00
|
|
|
|
<![CDATA[
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Вопросы направляйте по адресу
|
2004-03-30 09:06:15 +00:00
|
|
|
|
{mailto address=$EmailAddress encode="javascript" subject="Hello"}
|
2004-04-14 15:29:09 +00:00
|
|
|
|
]]>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</programlisting>
|
|
|
|
|
|
</example>
|
|
|
|
|
|
<note>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
<title>Техническое Замечание</title>
|
2005-08-28 16:51:15 +00:00
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
Этот метод не может гарантировать 100% защиты.
|
|
|
|
|
|
Существует вероятность, что спамер запрограммирует свой
|
|
|
|
|
|
сборщик e-mail адресов на раскодирование этих значений,
|
|
|
|
|
|
но это маловероятно...
|
|
|
|
|
|
будем надеяться... пока что...
|
|
|
|
|
|
куда я там дел свой квантовый компьютер :-?.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
</note>
|
|
|
|
|
|
<para>
|
2008-01-22 21:04:44 +00:00
|
|
|
|
См. также модификатор
|
|
|
|
|
|
<link linkend="language.modifier.escape"><varname>escape</varname></link> и
|
|
|
|
|
|
<link linkend="language.function.mailto"><varname>{mailto}</varname></link>.
|
2005-08-28 16:51:15 +00:00
|
|
|
|
</para>
|
|
|
|
|
|
</sect1>
|
2004-03-30 09:06:15 +00:00
|
|
|
|
</chapter>
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
|
|
Local variables:
|
|
|
|
|
|
mode: sgml
|
|
|
|
|
|
sgml-omittag:t
|
|
|
|
|
|
sgml-shorttag:t
|
|
|
|
|
|
sgml-minimize-attributes:nil
|
|
|
|
|
|
sgml-always-quote-attributes:t
|
|
|
|
|
|
sgml-indent-step:1
|
|
|
|
|
|
sgml-indent-data:t
|
|
|
|
|
|
indent-tabs-mode:nil
|
|
|
|
|
|
sgml-parent-document:nil
|
|
|
|
|
|
sgml-default-dtd-file:"../../../../manual.ced"
|
|
|
|
|
|
sgml-exposed-tags:nil
|
|
|
|
|
|
sgml-local-catalogs:nil
|
|
|
|
|
|
sgml-local-ecat-files:nil
|
|
|
|
|
|
End:
|
|
|
|
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
|
|
|
|
vim: et tw=78 syn=sgml
|
|
|
|
|
|
vi: ts=1 sw=1
|
|
|
|
|
|
-->
|