File size: 5.44Kb
<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.block.functions.html" title="Блоковые функции">
<link rel="next" href="plugins.prefilters.postfilters.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.block.functions.html">Prev</a> </td>
<th width="60%" align="center">Chapter 16. Плагины - расширение функциональности Smarty</th>
<td width="20%" align="right"> <a accesskey="n" href="plugins.prefilters.postfilters.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.compiler.functions"></a>Функции компилятора</h2></div></div></div>
<p>
Функции компилятора, как вы наверное догадались, вызываются
только в процессе компиляции шаблона. Они могут быть полезными
для вставки кода PHP или чувствительного ко времени статического
контента в шаблон. Если одновременно зарегестрированы две
одноименные функции - пользовательская и компилятора, то приоритет
будет у функции компилятора.
</p>
<div class="funcsynopsis">
<table border="0" summary="Function synopsis" cellspacing="0" cellpadding="0" class="funcprototype-table">
<tr>
<td><code class="funcdef">mixed <b class="fsfunc">smarty_compiler_name</b>(</code></td>
<td>
<var class="pdparam">$tag_arg</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">$tag_arg</var></code>;<br><code>object <var class="pdparam">&$smarty</var></code>;</div>
<div class="funcprototype-spacer"> </div>
</div>
<p>
Функция компилятора имеет два параметра: строку аргументов тэга -
чаще всего это все, что следует от наименования функции до правого
разделителя, и объект Smarty. Функция должна возвращать PHP-код
для вствки в скомпилированный шаблон.
</p>
<p>
Смотрите также
<a class="link" href="api.register.compiler.function.html" title="register_compiler_function">register_compiler_function()</a>,
<a class="link" href="api.unregister.compiler.function.html" title="unregister_compiler_function">unregister_compiler_function()</a>.
</p>
<div class="example">
<a name="id2741171"></a><p class="title"><b>Example 16.6. Простой пример функции компилятора</b></p>
<div class="example-contents">
<pre class="programlisting">
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* Файл: compiler.tplheader.php
* Тип: compiler
* Имя: tplheader
* Назначение: вывести заголовок, содержащий имя исходного файла и
* время, когда он был скомпилирован.
* -------------------------------------------------------------
*/
function smarty_compiler_tplheader($tag_arg, &$smarty)
{
return "\necho '" . $smarty->_current_file . " compiled at " . date('Y-m-d H:M'). "';";
}
?>
</pre>
<p>
Эта функция может быть вызвана из шаблона следующим образом:
</p>
<pre class="programlisting">
{* Функция выполняется только при компиляции шаблона *}
{tplheader}
</pre>
<p>
Результирующий код PHP в скомпилированном шаблоне будет выглядеть примерно так:
</p>
<pre class="programlisting">
<?php
echo 'index.tpl compiled at 2002-02-20 20:02';
?>
</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.block.functions.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.prefilters.postfilters.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>