mirror of
https://github.com/smarty-php/smarty.git
synced 2025-11-02 21:31:48 +01:00
430 lines
12 KiB
XML
430 lines
12 KiB
XML
<?xml version="1.0" encoding="windows-1251"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: 1.9 Maintainer: freespace Status: ready -->
|
|
<chapter id="tips">
|
|
<title>Ñîâåòû</title>
|
|
<para></para>
|
|
<sect1 id="tips.blank.var.handling">
|
|
<title>Îáðàáîòêà ïóñòûõ ïåðåìåííûõ</title>
|
|
<para>
|
|
Èíîãäà, íàïðèìåð, äëÿ òîãî ÷òîáû ôîí òàáëèöû ðàáîòàë êîððåêòíî,
|
|
íåîáõîäèìî âûâåñòè âìåñòî ïóñòîãî çíà÷åíèÿ ïåðåìåííîé, çíà÷åíèå
|
|
ïî óìîë÷àíèþ "&nbsp;". Ìíîãèå áû èñïîëüçîâàëè êîíñòðóêöèþ
|
|
<link linkend="language.function.if">{if}</link>,
|
|
íî â Smatry åñòü áîëåå êîðîòêèé ïóòü - èñïîëüçóÿ ìîäèôèêàòîð ïåðåìåííîé
|
|
<link
|
|
linkend="language.modifier.default"><emphasis>default</emphasis></link>.
|
|
</para>
|
|
<example>
|
|
<title>Âûâîä &nbsp;, åñëè ïåðåìåííàÿ ïóñòà</title>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{* äëèííûé ïóòü *}
|
|
|
|
{if $title eq ""}
|
|
|
|
{else}
|
|
{$title}
|
|
{/if}
|
|
|
|
|
|
{* êîðîòêèé ïóòü *}
|
|
|
|
{$title|default:" "}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Ñì. òàêæå <link linkend="language.modifier.default">default</link> è
|
|
<link linkend="tips.default.var.handling">Îáðàáîòêà ïåðåìåííûõ ïî óìîë÷àíèþ</link>.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="tips.default.var.handling">
|
|
<title>Îáðàáîòêà ïåðåìåííûõ ïî óìîë÷àíèþ</title>
|
|
<para>
|
|
Åñëè ïåðåìåííàÿ âñòðå÷àåòñÿ ÷àñòî, òî èñïîëüçîâàíèå ìîäèôèêàòîðà
|
|
default êàæäûé ðàç ìîæíî èçáåæàòü, èñïîëüçóÿ ôóíêöèþ
|
|
<link linkend="language.function.assign">{assign}</link>.
|
|
</para>
|
|
<example>
|
|
<title>Íàçíà÷åíèå ïåðåìåííîé øàáëîíà çíà÷åíèÿ ïî óìîë÷àíèþ</title>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{* ãäå-òî â íà÷àëå øàáëîíà *}
|
|
{assign var="title" value=$title|default:"no title"}
|
|
|
|
{* åñëè ïåðåìåííàÿ $title áûëà ïóñòîé, òî ñåé÷àñ îíà ñîäåðæèò "no title" *}
|
|
{$title}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Ñì. òàêæå <link linkend="language.modifier.default">default</link> è
|
|
<link linkend="tips.blank.var.handling">Îáðàáîòêà ïóñòûõ ïåðåìåííûõ</link>.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="tips.passing.vars">
|
|
<title>Ïðèñâîåíèå ïåðåìåííîé çàãîëîâêà (title) øàáëîíó-øàïêå</title>
|
|
<para>
|
|
Åñëè áîëüøèíñòâî âàøèõ øàáëîíîâ èìåþò ïîõîæèå âåðõíèå è íèæíèå
|
|
÷àñòè, òî èìååò ñìûñë âûíåñòè èõ â îòäåëüíûå ôàéëû. Íî êàê áûòü, åñëè
|
|
øàïêà äîëæíà èìåòü ðàçëè÷íûå çàãîëîâêè íà ðàçëè÷íûõ ñòðàíèöàõ?
|
|
Âû ìîæåòå ïåðåäàâàòü òåêñò çàãîëîâêà øàïêå â ìîìåíò å¸ âêëþ÷åíèÿ.
|
|
</para>
|
|
<example>
|
|
<title>Ïðèñâîåíèå ïåðåìåííîé çàãîëîâêà (title) øàáëîíó-øàïêå</title>
|
|
<para>
|
|
<filename>mainpage.tpl</filename>
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{include file="header.tpl" title="Main Page"}
|
|
{* òóò íàõîäèòñÿ òåëî øàáëîíà *}
|
|
{include file="footer.tpl"}
|
|
]]>
|
|
</programlisting>
|
|
|
|
<para>
|
|
<filename>archives.tpl</filename>
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{config_load file="archive_page.conf"}
|
|
{include file="header.tpl" title=#archivePageTitle#}
|
|
{* òóò íàõîäèòñÿ òåëî øàáëîíà *}
|
|
{include file="footer.tpl"}
|
|
]]>
|
|
</programlisting>
|
|
|
|
<para>
|
|
<filename>header.tpl</filename>
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
<html>
|
|
<head>
|
|
<title>{$title|default:"BC News"}</title>
|
|
</head>
|
|
<body>
|
|
]]>
|
|
</programlisting>
|
|
|
|
<para>
|
|
<filename>footer.tpl</filename>
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
</body>
|
|
</html>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
|
|
<para>
|
|
Ïðè îòîáðàæåíèè ãëàâíîé ñòðàíèö, ñòðîêà "Main Page" ïåðåäà¸òñÿ â
|
|
<filename>header.tpl</filename> è â ïîñëåäñòâèè èñïîëüçóåòñÿ êàê çàãîëîâîê.
|
|
Ïðè îòîáðàæåíèè ñòðàíèöû àðõèâà, çàãîëîâêîì áóäåò "Archives".
|
|
Îáðàòèòå âíèìàíèå, ÷òî â ïðèìåðå ñ àðõèâîì ìû èñïîëüçóåì ïåðåìåííóþ èç
|
|
ôàéëà <filename>archives_page.conf</filename>, âìåñòî òîãî, ÷òîáû æ¸ñòêî
|
|
çàäàòü å¸ â øàáëîíå. Òàêæå îáðàòèòå âíèìàíèå, ÷òî â ñëó÷àå, åñëè
|
|
ïåðåìåííàÿ $title íå çàäàíà, ïðè ïîìîùè ìîäèôèêàòîðà ïåðåìåííîé
|
|
<link linkend="language.modifier.default">default</link>
|
|
çàãîëîâêîì áóäåò "BC News".
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="tips.dates">
|
|
<title>Äàòû</title>
|
|
<para>
|
|
Îáû÷íî äàòû â Smarty âñåãäà ïåðåäàþòñÿ êàê âðåìåííûå ìåòêè, ÷òî
|
|
ïîçâîëÿåò ïðîåêòèðîâùèêàì øàáëîíîâ èñïîëüçîâàòü <link
|
|
linkend="language.modifier.date.format">date_format</link>
|
|
äëÿ ïîëíîãî êîíòðîëÿ íàä ôîðìàòèðîâàíèåì äàòû è òàêæå äåëàåò ëåãêèì
|
|
ñðàâíåíèå äàò òàì, ãäå ýòî íåîáõîäèìî.
|
|
</para>
|
|
<note>
|
|
<para>
|
|
Íà÷èíàÿ ñ âåðñèè Smarty 1.4.0, âû ìîæåòå ïåðåäàâàòü äàòû â Smarty â âèäå
|
|
ìåòîê âðåìåíè Unix (unix timestamps), mysql, èëè â ëþáîì äðóãîì âèäå,
|
|
êîòîðûé ïîíèìàåò ôóíêöèÿ
|
|
<ulink url="&url.php-manual;strtotime">strtotime()</ulink>.
|
|
</para>
|
|
</note>
|
|
<example>
|
|
<title>using date_format</title>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{$startDate|date_format}
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Ðåçóëüòàò ðàáîòû:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
Jan 4, 2001
|
|
]]>
|
|
</screen>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{$startDate|date_format:"%Y/%m/%d"}
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
Ðåçóëüòàò ðàáîòû:
|
|
</para>
|
|
<screen>
|
|
<![CDATA[
|
|
2001/01/04
|
|
]]>
|
|
</screen>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{if $date1 < $date2}
|
|
...
|
|
{/if}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Êîãäà <link
|
|
linkend="language.function.html.select.date">{html_select_date}</link>
|
|
èñïîëüçóåòñÿ â øàáëîíå, ïðîãðàììèñò íàâåðíÿêà çàõî÷åò ïðåîáðàçîâàòü
|
|
äàííûå èç ôîðìû íàçàä â ôîðìàò ìåòêè âðåìåíè. Âîò ôóíêöèÿ, êîòîðàÿ
|
|
ïîìîæåò âàì ñäåëàòü ýòî.
|
|
</para>
|
|
<example>
|
|
<title>Ïðåîáðàçîâàíèå ýëåìåíòîâ ôîðìû ââîäà äàòû íàçàä ê ìåòêå âðåìåíè</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
// Ïðåäïîëàãàåòñÿ, ÷òî âàøè ýëåìåíòû ôîðìû íàçâàíû
|
|
// startDate_Day, startDate_Month, startDate_Year
|
|
|
|
$startDate = makeTimeStamp($startDate_Year, $startDate_Month, $startDate_Day);
|
|
|
|
function makeTimeStamp($year='', $month='', $day='')
|
|
{
|
|
if(empty($year)) {
|
|
$year = strftime("%Y");
|
|
}
|
|
if(empty($month)) {
|
|
$month = strftime("%m");
|
|
}
|
|
if(empty($day)) {
|
|
$day = strftime("%d");
|
|
}
|
|
|
|
return mktime(0, 0, 0, $month, $day, $year);
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Ñì. òàêæå
|
|
<link linkend="language.function.html.select.date">{html_select_date}</link>,
|
|
<link linkend="language.function.html.select.time">{html_select_time}</link>,
|
|
<link linkend="language.modifier.date.format">date_format</link> è
|
|
<link linkend="language.variables.smarty.now">$smarty.now</link>
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="tips.wap">
|
|
<title>WAP/WML</title>
|
|
<para>
|
|
WAP/WML øàáëîíû òðåáóþò, ÷òîáû
|
|
<ulink url="&url.php-manual;header">çàãîëîâîê Content-type</ulink>
|
|
áûë ïåðåäàí âìåñòå ñ øàáëîíîì. Ïðîñòåéøèé ïóòü - íàïèñàòü
|
|
ïîëüçîâàòåëüñêóþ ôóíêöèþ, êîòîðàÿ áóäåò âûâîäèòü çàãîëîâêè.
|
|
Åñëè âû èñïîëüçóåòå <link linkend="caching">êýøèðîâàíèå</link>,
|
|
ýòî íå ñðàáîòàåò, òàê ÷òî ìû ñäåëàåì ýòî ñ ïîìîùüþ òýãà
|
|
<link linkend="language.function.insert">{insert}</link>;
|
|
íå çàáûâàéòå, ÷òî òýãè {insert} íå êýøèðóþòñÿ!
|
|
Óáåäèòåñü, ÷òî ïåðåä øàáëîíîì â áðàóçåð íè÷åãî íå âûâîäèòñÿ,
|
|
èíà÷å îòïðàâèòü çàãîëîâîê íå ïîëó÷èòñÿ.
|
|
</para>
|
|
<example>
|
|
<title>Èñïîëüçîâàíèå {insert} äëÿ çàïèñè çàãîëîâêà Content-Type äëÿ WML</title>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
// óáåäèòåñü, ÷òî apache íàñòðîåí íà îáðàáîòêó ðàñøèðåíèé .wml!
|
|
// äîáàâüòå ýòó ôóíêöèþ â ñâî¸ ïðèëîæåíèå èëè â Smarty.addons.php
|
|
function insert_header($params)
|
|
{
|
|
// ýòà ôóíêöèÿ îæèäàåò àðãóìåíò $content
|
|
if (empty($params['content'])) {
|
|
return;
|
|
}
|
|
header($params['content']);
|
|
return;
|
|
}
|
|
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
âàø øàáëîí Smarty <emphasis>äîëæåí</emphasis> íà÷èíàòüñÿ ñ òýãà insert:
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{insert name=header content="Content-Type: text/vnd.wap.wml"}
|
|
|
|
<?xml version="1.0"?>
|
|
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
|
|
|
|
<!-- 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>
|
|
</wml>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</sect1>
|
|
|
|
<sect1 id="tips.componentized.templates">
|
|
<title>Ñîñòàâíûå øàáëîíû</title>
|
|
<para>
|
|
Ïî òðàäèöèè, ïðîãðàììèðîâàíèå øàáëîíîâ â âàøåì ïðèëîæåíèè èä¸ò ñëåäóþùèì
|
|
ïóò¸ì: Ñíà÷àëà âû ôîðìèðóåòå ïåðåìåííûå âíóòðè âàøåãî ïðèëîæåíèÿ PHP
|
|
(âîçìîæíî, èñïîëüçóÿ çàïðîñû ê áàçå äàííûõ). Çàòåì âû ñîçäà¸òå ýêçåìïëÿð
|
|
îáúåêòà Smarty, íàçíà÷àåòå ïåðåìåííûå è îòîáðàæàåòå øàáëîí.
|
|
Äàâàéòå ïðåäñòàâèì ñåáå òàêóþ ñèòóàöèþ: Ê ïðèìåðó, ó íàñ åñòü êîòèðîâùèê
|
|
öåííûõ áóìàã â íàøåì øàáëîíå. Ìû ñîáèðàåì äàííûå î êîòèðîâêàõ öåííûõ áóìàã
|
|
â íàøåì ïðèëîæåíèè, çàòåì ïåðåäà¸ì ýòè ïåðåìåííûå â øàáëîí è îòîáðàæàåì
|
|
åãî. Ïðàâäà, áûëî áû çäîðîâî, åñëè áû ýòîò êîòèðîâùèê ìîæíî áûëî ïåðåíåñòè
|
|
â äðóãîå ïðèëîæåíèå, ïðîñòî ïîäêëþ÷èâ ê íåìó øàáëîí, íå áåñïîêîÿñü îá
|
|
èñòî÷íèêå äàííûõ.
|
|
</para>
|
|
<para>
|
|
Âû ìîæåòå ñäåëàòü ýòî, íàïèñàâ ñîáñòâåííîå ðàñøèðåíèå äëÿ ïîëó÷åíèÿ
|
|
äàííûõ è ïðèñâàèâàíèÿ èõ ïåðåìåííîé øàáëîíà.
|
|
</para>
|
|
<example>
|
|
<title>ñîñòàâíîé øàáëîí</title>
|
|
<para>
|
|
<filename>function.load_ticker.php</filename> -
|
|
ïîìåñòèòå ôàéë â
|
|
<link linkend="variable.plugins.dir">äèðåêòîðèþ $plugins</link>
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
|
|
// íàñòðàèâàåì íàøó ôóíêöèþ äëÿ ïîëó÷åíèÿ èíôîðìàöèè î öåííûõ áóìàãàõ
|
|
function fetch_ticker($symbol)
|
|
{
|
|
// çäåñü íàõîäèòñÿ ëîãèêà ôîðìèðîâàíèÿ $ticker_info
|
|
// èç êàêîãî-òî èñòî÷íèêà
|
|
return $ticker_info;
|
|
}
|
|
|
|
function smarty_function_load_ticker($params, &$smarty)
|
|
{
|
|
// âûçûâàåì ôóíêöèþ
|
|
$ticker_info = fetch_ticker($params['symbol']);
|
|
|
|
// ïðèñâàèâàåì ïåðåìåííóþ øàáëîíà
|
|
$smarty->assign($params['assign'], $ticker_info);
|
|
}
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
<filename>index.tpl</filename>
|
|
</para>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{load_ticker symbol="YHOO" assign="ticker"}
|
|
|
|
Stock Name: {$ticker.name} Stock Price: {$ticker.price}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<para>
|
|
Ñì. òàêæå
|
|
<link linkend="language.function.include.php">{include_php}</link>,
|
|
<link linkend="language.function.include">{include}</link> è
|
|
<link linkend="language.function.php">{php}</link>.
|
|
</para>
|
|
</sect1>
|
|
|
|
<sect1 id="tips.obfuscating.email">
|
|
<title>Ñîêðûòèå E-mail àäðåñà</title>
|
|
<para>
|
|
Âû êîãäà-íèáóäü óäèâëÿëèñü, êàê âàø e-mail àäðåñ ïîïàäàåò â òàêîå
|
|
êîëè÷åñòâî ñïàìåðñêèõ ðàññûëîê? Îäèí èç ñïîñîáîâ ñáîðà e-mail àäðåñîâ
|
|
çàêëþ÷àåòñÿ â ïðîñìîòðå âåá-ñòðàíèö. ×òîáû ïîìî÷ü ïðåäîòâðàòèòü ýòó
|
|
ïðîáëåìó, âû ìîæåòå ñäåëàòü òàê, ÷îòáû âàø e-mail àäðåñ îòîáðàæàëñÿ
|
|
â ñêðûòîì çà javascript'îì âèäå â HTML-èñõîäíèêàõ, â òî æå âðåìÿ
|
|
âûãëÿäÿ è ðàáîòàÿ êîððåêòíî â áðàóçåðå. Ýòî ìîæíî ñîâåðøèòü ïðè ïîìîùè
|
|
ðàñøèðåíèÿ <link linkend="language.function.mailto">{mailto}</link>.
|
|
</para>
|
|
<example>
|
|
<title>Ïðèìåð ñîêðûòèÿ e-mail àäðåñà</title>
|
|
<programlisting>
|
|
<![CDATA[
|
|
{* â index.tpl *}
|
|
|
|
Ïî âîïðîñàì îáðàùàéòåñü íà
|
|
{mailto address=$EmailAddress encode="javascript" subject="Hello"}
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
<note>
|
|
<title>Òåõíè÷åñêîå Çàìå÷àíèå</title>
|
|
<para>
|
|
Ýòîò ìåòîä íå ìîæåò ãàðàíòèðîâàòü 100% çàùèòû.
|
|
Ñóùåñòâóåò âåðîÿòíîñòü, ÷òî ñïàìåð çàïðîãðàììèðóåò ñâîé
|
|
ñáîðùèê e-mail àäðåñîâ íà ðàñêîäèðîâàíèå ýòèõ çíà÷åíèé,
|
|
íî ýòî ìàëîâåðîÿòíî... áóäåì íàäåÿòüñÿ.
|
|
</para>
|
|
</note>
|
|
<para>
|
|
Ñì. òàêæå
|
|
<link linkend="language.modifier.escape">escape</link> è
|
|
<link linkend="language.function.mailto">{mailto}</link>.
|
|
</para>
|
|
</sect1>
|
|
</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
|
|
-->
|