<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ресурсы</title>
<meta name="generator" content="DocBook XSL Stylesheets V1.75.1">
<link rel="home" href="index.html" title="Руководство по Smarty">
<link rel="up" href="plugins.html" title="Chapter 16. Плагины - расширение функциональности Smarty">
<link rel="prev" href="plugins.outputfilters.html" title="Фильтры вывода">
<link rel="next" href="plugins.inserts.html" title="Вставки">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">Ресурсы</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="plugins.outputfilters.html">Prev</a> </td>
<th width="60%" align="center">Chapter 16. Плагины - расширение функциональности Smarty</th>
<td width="20%" align="right"> <a accesskey="n" href="plugins.inserts.html">Next</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" title="Ресурсы">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="plugins.resources"></a>Ресурсы</h2></div></div></div>
<p>
Плагины ресурсов описывают источники данных, из которых берется исходный
код шаблона или компоненты PHP-скрипта для Smarty. Вот примеры ресурсов:
базы данных, LDAP, разделяемая память (shared memory), сокеты, и прочее.
</p>
<p>
Необходимо 4 функции для того, чтобы зарегестрировать
каждый тип ресурса. Каждая такая функция получает запрашиваемый ресурс в качестве
первого параметра и объект Smarty как последний параметр.
Остальные параметры зависят от функции.
</p>
<div class="funcsynopsis">
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_source</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&$source</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>string <var class="pdparam">&$source</var></code>;<br><code>object <var class="pdparam">&$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_timestamp</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&$timestamp</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>int <var class="pdparam">&$timestamp</var></code>;<br><code>object <var class="pdparam">&$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_secure</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>object <var class="pdparam">&$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">bool <b class="fsfunc">smarty_resource_name_trusted</b>(</code></td>
<td>
<var class="pdparam">$rsrc_name</var>, </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>
<var class="pdparam">&$smarty</var><code>)</code>;</td>
<td> </td>
</tr>
</table>
<div class="paramdef-list">
<code>string <var class="pdparam">$rsrc_name</var></code>;<br><code>object <var class="pdparam">&$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
</div>
<p>
Первая функция получает ресурс. Ее первый
параметр, это переменная, переданная по ссылке. В нее будет сохранен результат.
Функция вернет <code class="literal">true</code> если
сможет удачно получить ресурс и
<code class="literal">false</code> в ином случае.
</p>
<p>
Вторая функция получает время последней модификации
запрошенного ресурса (в виде UNIX timestamp). Второй параметр
представляет собой переменную, переданную по ссылке, в которой и будет сохранено время.
Функция вернет <code class="literal">true</code> если
timestamp будет определен в правильной форме, и <code class="literal">false</code>
в ином случае.
</p>
<p>
Третья функция возвращает <code class="literal">true</code> или
<code class="literal">false</code> в зависимости от того, является ли
запрашиваемый ресурс безопасным. Эта функция используется только для ресурсов шаблона, но
в любом случае должна быть определена.
</p>
<p>
Четвертая функция возвращает <code class="literal">true</code> или
<code class="literal">false</code> в зависимости от того, заслуживает ли запрашиваемый ресурс доверия
(is trusted) или нет. Эта функция используется только для компонентов PHP-скрипта,
запрошенных тэгом <span class="command"><strong>include_php</strong></span> или
<span class="command"><strong>insert</strong></span> с <em class="structfield"><code>src</code></em>
атрибутом. Тем не менее, она должна объявляться даже для ресурсов шаблона.
</p>
<p>
Смотрите также:
<a class="link" href="api.register.resource.html" title="register_resource">register_resource()</a>,
<a class="link" href="api.unregister.resource.html" title="unregister_resource">unregister_resource()</a>.
</p>
<div class="example">
<a name="id2743021"></a><p class="title"><b>Example 16.10. Плагин ресурса</b></p>
<div class="example-contents"><pre class="programlisting">
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* Файл: resource.db.php
* Тип: resource
* Имя: db
* Назначение: Получает шаблон из базы данных
* -------------------------------------------------------------
*/
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
{
// выполняем обращение к базе данных для получения шаблона
// и занесения полученного результата в в $tpl_source
$sql = new SQL;
$sql->query("select tpl_source
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_source = $sql->record['tpl_source'];
return true;
} else {
return false;
}
}
function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
// выполняем обращение к базе данных для присвоения значения $tpl_timestamp.
$sql = new SQL;
$sql->query("select tpl_timestamp
from my_table
where tpl_name='$tpl_name'");
if ($sql->num_rows) {
$tpl_timestamp = $sql->record['tpl_timestamp'];
return true;
} else {
return false;
}
}
function smarty_resource_db_secure($tpl_name, &$smarty)
{
// предполагаем, что шаблоны безопасны
return true;
}
function smarty_resource_db_trusted($tpl_name, &$smarty)
{
// не используется для шаблонов
}
?>
</pre></div>
</div>
<br class="example-break">
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="plugins.outputfilters.html">Prev</a> </td>
<td width="20%" align="center"><a accesskey="u" href="plugins.html">Up</a></td>
<td width="40%" align="right"> <a accesskey="n" href="plugins.inserts.html">Next</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">Фильтры вывода </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td>
<td width="40%" align="right" valign="top"> Вставки</td>
</tr>
</table>
</div>
</body>
</html>