added Japanese translation files.

This commit is contained in:
takagi
2007-04-21 12:13:34 +00:00
parent 22428e98d0
commit d6d2da10f5
181 changed files with 19695 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.2 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="bugs">
<title>バグ</title>
<para>
Smarty の最新ディストリビューションに付属している
<filename>BUGS</filename> ファイルを読むか、web サイトをチェックしてください。
</para>
</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
-->

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="resources">
<title>リソース</title>
<para>Smarty のホームページは
<ulink url="&url.smarty;">&url.smarty;</ulink>
です。
</para>
<itemizedlist>
<listitem><para>
メーリングリストに参加するには、メールを
<literal>&ml.general.sub;</literal> に送信してください。
メーリングリストのアーカイブは <ulink url="&url.ml.archive;">ここ</ulink> で閲覧できます。
</para></listitem>
<listitem><para>
掲示板は <ulink url="&url.forums;">&url.forums;</ulink> です。
</para></listitem>
<listitem><para>
wiki の場所は <ulink url="&url.wiki;">&url.wiki;</ulink> です。
</para></listitem>
<listitem><para>
チャットに参加したい場合は <ulink url="&url.wiki;">irc.freenode.net#smarty</ulink> へ。
</para></listitem>
<listitem><para>
FAQ は <ulink url="&url.faq_1;">こちら</ulink><ulink url="&url.faq_2;">こちら</ulink>
にあります。
</para></listitem>
</itemizedlist>
</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
-->

453
docs/ja/appendixes/tips.xml Normal file
View File

@@ -0,0 +1,453 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="tips">
<title>ヒント &amp; 裏ワザ</title>
<para>
</para>
<sect1 id="tips.blank.var.handling">
<title>空白の変数の扱い</title>
<para>
テーブルの背景が適切に機能するように <literal>&amp;nbsp;</literal>
を出力する場合のように、空白の変数が何も出力しない代わりに
デフォルトの値を出力したい場合があるかもしれません。
そのために多くの人は
<link linkend="language.function.if"><varname>{if}</varname></link>
{if}ステートメントを使用すると思いますが、Smartyによる変数の修飾子
<link linkend="language.modifier.default"><varname>default</varname>
</link> を使った簡略な方法があります。
<note>
<para><quote>Undefined variable</quote> というエラーが表示されるのは、
PHP の <ulink url="&url.php-manual;error_reporting">
<varname>error_reporting()</varname></ulink><constant>E_ALL</constant>
になっており、変数が Smarty に代入されていない場合です。
</para>
</note>
</para>
<example>
<title>変数が空白の時、&amp;nbsp; を出力する</title>
<programlisting>
<![CDATA[
{* 長ったらしい方法 *}
{if $title eq ''}
&nbsp;
{else}
{$title}
{/if}
{* 簡潔な方法 *}
{$title|default:'&nbsp;'}
]]>
</programlisting>
</example>
<para>
<link linkend="language.modifier.default">
<varname>default</varname></link> 修飾子および
<link linkend="tips.default.var.handling">変数のデフォルトの扱い</link>
も参照してください。
</para>
</sect1>
<sect1 id="tips.default.var.handling">
<title>変数のデフォルトの扱い</title>
<para>
変数がテンプレートの至る所に頻繁に使われる場合、それが記述されるたびに変更子
<link linkend="language.modifier.default"><varname>default</varname>
</link> を用いると少し見苦しくなりがちです。この場合、
<link linkend="language.function.assign"><varname>{assign}</varname></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"><varname>default</varname></link>
修飾子および <link linkend="tips.blank.var.handling">空白の変数の扱い</link>
も参照してください。
</para>
</sect1>
<sect1 id="tips.passing.vars">
<title>ヘッダテンプレートにタイトルの変数を渡す</title>
<para>
テンプレートの大半が同じヘッダ及びフッタを使用する場合は、それらを単体のテンプレートに分割して
<link linkend="language.function.include">
<varname>{include}</varname></link> するのが普通です。
しかしどのページから呼び出されたかによって、
そのヘッダに異なるタイトルを持たせる必要があるとすればどうなるでしょうか?
インクルードされる際に、タイトルを
<link linkend="language.syntax.attributes">属性</link>
としてヘッダに渡す事ができます。
</para>
<example>
<title>ヘッダテンプレートにタイトルの変数を渡す</title>
<para>
<filename>mainpage.tpl</filename> - メインページを描画する際に、
<quote>Main Page</quote> というタイトルを
<filename>header.tpl</filename> に私、それをタイトルとして使用します。
</para>
<programlisting>
<![CDATA[
{include file='header.tpl' title='Main Page'}
{* ここにテンプレートの本体を記述します *}
{include file='footer.tpl'}
]]>
</programlisting>
<para>
<filename>archives.tpl</filename> - アーカイブページを描画する際には、
タイトルは <quote>Archives</quote> となります。
この例では、ハードコーディングされた変数ではなく
<filename>archives_page.conf</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> - <literal>$title</literal> 変数が設定されていない場合に、
<quote>Smarty News</quote> と表示します。これは
<link linkend="language.modifier.default"><varname>default</varname></link>
修飾子を使用して実現しています。
</para>
<programlisting>
<![CDATA[
<html>
<head>
<title>{$title|default:'Smarty News'}</title>
</head>
<body>
]]>
</programlisting>
<para>
<filename>footer.tpl</filename>
</para>
<programlisting>
<![CDATA[
</body>
</html>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.dates">
<title>日付</title>
<para>
経験上、Smarty に渡す日付は常に
<ulink url="&url.php-manual;time">タイムスタンプ型</ulink>
にしておくことをお勧めします。これにより、テンプレートデザイナーは
<link linkend="language.modifier.date.format"><varname>date_format</varname>
</link> 修飾子で日付の書式を自由にコントロールできるようになります。
また、必要なら日付の比較も簡単に行えます。
</para>
<example>
<title>date_format の使用</title>
<programlisting>
<![CDATA[
{$startDate|date_format}
]]>
</programlisting>
<para>
出力はこのようになります。
</para>
<screen>
<![CDATA[
Jan 4, 2009
]]>
</screen>
<programlisting>
<![CDATA[
{$startDate|date_format:"%Y/%m/%d"}
]]>
</programlisting>
<para>
出力はこのようになります。
</para>
<screen>
<![CDATA[
2009/01/04
]]>
</screen>
<para>
テンプレートで日付を比較するには、タイムスタンプを使用します。
</para>
<programlisting>
<![CDATA[
{if $order_date < $invoice_date}
...何かを行います
{/if}
]]>
</programlisting>
</example>
<para>
テンプレートで <link linkend="language.function.html.select.date">
<varname>{html_select_date}</varname></link> を使用する場合、
おそらくプログラマはフォームからの出力をタイムスタンプ型に変換したいでしょう。
それを行うのに役立つ関数を次に示します。
</para>
<example>
<title>フォームの日付要素をUNIXタイムスタンプ型に変換する</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">
<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>
も参照してください。
</para>
</sect1>
<sect1 id="tips.wap">
<title>WAP/WML</title>
<para>
WAP/WML テンプレートはテンプレートコンテンツに加え、php
によって <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>
タグはキャッシュされない事を覚えていて下さい)。
もしテンプレートの前にブラウザに何か出力されていると、
ヘッダの出力は失敗する可能性があります。
</para>
<example>
<title>WML Content-Type ヘッダを出力するために {insert} を使用する</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 テンプレートは、次のように 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">
<!-- 新しい wml のデッキ -->
<wml>
<!-- 最初のカード -->
<card>
<do type="accept">
<go href="#two"/>
</do>
<p>
Smarty 版の WAP へようこそ!
OK を押すと次に進みます……
</p>
</card>
<!-- 二枚目のカード -->
<card id="two">
<p>
どう?簡単でしょ?
</p>
</card>
</wml>
]]>
</programlisting>
</example>
</sect1>
<sect1 id="tips.componentized.templates">
<title>コンポーネント化したテンプレート</title>
<para>
習慣的に、アプリケーションにテンプレートをプログラミングする手順は次のように進みます。
はじめに php アプリケーションにおいて変数を蓄積します
(おそらくデータベースのクエリーによって)。それから Smarty
オブジェクトのインスタンスを作成して変数を割り当て
(<link linkend="api.assign"><varname>assign()</varname></link>)、
テンプレートを表示 (<link linkend="api.display"><varname>display()</varname></link>)
します。仮に株式相場表示を行うテンプレートがあったとしましょう。
これは php アプリケーションにより株式情報のデータを収集し、
テンプレートにこれらの変数を割り当てて表示します。
もし、前もってデータを取得する事を気にせずに、
テンプレートを単にインクルードする事で株式相場表示をアプリケーションに追加できれば良いと思いませんか?
</para>
<para>
これは、内容をフェッチし、テンプレート変数に割り当てるための
カスタムプラグインを書くことで実現できます
</para>
<example>
<title>コンポーネント化したテンプレート</title>
<para>
<filename>function.load_ticker.php</filename> -
このファイルを
<link linkend="variable.plugins.dir">
<parameter>プラグインのディレクトリ</parameter></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='SMARTY' assign='ticker'}
銘柄: {$ticker.name} 株価: {$ticker.price}
]]>
</programlisting>
</example>
<para>
<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>
も参照してください。
</para>
</sect1>
<sect1 id="tips.obfuscating.email">
<title>E-mail アドレスを混乱させる</title>
<para>
これまでに、あなたの E-mail アドレスが多数のスパムメーリングリストにどのように載るのか
不思議に思った事はありませんか?その一つの方法として、スパム発信者は web ページ上の
E-mail アドレスを収集しています。この問題に対抗するために、E-mail アドレスが HTML
ソース内では混乱した JavaScript に見えるがブラウザでは正しく表示されるという方法が使えます。
これは <link linkend="language.function.mailto"><varname>{mailto}</varname></link>
プラグインによって行われます。
</para>
<example>
<title>E-mail アドレスを混乱させる例</title>
<programlisting>
<![CDATA[
<div id="contact">
{mailto address=$EmailAddress encode='javascript' subject='Hello'} に問い合わせを送る
</div>
]]>
</programlisting>
</example>
<note>
<title>テクニカルノート</title>
<para>
この方法は 100% 確実という訳ではありません。
もしかしたらスパム発信者はこれらの値を解読するためのコードを書くかもしれません。
ですがそれはまず有り得ないでしょう……
おそらく……
今のところは……
量子コンピュータってどうなったんでしょう :-?
</para>
</note>
<para>
<link linkend="language.modifier.escape"><varname>escape</varname></link>
修飾子および
<link linkend="language.function.mailto"><varname>{mailto}</varname></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
-->

View File

@@ -0,0 +1,200 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="troubleshooting">
<title>トラブルシューティング</title>
<para></para>
<sect1 id="smarty.php.errors">
<title>Smarty/PHP エラー</title>
<para>
Smarty は、タグの属性が不足していたり、誤った変数名を指定していた時など、
多くのエラーをキャッチする事ができます。
キャッチすると次の例のようなエラーが表示されます。
</para>
<example>
<title>Smarty エラー</title>
<screen>
<![CDATA[
Warning: Smarty: [in index.tpl line 4]: syntax error: unknown tag - '%blah'
in /path/to/smarty/Smarty.class.php on line 1041
Fatal error: Smarty: [in index.tpl line 28]: syntax error: missing section name
in /path/to/smarty/Smarty.class.php on line 1041
]]>
</screen>
</example>
<para>
Smarty はテンプレート名・エラー行番号・エラー内容を示します。
その次のエラーは、Smarty クラスにおいてエラーが発生した実際の行番号から成るメッセージです。
</para>
<para>
タグの閉じ忘れのような、Smarty がキャッチできないエラーがあります。
通常、このような場合のエラーは PHP コンパイル時にパースエラーで終了します。
</para>
<example>
<title>PHP パースエラー</title>
<screen>
<![CDATA[
Parse error: parse error in /path/to/smarty/templates_c/index.tpl.php on line 75
]]>
</screen>
</example>
<para>
PHP パースエラーの場合のエラー行番号は、
テンプレートそのものではなくコンパイルされた PHP スクリプトに一致します。
通常、テンプレートを見ることで構文エラーを見つけられます。
一般的な間違いとしては、
<link linkend="language.function.if"><varname>{if}{/if}</varname></link>
<link linkend="language.function.if"><varname>{section}{/section}</varname>
</link> タグの閉じ忘れ、<varname>{if}</varname>
タグ内のロジックの構文の誤りなどがあります。もしエラーが見つけられない場合は、
テンプレートのどこに該当するエラーがあるかを見い出すために、
コンパイルされた PHP ファイルを開いて行番号のあたりを調べる必要があります。
</para>
<example>
<title>その他共通のエラー</title>
<screen>
<![CDATA[
Warning: Smarty error: unable to read resource: "index.tpl" in...
or
Warning: Smarty error: unable to read resource: "site.conf" in...
]]>
</screen>
<para>
<itemizedlist>
<listitem>
<para>
<link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link>
が存在しない不正なディレクトリか、もしくは存在しても
<filename>index.tpl</filename>
<filename class="directory">templates/</filename>
ディレクトリ内にありません。
</para>
</listitem>
<listitem>
<para>
<link linkend="language.function.config.load">
<varname>{config_load}</varname></link>
関数がテンプレート内にあり (もしくは
<link linkend="api.config.load"><varname>config_load()</varname></link>
で呼び出されており)、その際の
<link linkend="variable.config.dir"><parameter>$config_dir</parameter>
</link> が存在しない不正なディレクトリか、もしくは存在しても
<filename>site.conf</filename> がそのディレクトリ内にありません。
</para>
</listitem>
</itemizedlist>
</para>
<screen>
<![CDATA[
Fatal error: Smarty error: the $compile_dir 'templates_c' does not exist,
or is not a directory...
]]>
</screen>
<itemizedlist>
<listitem>
<para>
<link linkend="variable.compile.dir">
<parameter>$compile_dir</parameter></link>
に不正な値が入っており、そのようなディレクトリが存在しないか、もしくは
<filename>templates_c</filename> の指定がディレクトリではなくファイルです。
</para>
</listitem>
</itemizedlist>
<screen>
<![CDATA[
Fatal error: Smarty error: unable to write to $compile_dir '....
]]>
</screen>
<itemizedlist>
<listitem>
<para>
<link linkend="variable.compile.dir">
<parameter>$compile_dir</parameter></link> に Web サーバによる書き込み権限がありません。
<link linkend="installing.smarty.basic">Smarty のインストール</link>
のページ下部のパーミッションの項を参照してください。
</para>
</listitem>
</itemizedlist>
<screen>
<![CDATA[
Fatal error: Smarty error: the $cache_dir 'cache' does not exist,
or is not a directory. in /..
]]>
</screen>
<itemizedlist>
<listitem>
<para>
<link linkend="variable.caching">
<parameter>$caching</parameter></link> が有効であるにも関わらず、
<link linkend="variable.cache.dir"><parameter>$cache_dir</parameter></link>
が存在しない不正なディレクトリか、もしくは存在しても
<filename>cache/</filename> がディレクトリではなくファイルである、という意味です。
</para>
</listitem>
</itemizedlist>
<screen>
<![CDATA[
Fatal error: Smarty error: unable to write to $cache_dir '/...
]]>
</screen>
<itemizedlist>
<listitem>
<para>
<link linkend="variable.caching"><parameter>$caching</parameter></link>
が有効であるにも関わらず、<link linkend="variable.cache.dir">
<parameter>$cache_dir</parameter></link>
に Web サーバによる書き込み権限がない、という意味です。
<link linkend="installing.smarty.basic">Smarty のインストール</link>
のページ下部のパーミッションの項を参照してください。
</para>
</listitem>
</itemizedlist>
</example>
<para>
<link linkend="chapter.debugging.console">デバッグ</link>
<link linkend="variable.error.reporting">
<parameter>$error_reporting</parameter></link>
および
<link linkend="api.trigger.error"><varname>trigger_error()</varname></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
-->

57
docs/ja/bookinfo.xml Normal file
View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<bookinfo id="bookinfo">
<title>Smarty - コンパイリング PHP テンプレートエンジン</title>
<authorgroup id="authors">
<author>
<firstname>Monte</firstname>
<surname>Ohrt &lt;monte at ohrt dot com&gt;</surname>
</author>
<author>
<firstname>Andrei</firstname>
<surname>Zmievski &lt;andrei@php.net&gt;</surname>
</author>
</authorgroup>
<authorgroup id="translators">
<author>
<firstname>Shinsuke</firstname><surname>Matsuda &lt;mat-sh at fj9 dot so-net dot ne dot jp&gt;</surname>
</author>
<author>
<firstname>Daichi</firstname><surname>Kamemoto &lt;daichi at asial dot co dot jp&gt;</surname>
</author>
<author>
<firstname>Joe</firstname><surname>Morikawa &lt;joe at asial dot co dot jp&gt;</surname>
</author>
<author>
<firstname>Masahiro</firstname><surname>Takagi &lt;takagi@php.net&gt;</surname>
</author>
</authorgroup>
<pubdate>&build-date;</pubdate>
<copyright>
<year>2001-2005</year>
<holder>New Digital Group, Inc.</holder>
</copyright>
</bookinfo>
<!-- 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
-->

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="chapter.debugging.console">
<title>デバッギングコンソール</title>
<para>
Smarty にはデバッギングコンソールが用意されています。
このコンソールは、
<link linkend="language.function.include">インクルード</link>
された全てのテンプレートについての情報と、現在実行中のテンプレートに
<link linkend="api.assign">割り当てられた</link> 変数及び
<link linkend="language.config.variables">設定</link>
ファイルの変数の値を表示します。Smarty の配布ファイル群に含まれているテンプレート
<literal>debug.tpl</literal> が、コンソールを表示するためのものです。
</para>
<para>
<literal>debug.tpl</literal> (デフォルトでは <link linkend="constant.smarty.dir">
<constant>SMARTY_DIR</constant></link> 内にあります) に
<link linkend="variable.debug.tpl">
<parameter>$debug_tpl</parameter></link> のテンプレートリソースのパスを示す必要がある場合は、
Smarty で
<link linkend="variable.debugging"><parameter>$debugging</parameter></link>
&true; に設定します。
ページを読み込む時に Javascript による新たなコンソールウィンドウが現れ、
現在のページにおける、インクルードされたすべてのテンプレートの名前と
定義されている変数の値を表示します。</para>
<para>特定のテンプレートに有効な変数を調べる場合は、テンプレート関数
<link linkend="language.function.debug">
<varname>{debug}</varname></link> を参照してください。
デバッギングコンソールを無効にするには
<link linkend="variable.debugging"><parameter>$debugging</parameter></link>
&false; に設定します。また、一時的にデバッギングコンソールを有効にするには、
<link linkend="variable.debugging.ctrl"><parameter>$debugging_ctrl</parameter>
で URL の中に <literal>SMARTY_DEBUG</literal> を含めます。
</link>.
</para>
<note>
<title>テクニカルノート</title>
<para>
<link linkend="api.fetch"><varname>fetch()</varname></link>
API を使用している場合はデバッギングコンソールは動作せず、
<link linkend="api.display">
<varname>display()</varname></link> の場合のみ使用できます。
このコンソールは、生成されたテンプレートの終端に追加される
Javascript の集合です。Javascript がお好みでないなら、
希望の出力になるように <literal>debug.tpl</literal>
を修正してください。デバッグ情報はキャッシュされず、
デバッギングコンソールの出力には <literal>debug.tpl</literal>
自体の情報は含まれません。
</para>
</note>
<note>
<para>
各テンプレートと設定ファイルの読み込みにかかる時間は、ほんの数秒です。
</para>
</note>
<para>
<link linkend="troubleshooting">トラブルシューティング</link>
<link linkend="variable.error.reporting">
<parameter>$error_reporting</parameter></link>
および
<link linkend="api.trigger.error"><varname>trigger_error()</varname></link>
も参照してください。
</para>
</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
-->

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="config.files">
<title>設定ファイル</title>
<para>
設定ファイルは、1つのファイルからグローバルなテンプレート変数を管理する方法として、
デザイナーにとって有用です。1つの例としては、テンプレートの色の指定を行う場合です。
通常、アプリケーションの配色を変更するには全てのテンプレートファイルを調べ、
該当する箇所の色の指定を変更する必要があります。
設定ファイルを使うと色の指定を一箇所で管理できるので、
更新する必要があるファイルは1つだけになります。
</para>
<example>
<title>設定ファイルの記述例</title>
<programlisting>
<![CDATA[
# グローバル変数
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
[Customer]
pageTitle = "Customer Info"
[Login]
pageTitle = "Login"
focus = "username"
Intro = """This is a value that spans more
than one line. you must enclose
it in triple quotes."""
# 隠されたセクション
[.Database]
host=my.example.com
db=ADDRESSBOOK
user=php-user
pass=foobar
]]>
</programlisting>
</example>
<para>
<link linkend="language.config.variables">設定ファイルの値</link>
はクォートで囲む事が出来ます(必須ではありません)。
シングルクォートとダブルクォートのどちらでも使用できます。
複数行にまたがる値を持つ場合は、値全体をトリプルクォート(""")
で囲みます。設定ファイルの中にコメントを記述するには、
行の初めに <literal>#</literal> (ハッシュ) を使う事を推奨します。
</para>
<para>
上記の設定ファイルの例は2つのセクションを持っています。
セクション名はブラケット[]に囲まれ、<literal>[</literal>
もしくは <literal>]</literal> を含まない任意の文字列を指定できます。
先頭の4つの変数は、グローバル変数 (あるいはセクションに含まれない変数)
です。これらの変数は常に設定ファイルから読み込まれます。
特定のセクションが読み込まれた場合は、
グローバル変数に加えてそのセクションからの変数が読み込まれます。
グローバル変数とセクション内に同じ変数が存在する場合はセクション内の変数が使用されます。
1つのセクション内に同名の2つの変数を指定した場合は、
<link linkend="variable.config.overwrite">
<parameter>$config_overwrite</parameter></link>
が無効でない限りは後で指定されたものが使用されます。
</para>
<para>
設定ファイルの読み込みは、組み込みのテンプレート関数
<link linkend="language.function.config.load"><varname>
{config_load}</varname></link> あるいは API 関数 <link
linkend="api.config.load"><varname>config_load()</varname></link>
によって行います。
</para>
<para>
<literal>[.hidden]</literal> のように変数名又はセクション名の先頭にピリオドをつける事によって、
変数又は全体のセクションを隠蔽する事ができます。
アプリケーションからは使用されるがテンプレートエンジンからは使用されないような重要なデータ
(DB接続に関する情報など) を取得する際に有用です。
テンプレートを編集をするサードパーティが存在する場合、
重要なデータを含んだ設定ファイルをテンプレート内に読み込む事によって盗み読まれる危険性を回避できます。
</para>
<para>
<link linkend="language.function.config.load"><varname>{config_load}</varname></link>
<link linkend="variable.config.overwrite"><parameter>$config_overwrite</parameter></link>
<link linkend="api.get.config.vars"><varname>get_config_vars()</varname></link>
<link linkend="api.clear.config"><varname>clear_config()</varname></link>
および
<link linkend="api.config.load"><varname>config_load()</varname></link>
も参照してください。
</para>
</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
-->

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="language.basic.syntax">
<title>基本構文</title>
<para>
全てのテンプレートタグはデリミタによって囲まれます。
デフォルトではデリミタは <literal>{</literal><literal>}</literal>
ですが、これは <link linkend="variable.left.delimiter">変更可能</link> です。
</para>
<para>
このマニュアルで挙げる例ではデフォルトのデリミタを利用しています。
Smarty では、デリミタ外の内容は静的コンテンツとして表示されます。
Smarty がテンプレ ートタグを見つけると、その解釈を試みて適切な出力に置換します。
</para>
&designers.language-basic-syntax.language-syntax-comments;
&designers.language-basic-syntax.language-syntax-variables;
&designers.language-basic-syntax.language-syntax-functions;
&designers.language-basic-syntax.language-syntax-attributes;
&designers.language-basic-syntax.language-syntax-quotes;
&designers.language-basic-syntax.language-math;
&designers.language-basic-syntax.language-escaping;
</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
-->

View File

@@ -0,0 +1,92 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.escaping">
<title>Smarty の構文解析を回避する</title>
<para>
時々、Smarty の構文解析の対象にしたくないと望む、
もしくはそうする必要がある部分があります。 典型的な例としては、
テンプレートに Javascript や CSS コードが含まれるときです。
それらの言語が Smarty のデフォルトの
<link linkend="language.function.ldelim">デリミタ</link>
である { と } を使用するときに問題が発生します。
</para>
<para>
もっとも単純な解決方法は、Javascript と CSS コードをそれぞれファイルに切り分け、
それらにアクセスするために標準的な HTML の機能を使用する事で状況を回避する事です。
</para>
<para>
リテラルコンテンツを含めるには <link
linkend="language.function.literal">
<varname>{literal}..{/literal}</varname></link> ブロックを使用します。
HTML エンティティの使用法と同様に、 <link
linkend="language.function.ldelim"><varname>{ldelim}</varname></link><link
linkend="language.function.ldelim"><varname>{rdelim}</varname></link> あるいは <link
linkend="language.variables.smarty.ldelim">
<varname>{$smarty.ldelim}</varname></link> を使用して現在のデリミタを表示することができます。
</para>
<para>
単純に Smarty の <link
linkend="variable.left.delimiter">
<parameter>$left_delimiter</parameter></link> および
<link linkend="variable.right.delimiter">
<parameter>$right_delimiter</parameter></link>
を変更するだけでも便利になることが多々あります。
</para>
<example>
<title>デリミタを変更する例</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->assign('name', 'Albert');
$smarty->display('example.tpl');
?>
]]>
</programlisting>
<para>
テンプレートはこのようになります。
</para>
<programlisting>
<![CDATA[
Welcome <!--{$name}--> to Smarty
<script language="javascript">
var foo = <!--{$foo}-->;
function dosomething() {
alert("foo is " + foo);
}
dosomething();
</script>
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.math">
<title>演算子</title>
<para>
演算子は、変数の値に直接適用されます。
</para>
<example>
<title>演算子の例</title>
<programlisting>
<![CDATA[
{$foo+1}
{$foo*$bar}
{* もう少し複雑な例 *}
{$foo->bar-$bar[1]*$baz->foo->bar()-3*7}
{if ($foo+$bar.test%$baz*134232+10+$b+10)}
{$foo|truncate:"`$fooTruncCount/$barTruncFactor-1`"}
{assign var="foo" value="`$foo+$bar`"}
]]>
</programlisting>
</example>
<para>
複雑な数式については <link linkend="language.function.math">
<varname>{math}</varname></link> 関数、そして
<link linkend="language.function.eval"><varname>{eval}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.syntax.attributes">
<title>属性</title>
<para>
ほとんどの <link linkend="language.syntax.functions">関数</link> には、
それらの動作を指定したり修正するための属性があります。Smarty 関数の属性は
HTML の属性にかなり近いものです。静的な値はクォートで囲む必要はありませんが、
リテラル文字列であるべきです。変数を使う場合はクォートで囲んではいけません。
</para>
<para>
いくつかの属性は、boolean 値 (&true; あるいは &false;) を必要とします。
これらの値は、クォートなしの <literal>true</literal>
<literal>on</literal><literal>yes</literal> あるいは
<literal>false</literal><literal>off</literal>
<literal>no</literal> を指定する事が出来ます。
</para>
<example>
<title>関数の属性の構文</title>
<programlisting>
<![CDATA[
{include file='header.tpl'}
{include file='header.tpl' attrib_name='attrib value'}
{include file=$includeFile}
{include file=#includeFile# title='イケてる Smarty'}
{html_select_date display_days=yes}
{mailto address='smarty@example.com'}
<select name='company_id'>
{html_options options=$companies selected=$company_id}
</select>
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.14 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.syntax.comments">
<title>コメント</title>
<para>
テンプレートのコメントはまずアスタリスクで囲まれ、次にそれを
<link linkend="variable.left.delimiter">デリミタ</link>
タグで囲みます。このような形式になります。
</para>
<informalexample>
<programlisting>
<![CDATA[
{* これはコメントです *}
]]>
</programlisting>
</informalexample>
<para>
Smarty のコメントは、テンプレートの最終的な出力には表示されません。この点は
<literal>&lt;!-- HTML のコメント --&gt;</literal> とは異なります。
これは、テンプレート内での内部的なメモとして使用するのに便利です。
誰にもバレません ;-)
</para>
<example>
<title>テンプレート内のコメント</title>
<programlisting>
<![CDATA[
{* これは Smarty コメントです。コンパイルされた結果には登場しません。 *}
<html>
<head>
<title>{$title}</title>
</head>
<body>
{* 別の Smarty コメント *}
<!-- HTML コメント。これはブラウザに送信されます -->
{* この、複数行の
Smarty コメントは
ブラウザへは送信されません
*}
{*********************************************************
クレジットブロックを含む複数行のコメント
@ author: bg@example.com
@ maintainer: support@example.com
@ para: var that sets block style
@ css: the style output
**********************************************************}
{* メインロゴなどを含むヘッダファイル *}
{include file='header.tpl'}
{* 開発メモ: 変数 $includeFile の値は foo.php で設定されています *}
<!-- 本体コンテンツブロックを表示します -->
{include file=$includeFile}
{* この <select> ブロックは余分 *}
{*
<select name="company">
{html_options options=$vals selected=$selected_id}
</select>
*}
<!-- アフィリエイトのヘッダは無効にします -->
{* $affiliate|upper *}
{* コメントを入れ子にすることはできません *}
{*
<select name="company">
{* <option value="0">-- none -- </option> *}
{html_options options=$vals selected=$selected_id}
</select>
*}
{* テンプレート用の cvs タグ。以下の 36 はアメリカの通貨記号ですが、
. cvs がこれを変換してしまいます…… *}
{* &#36;Id: Exp &#36; *}
{* $Id: *}
</body>
</html>
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.syntax.functions">
<title>関数</title>
<para>
すべての Smarty タグは、
<link linkend="language.variables">変数</link>
を出力するか何らかの関数を呼び出す動作をします。
関数は、
<literal>{funcname attr1='val1' attr2='val2'}</literal>
のように関数名とその
<link linkend="language.syntax.attributes">属性</link>
をデリミタで囲みます。
</para>
<example>
<title>関数の構文</title>
<programlisting>
<![CDATA[
{config_load file='colors.conf'}
{include file='header.tpl'}
{insert file='banner_ads.tpl' title='イケてる Smarty'}
{if $logged_in}
ようこそ、<font color="{#fontColor#}">{$name}!</font>
{else}
やぁ、{$name}
{/if}
{include file='footer.tpl' ad=$random_id}
]]>
</programlisting>
</example>
<itemizedlist>
<listitem><para>
<link linkend="language.builtin.functions">組み込み関数</link>
<link linkend="language.custom.functions">カスタム関数</link>
は、テンプレート内では同じ構文です。
</para></listitem>
<listitem><para>組み込み関数とは Smarty の
<emphasis role="bold">内部で</emphasis> 動作する関数で、たとえば
<link linkend="language.function.if"><varname>{if}</varname></link>
<link linkend="language.function.section"><varname>{section}</varname></link> および
<link linkend="language.function.strip"><varname>{strip}</varname></link>
などのことです。これらを変更したり修正したりすることはありません。
</para></listitem>
<listitem><para>カスタム関数は
<emphasis role="bold">追加の</emphasis> 関数で、
<link linkend="plugins">プラグイン</link> で実装します。
これらは自由に修正したり、新たな関数を追加したりする事が可能です。
<link linkend="language.function.html.options">
<varname>{html_options}</varname></link>
<link linkend="language.function.popup"><varname>{popup}</varname></link>
などがカスタム関数の例です。
</para></listitem>
</itemizedlist>
<para>
<link linkend="api.register.function"><varname>register_function()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.syntax.quotes">
<title>ダブルクォート内に埋め込まれた変数</title>
<itemizedlist>
<listitem>
<para>
Smarty が "ダブルクォート" で囲まれた内容の中から <link
linkend="api.assign">割り当てられた</link>
<link linkend="language.syntax.variables">変数</link>
として認識するのは、変数名が数字・文字・_アンダースコア・[](ブラケット)
のみで構成されているもののみです。詳細は
<ulink url="&url.php-manual;language.variables">名前の付けかた</ulink>
を参照ください。
</para></listitem>
<listitem><para>
その他の文字、たとえば .(ピリオド)や
<literal>$object>reference</literal>(オブジェクト参照)を含む場合は、
その変数を <literal>`バッククォート`</literal> で囲む必要があります。
</para></listitem>
<listitem><para>
<link linkend="language.modifiers">修飾子</link> を埋め込むことはできず、
常にクォートの外で適用する必要があります。
</para></listitem>
</itemizedlist>
<example>
<title>構文の例</title>
<programlisting>
<![CDATA[
{func var="test $foo test"} <-- $foo を参照します
{func var="test $foo_bar test"} <-- $foo_bar を参照します
{func var="test $foo[0] test"} <-- $foo[0] を参照します
{func var="test $foo[bar] test"} <-- $foo[bar] を参照します
{func var="test $foo.bar test"} <-- $foo (not $foo.bar) を参照します
{func var="test `$foo.bar` test"} <-- $foo.bar を参照します
{func var="test `$foo.bar` test"|escape} <-- 修飾子はクォートの外で!
]]>
</programlisting>
</example>
<example>
<title>実用例</title>
<programlisting>
<![CDATA[
{* $tpl_name を値で置き換えます *}
{include file="subdir/$tpl_name.tpl"}
{* $tpl_name を置き換えません *}
{include file='subdir/$tpl_name.tpl'} <--
{* . を含むのでバッククォートで囲む必要があります *}
{cycle values="one,two,`$smarty.config.myval`"}
{* php スクリプトでの $module['contact'].'.tpl' と同じです
{include file="`$module.contact`.tpl"}
{* php スクリプトでの $module[$view].'.tpl' と同じです
{include file="$module.$view.tpl"}
]]>
</programlisting>
</example>
<para>
<link linkend="language.modifier.escape"><varname>escape</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.15 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.syntax.variables">
<title>変数</title>
<para>
テンプレート変数は、先頭にドル記号 $ を付けます。変数名には
<ulink url="&url.php-manual;language.variables">PHP の変数</ulink>
と同様に英数字およびアンダースコアが使用できます。
配列の参照には、インデックスの数値もしくはそれ以外の文字を使用できます。
オブジェクトのプロパティとメソッドの参照も同様です。</para>
<para>
<link linkend="language.config.variables">Config ファイルの変数</link>
にはドル記号を付けず、参照する際にはハッシュマーク # で囲むか、
<link linkend="language.variables.smarty.config">
<parameter>$smarty.config</parameter></link>
変数として指定します。
</para>
<example>
<title>変数</title>
<programlisting>
<![CDATA[
{$foo} <-- 単純な変数 (配列やオブジェクト以外) を表示します。
{$foo[4]} <-- 0から始まるインデックスを持った配列の5番目の要素を表示します。
{$foo.bar} <-- "bar"というキーに対応する配列の値を表示します。PHP の $foo['bar'] と同じです。
{$foo.$bar} <-- 変数のキーに対応する配列の値を表示します。PHP の PHP $foo[$bar] と同じです。
{$foo->bar} <-- オブジェクトのプロパティ "bar"を表示します。
{$foo->bar()} <-- オブジェクトのメソッド"bar"の返り値を表示します。
{#foo#} <-- configファイル変数"foo"を表示します。
{$smarty.config.foo} <-- {#foo#}と同じです。
{$foo[bar]} <-- sectionループ内でのみ正当な構文です。{section}の項を参照のこと。
{assign var=foo value='baa'}{$foo} <-- "baa"を表示します。{assign}の項を参照のこと。
その他多くの組み合わせが可能です。
{$foo.bar.baz}
{$foo.$bar.$baz}
{$foo[4].baz}
{$foo[4].$baz}
{$foo.bar.baz[4]}
{$foo->bar($baz,2,$bar)} <-- パラメータを渡します。
{"foo"} <-- 静的な値を使用できます。
{* サーバ変数 "SERVER_NAME" の内容を表示します ($_SERVER['SERVER_NAME'])*}
{$smarty.server.SERVER_NAME}
]]>
</programlisting>
</example>
<para><literal>$_GET</literal>
<literal>$_SESSION</literal> などのようなリクエスト変数は、
予約済の変数 <link linkend="language.variables.smarty">
<parameter>$smarty</parameter></link> の値で取得します。
</para>
<para>
<link linkend="language.variables.smarty">
<parameter>$smarty</parameter></link>
<link linkend="language.config.variables">config 変数</link>
<link linkend="language.function.assign"><varname>{assign}</varname></link>
および
<link linkend="api.assign"><varname>assign()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="language.builtin.functions">
<title>組み込み関数</title>
<para>
Smarty にはいくつかの組み込み関数があります。
これらはテンプレートエンジンにとって必要不可欠なものです。これらと同じ名前の
<link linkend="language.custom.functions">カスタム関数</link>
を作成したり、組み込み関数を修正したりする事はできません。</para>
<para>
これらの関数の一部は <parameter>assign</parameter> 属性を持っており、
結果を出力せずにここで指定した名前のテンプレート変数に格納します。これは
<link linkend="language.function.assign">
<varname>{assign}</varname></link> 関数と似ています。
</para>
&designers.language-builtin-functions.language-function-capture;
&designers.language-builtin-functions.language-function-config-load;
&designers.language-builtin-functions.language-function-foreach;
&designers.language-builtin-functions.language-function-if;
&designers.language-builtin-functions.language-function-include;
&designers.language-builtin-functions.language-function-include-php;
&designers.language-builtin-functions.language-function-insert;
&designers.language-builtin-functions.language-function-ldelim;
&designers.language-builtin-functions.language-function-literal;
&designers.language-builtin-functions.language-function-php;
&designers.language-builtin-functions.language-function-section;
&designers.language-builtin-functions.language-function-strip;
</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
-->

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.15 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.capture">
<title>{capture}</title>
<para>
<varname>{capture}</varname> は、タグの間のテンプレートの出力を集め、
それをブラウザに表示する代わりに変数に受け渡します。
<varname>{capture name='foo'}</varname><varname>{/capture}</varname>
の間のあらゆるコンテンツは、<parameter>name</parameter>
属性で指定した変数に格納されます。
</para>
<para>キャプチャされたコンテンツは、特別な変数
<link linkend="language.variables.smarty.capture"><parameter>$smarty.capture.foo</parameter></link>
(<quote>foo</quote><parameter>name</parameter> 属性で指定した変数) によって利用できます。
<parameter>name</parameter> 属性を指定しない場合は <quote>default</quote>
が使われ、<parameter>$smarty.capture.default</parameter>
のようになります。
</para>
<para><varname>{capture}'s</varname> はネスト可能です。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis>default</emphasis></entry>
<entry>キャプチャされるブロックの名前</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>キャプチャされた出力を割り当てるための変数名</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<note>
<title>注意</title>
<para>
<link linkend="language.function.insert"><varname>{insert}</varname></link>
の出力をキャプチャする際には注意が必要です。
<link linkend="caching"><parameter>$caching</parameter></link>
が有効の時に、実行したい
<link linkend="language.function.insert"><varname>{insert}</varname></link>
コマンドがもしキャッシュされたコンテンツ内にあるのなら、そのコンテンツはキャプチャされません。
</para>
</note>
<para>
<example>
<title>name 属性を使用した {capture}</title>
<programlisting>
<![CDATA[
{* コンテンツが表示されない限り、テーブルの行を表示しません *}
{capture name=banner}
{include file='get_banner.tpl'}
{/capture}
{if $smarty.capture.banner ne ''}
<div id="banner">{$smarty.capture.banner}</div>
{/if}
]]>
</programlisting>
</example>
<example>
<title>{capture} をテンプレート変数に格納</title>
<para>この例は、
<link linkend="language.function.popup"><varname>{popup}</varname></link>
関数の使用法を示すものです。</para>
<programlisting>
<![CDATA[
{capture name=some_content assign=popText}
The server is {$smarty.server.SERVER_NAME|upper} at {$smarty.server.SERVER_ADDR}<br>
Your ip is {$smarty.server.REMOTE_ADDR}.
{/capture}
<a href="#" {popup caption='Server Info' text=$popText}>help</a>
]]>
</programlisting>
</example>
</para>
<para>
<link
linkend="language.variables.smarty.capture"><parameter>$smarty.capture</parameter></link>
<link linkend="language.function.eval"><varname>{eval}</varname></link>
<link linkend="language.function.fetch"><varname>{fetch}</varname></link>
<link linkend="api.fetch"><varname>fetch()</varname></link>
および <link linkend="language.function.assign"><varname>{assign}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,183 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.config.load">
<title>{config_load}</title>
<para>
<varname>{config_load}</varname> を使用して、
<link linkend="config.files">設定ファイル</link> からテンプレートに
<link linkend="language.config.variables"><parameter>#変数#</parameter></link>
を読み込みます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>インクルードする設定ファイルの名前</entry>
</row>
<row>
<entry>section</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>読み込むセクションの名前</entry>
</row>
<row>
<entry>scope</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis>local</emphasis></entry>
<entry>
読み込む変数のスコープの処理方法。local、parent、global
のいずれかを指定します。 local を指定すると、
変数がローカルファイルのテンプレート変数として読み込まれます。 parent を指定すると、
該当ファイルとその親ファイルのテンプレート変数として読み込まれます。
global を指定すると、すべてのテンプレートでテンプレート変数として利用できます。
</entry>
</row>
<row>
<entry>global</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>No</emphasis></entry>
<entry>
変数が親テンプレートから利用できるかどうか。scope=parent と同じです
(注: この属性は非推奨です。代わりに scope 属性を使用するようになっていますが、
まだサポートされています。scope 属性を指定すると、この値は無視されます)。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{config_load}</title>
<para>
<filename>example.conf</filename> ファイル
</para>
<programlisting>
<![CDATA[
# これは設定ファイルのコメントです
# グローバル変数
pageTitle = "Main Menu"
bodyBgColor = #000000
tableBgColor = #000000
rowBgColor = #00ff00
# customer 変数セクション
[Customer]
pageTitle = "Customer Info"
]]>
</programlisting>
<para>テンプレート</para>
<programlisting>
<![CDATA[
{config_load file="example.conf"}
<html>
<title>{#pageTitle#|default:"No title"}</title>
<body bgcolor="{#bodyBgColor#}">
<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
<tr bgcolor="{#rowBgColor#}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
]]>
</programlisting>
</example>
<para>
<link linkend="config.files">設定ファイル</link>
には、セクションも含まれます。<parameter>section</parameter>
属性を指定する事で、そのセクション内の変数を読み込む事ができます。
</para>
<note>
<para>
設定ファイルの <emphasis>sections</emphasis> と組み込みのテンプレート関数
<link linkend="language.function.section"><varname>{section}</varname></link>
には特に関連はありません。単にたまたま名前が同じであるというだけのことです。
</para>
</note>
<example>
<title>セクションを指定した {config_load} 関数</title>
<programlisting>
<![CDATA[
{config_load file='example.conf' section='Customer'}
<html>
<title>{#pageTitle#}</title>
<body bgcolor="{#bodyBgColor#}">
<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
<tr bgcolor="{#rowBgColor#}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
]]>
</programlisting>
</example>
<para>
設定ファイル変数の配列については
<link linkend="variable.config.overwrite"><parameter>$config_overwrite</parameter></link>
を参照してください。
</para>
<para>
<link linkend="config.files">設定ファイル</link> のページ、
<link linkend="language.config.variables">config 変数</link> のページ、
<link linkend="variable.config.dir"><parameter>$config_dir</parameter></link>
<link linkend="api.get.config.vars"><varname>get_config_vars()</varname></link>
および
<link linkend="api.config.load"><varname>config_load()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,459 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.11 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.foreach">
<title>{foreach},{foreachelse}</title>
<para>
<varname>{foreach}</varname> を使用して、
<emphasis role="bold">1つの連想配列</emphasis> をループします。
<link linkend="language.function.section"><varname>{section}</varname></link>
のように、<emphasis role="bold">データの配列</emphasis> をループすることはありません。
<varname>{foreach}</varname> の構文は
<link linkend="language.function.section"><varname>{section}</varname></link>
よりずっと簡単ですが、その代わりに <emphasis role="bold">1つの配列</emphasis>
しか扱えません。すべての <varname>{foreach}</varname> タグは、
終了タグ <varname>{/foreach}</varname> とペアである必要があります。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>from</entry>
<entry>array</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ループに使用する配列</entry>
</row>
<row>
<entry>item</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>現在の要素を示す変数の名前</entry>
</row>
<row>
<entry>key</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>現在のキーを示す変数の名前</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>foreach プロパティにアクセスするための foreach ループ名</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
必須の属性は <parameter>from</parameter><parameter>item</parameter> です。
</para></listitem>
<listitem><para>
<varname>{foreach}</varname> ループの <parameter>name</parameter>
は、英数字とアンダースコアを使用して自由に命名できます。これは
<ulink url="&url.php-manual;language.variables">PHP の変数</ulink>
と同じです。
</para></listitem>
<listitem><para>
<varname>{foreach}</varname> ループはネスト可能で、ネストした
<varname>{foreach}</varname> の name はお互いにユニークである必要があります。
</para></listitem>
<listitem><para>
<parameter>from</parameter> 属性は、通常は値の配列で、
<varname>{foreach}</varname> のループ回数を決定するために使われます。
</para></listitem>
<listitem><para>
<varname>{foreachelse}</varname> は、
<parameter>from</parameter> 変数の値が存在しない場合に実行されます。
</para></listitem>
<listitem><para>
<varname>{foreach}</varname> ループは、プロパティを操作する変数を自身で持っています。
これらは次のように表されます。
<link linkend="language.variables.smarty.loops">
<parameter>{$smarty.foreach.name.property}</parameter></link>
ここで、<quote>name</quote>
<parameter>name</parameter> 属性の値となります。
</para>
<note>
<title>注意</title>
<para><parameter>name</parameter> 属性が必要となるのは
<varname>{foreach</varname>} のプロパティにアクセスする必要がある場合のみです。
これは <link linkend="language.function.section"><varname>{section}</varname></link>
の場合とは異なります。<varname>{foreach}</varname> のプロパティに対して
定義されていない <parameter>name</parameter> でアクセスしてもエラーは発生しませんが、
結果は予測できない値になります。
</para>
</note>
</listitem>
<listitem><para>
<varname>{foreach}</varname> のプロパティには
<link linkend="foreach.property.index"><parameter>index</parameter></link>
<link linkend="foreach.property.iteration"><parameter>iteration</parameter></link>
<link linkend="foreach.property.first"><parameter>first</parameter></link>
<link linkend="foreach.property.last"><parameter>last</parameter></link>
<link linkend="foreach.property.show"><parameter>show</parameter></link>
<link linkend="foreach.property.total"><parameter>total</parameter></link>
があります。
</para></listitem>
</itemizedlist>
<example>
<title><parameter>item</parameter> 属性</title>
<programlisting role="php">
<![CDATA[
<?php
$arr = array(1000, 1001, 1002);
$smarty->assign('myArray', $arr);
?>
]]>
</programlisting>
<para><parameter>$myArray</parameter> を順序なしリストで出力するテンプレート</para>
<programlisting>
<![CDATA[
<ul>
{foreach from=$myArray item=foo}
<li>{$foo}</li>
{/foreach}
</ul>
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<ul>
<li>1000</li>
<li>1001</li>
<li>1002</li>
</ul>
]]>
</screen>
</example>
<example>
<title><parameter>item</parameter> および <parameter>key</parameter> 属性の説明</title>
<programlisting role="php">
<![CDATA[
<?php
$arr = array(9 => 'Tennis', 3 => 'Swimming', 8 => 'Coding');
$smarty->assign('myArray', $arr);
?>
]]>
</programlisting>
<para><parameter>$myArray</parameter> を キー/値 のペアで出力するテンプレート。
PHP の <ulink url="&url.php-manual;foreach"><varname>foreach</varname></ulink> と似ています。</para>
<programlisting>
<![CDATA[
<ul>
{foreach from=$myArray key=k item=v}
<li>{$k}: {$v}</li>
{/foreach}
</ul>
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<ul>
<li>9: Tennis</li>
<li>3: Swimming</li>
<li>8: Coding</li>
</ul>
]]>
</screen>
</example>
<example>
<title>{foreach} で連想配列の <parameter>item</parameter> 属性を指定する例</title>
<programlisting role="php">
<![CDATA[
<?php
$items_list = array(23 => array('no' => 2456, 'label' => 'Salad'),
96 => array('no' => 4889, 'label' => 'Cream')
);
$smarty->assign('items', $items_list);
?>
]]>
</programlisting>
<para><parameter>$items</parameter>
<parameter>$myId</parameter> を url に出力するテンプレート</para>
<programlisting>
<![CDATA[
<ul>
{foreach from=$items key=myId item=i}
<li><a href="item.php?id={$myId}">{$i.no}: {$i.label}</li>
{/foreach}
</ul>
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<ul>
<li><a href="item.php?id=23">2456: Salad</li>
<li><a href="item.php?id=96">4889: Cream</li>
</ul>
]]>
</screen>
</example>
<example>
<title>{foreach} で <parameter>item</parameter><parameter>key</parameter> をネストする例</title>
<para>配列を Smarty に割り当てます。key にはループする値のキーが含まれます。</para>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('contacts', array(
array('phone' => '1',
'fax' => '2',
'cell' => '3'),
array('phone' => '555-4444',
'fax' => '555-3333',
'cell' => '760-1234')
));
?>
]]>
</programlisting>
<para><parameter>$contact</parameter> を出力するテンプレート</para>
<programlisting>
<![CDATA[
{foreach name=outer item=contact from=$contacts}
<hr />
{foreach key=key item=item from=$contact}
{$key}: {$item}<br />
{/foreach}
{/foreach}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<hr />
phone: 1<br />
fax: 2<br />
cell: 3<br />
<hr />
phone: 555-4444<br />
fax: 555-3333<br />
cell: 760-1234<br />
]]>
</screen>
</example>
<example>
<title>データベースを使用する {foreachelse} の例</title>
<para>データベース (PEAR や ADODB など) を検索する例で、クエリの結果を Smarty に割り当てます。</para>
<programlisting role="php">
<![CDATA[
<?php
$search_condition = "where name like '$foo%' ";
$sql = 'select contact_id, name, nick from contacts '.$search_condition.' order by name';
$smarty->assign('results', $db->getAssoc($sql) );
?>
]]>
</programlisting>
<para>結果がない場合に、<varname>{foreachelse}</varname>
を使用して <quote>見つかりません</quote> と表示するテンプレート</para>
<programlisting>
<![CDATA[
{foreach key=cid item=con from=$results}
<a href="contact.php?contact_id={$cid}">{$con.name} - {$con.nick}</a><br />
{foreachelse}
検索結果が見つかりませんでした
{/foreach}
]]>
</programlisting>
</example>
<sect2 id="foreach.property.index">
<title>.index</title>
<para>
<parameter>index</parameter> には、現在の配列のインデックスをゼロから数えた値が含まれます。
</para>
<example>
<title><parameter>index</parameter> の例</title>
<programlisting role="php">
<![CDATA[
{* ヘッダブロックを5行おきに出力します *}
<table>
{foreach from=$items key=myId item=i name=foo}
{if $smarty.foreach.foo.index % 5 == 0}
<tr><th>タイトル</th></tr>
{/if}
<tr><td>{$i.label}</td></tr>
{/foreach}
</table>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="foreach.property.iteration">
<title>.iteration</title>
<para>
<parameter>iteration</parameter> は現在のループが反復された回数を表示します。
<link linkend="foreach.property.index"><parameter>index</parameter></link>
とは異なり、常に 1 から始まります。
各ループごとに 1 ずつ加算されます。
</para>
<example>
<title><parameter>iteration</parameter> および <parameter>index</parameter> の例</title>
<programlisting role="php">
<![CDATA[
{* この出力は 0|1, 1|2, 2|3, ... のようになります *}
{foreach from=$myArray item=i name=foo}
{$smarty.foreach.foo.index}|{$smarty.foreach.foo.iteration},
{/foreach}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="foreach.property.first">
<title>.first</title>
<para>
<parameter>first</parameter> は、現在の <varname>{foreach}</varname>
の反復が最初のものであるときに &true; となります。
</para>
<example>
<title><parameter>first</parameter> プロパティの例</title>
<programlisting role="php">
<![CDATA[
{* 最初の項目には「最新」、それ以外は id を表示します *}
<table>
{foreach from=$items key=myId item=i name=foo}
<tr>
<td>{if $smarty.foreach.foo.first}最新{else}{$myId}{/if}</td>
<td>{$i.label}</td>
</tr>
{/foreach}
</table>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="foreach.property.last">
<title>.last</title>
<para>
<parameter>last</parameter> は、現在の <varname>{foreach}</varname>
の反復が最後のものであるときに &true; となります。
</para>
<example>
<title><parameter>last</parameter> プロパティの例</title>
<programlisting role="php">
<![CDATA[
{* 一覧の最後に横罫線を追加します *}
{foreach from=$items key=part_id item=prod name=products}
<a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if}
{foreachelse}
... コンテンツ ...
{/foreach}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="foreach.property.show">
<title>.show</title>
<para>
<parameter>show</parameter><varname>{foreach}</varname> のパラメータとして使用します。
<parameter>show</parameter> は boolean 値です。
&false; の場合は <varname>{foreach}</varname> は表示されず、
もし <varname>{foreachelse}</varname> が存在すれば、それが代わりに表示されます。
</para>
</sect2>
<sect2 id="foreach.property.total">
<title>.total</title>
<para>
<parameter>total</parameter> には、
<varname>{foreach}</varname> がループするトータル回数が含まれます。
これは、<varname>{foreach}</varname> の内部だけではなく
ループを抜けた後でも使用できます。
</para>
<example>
<title><parameter>total</parameter> プロパティの例</title>
<programlisting role="php">
<![CDATA[
{* 返された行の総数を最後に表示します *}
{foreach from=$items key=part_id item=prod name=foo}
{$prod.name><hr/>
{if $smarty.foreach.foo.last}
<div id="total">{$smarty.foreach.foo.total} items</div>
{/if}
{foreachelse}
... 別の内容 ...
{/foreach}
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.section"><varname>{section}</varname></link>
および <link linkend="language.variables.smarty.loops"><parameter>$smarty.foreach</parameter></link>
も参照してください。
</para>
</sect2>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,266 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.if">
<title>{if},{elseif},{else}</title>
<para>
Smarty における <varname>{if}</varname> ステートメントは、PHP の
<ulink url="&url.php-manual;if">if</ulink> と同等の柔軟性を持っています。
さらに、テンプレートエンジンのための機能をいくつか追加しています。
全ての <varname>{if}</varname> は、対応する
<varname>{/if}</varname> とペアである必要があります。<varname>{else}</varname>
<varname>{elseif}</varname> も使用できます。
<emphasis>||</emphasis><emphasis>or</emphasis>
<emphasis>&amp;&amp;</emphasis><emphasis>and</emphasis>
<emphasis>is_array()</emphasis> など、PHP の条件演算子や関数はすべて利用可能です。
</para>
<para>
<link linkend="variable.security"><parameter>$security</parameter></link>
が有効な場合、配列 <link
linkend="variable.security.settings"><parameter>$security_settings</parameter></link>
には <emphasis>IF_FUNCS</emphasis> 配列が入ります。
</para>
<para>
以下は認識される条件演算子の一覧です。
これらはスペースによって周りの要素から分離される必要があります。
[] 内に記載された項目は任意である事に注意して下さい。
"PHP 相当" には、PHP において当てはまるものが示されます。
</para>
<informaltable frame="all">
<tgroup cols="4">
<colspec colname="qualifier" align="center" />
<colspec colname="alternates" align="center" />
<colspec colname="meaning" />
<colspec colname="example" />
<colspec colname="php" />
<thead>
<row>
<entry>条件演算子</entry>
<entry>代替</entry>
<entry>構文例</entry>
<entry>意味</entry>
<entry>PHP 相当</entry>
</row>
</thead>
<tbody>
<row>
<entry>==</entry>
<entry>eq</entry>
<entry>$a eq $b</entry>
<entry>等しい</entry>
<entry>==</entry>
</row>
<row>
<entry>!=</entry>
<entry>ne, neq</entry>
<entry>$a neq $b</entry>
<entry>等しくない</entry>
<entry>!=</entry>
</row>
<row>
<entry>&gt;</entry>
<entry>gt</entry>
<entry>$a gt $b</entry>
<entry>より大きい</entry>
<entry>&gt;</entry>
</row>
<row>
<entry>&lt;</entry>
<entry>lt</entry>
<entry>$a lt $b</entry>
<entry>より小さい</entry>
<entry>&lt;</entry>
</row>
<row>
<entry>&gt;=</entry>
<entry>gte, ge</entry>
<entry>$a ge $b</entry>
<entry>以上</entry>
<entry>&gt;=</entry>
</row>
<row>
<entry>&lt;=</entry>
<entry>lte, le</entry>
<entry>$a le $b</entry>
<entry>以下</entry>
<entry>&lt;=</entry>
</row>
<row>
<entry>===</entry>
<entry></entry>
<entry>$a === 0</entry>
<entry>同一性のチェック</entry>
<entry>===</entry>
</row>
<row>
<entry>!</entry>
<entry>not</entry>
<entry>not $a</entry>
<entry>否定 (単項)</entry>
<entry>!</entry>
</row>
<row>
<entry>%</entry>
<entry>mod</entry>
<entry>$a mod $b</entry>
<entry>剰余</entry>
<entry>%</entry>
</row>
<row>
<entry>is [not] div by</entry>
<entry></entry>
<entry>$a is not div by 4</entry>
<entry>割り切れる</entry>
<entry>$a % $b == 0</entry>
</row>
<row>
<entry>is [not] even</entry>
<entry></entry>
<entry>$a is not even</entry>
<entry>偶数である [ない] (単項)</entry>
<entry>$a % 2 == 0</entry>
</row>
<row>
<entry>is [not] even by</entry>
<entry></entry>
<entry>$a is not even by $b</entry>
<entry>偶数番目のグループである [ない]</entry>
<entry>($a / $b) % 2 == 0</entry>
</row>
<row>
<entry>is [not] odd</entry>
<entry></entry>
<entry>$a is not odd</entry>
<entry>奇数である [ない] (単項)</entry>
<entry>$a % 2 != 0</entry>
</row>
<row>
<entry>is [not] odd by</entry>
<entry></entry>
<entry>$a is not odd by $b</entry>
<entry>奇数番目のグループである [ない]</entry>
<entry>($a / $b) % 2 != 0</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{if} ステートメント</title>
<programlisting>
<![CDATA[
{if $name eq 'Fred'}
Welcome Sir.
{elseif $name eq 'Wilma'}
Welcome Ma'am.
{else}
Welcome, whatever you are.
{/if}
{* 論理演算子 "or" の例 *}
{if $name eq 'Fred' or $name eq 'Wilma'}
...
{/if}
{* 上と同じ *}
{if $name == 'Fred' || $name == 'Wilma'}
...
{/if}
{* 括弧は使用可能 *}
{if ( $amount < 0 or $amount > 1000 ) and $volume >= #minVolAmt#}
...
{/if}
{* PHP 関数を埋め込むことも可能 *}
{if count($var) gt 0}
...
{/if}
{* 配列のチェック *}
{if is_array($foo) }
.....
{/if}
{* null でないことのチェック *}
{if isset($foo) }
.....
{/if}
{* 値が偶数か奇数か *}
{if $var is even}
...
{/if}
{if $var is odd}
...
{/if}
{if $var is not odd}
...
{/if}
{* 値が 4 で割り切れるかどうか *}
{if $var is div by 4}
...
{/if}
{*
ふたつずつグループ化したときに、値が even であるかどうか
0=even, 1=even, 2=odd, 3=odd, 4=even, 5=even, etc.
*}
{if $var is even by 2}
...
{/if}
{* 0=even, 1=even, 2=even, 3=odd, 4=odd, 5=odd, etc. *}
{if $var is even by 3}
...
{/if}
]]>
</programlisting>
</example>
<example>
<title>{if} のその他の例</title>
<programlisting>
<![CDATA[
{if isset($name) && $name = 'Blog'}
{* 何かを行います *}
{elseif $name == $foo}
{* 何かを行います *}
{/if}
{if is_array($foo) && count($foo) > 0)
{* foreach ループを実行します *}
{/if}
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.include.php">
<title>{include_php}</title>
<note>
<title>テクニカルノート</title>
<para>
<varname>{include_php}</varname> は Smarty ではほとんど推奨されていません。
カスタムテンプレート関数を使用すれば、同等の機能を実現できます。
<varname>{include_php}</varname> を使用する理由がもしあるとすれば、
<link linkend="variable.plugins.dir"><filename>plugins/</filename></link>
ディレクトリやアプリケーションのコードから PHP 関数を完全に隔離したい場合などです。
詳細は <link
linkend="tips.componentized.templates">コンポーネント化したテンプレートの例
</link> を参照してください。
</para>
</note>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>インクルードする PHP ファイル名</entry>
</row>
<row>
<entry>once</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&true;</emphasis></entry>
<entry>同じ PHP ファイルが複数回インクルードされた場合に、一度だけインクルードするかどうか</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>include_php の出力を格納する変数名</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<varname>{include_php}</varname> タグを使用して、PHP スクリプトをテンプレートにインクルードします。
<link linkend="variable.security"><parameter>$security</parameter></link>
が有効な場合は、PHP スクリプトは <link
linkend="variable.trusted.dir"><parameter>$trusted_dir</parameter></link>
で指定されたディレクトリに存在する必要があります。<varname>{include_php}</varname>
タグには <parameter>file</parameter> 属性が必須で、
ここにはインクルードする PHP ファイルへのパスを指定します。
このパスは <link linkend="variable.trusted.dir"><parameter>$trusted_dir</parameter></link>
からの相対パスか絶対パスのいずれかとなります。
</para>
<para>
デフォルトでは、PHPファイルはテンプレート内で複数回呼ばれても一度しかインクルードしません。
<parameter>once</parameter> 属性によって毎回インクルードするべきかどうかを指定できます。
この属性を &false; に設定すると、テンプレート内でインクルードの指示がある毎に
PHP スクリプトをインクルードします。
</para>
<para>
オプションで <parameter>assign</parameter> 属性を渡すこともできます。
これは、<varname>{include_php}</varname> の出力をブラウザに表示させる代わりに
変数に格納したい場合に、その変数名を指定します。
</para>
<para>
Smarty オブジェクトは、インクルードした PHP スクリプト内で
<parameter>$this</parameter> として使用可能です。
</para>
<example>
<title>{include_php} 関数</title>
<para><filename>load_nav.php</filename> ファイル</para>
<programlisting role="php">
<![CDATA[
<?php
// mysql データベースから変数の値を読み込み、それをテンプレートに割り当てます
require_once('database.class.php');
$db = new Db();
$db->query('select url, name from navigation order by name');
$this->assign('navigation', $db->getRows());
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{* 絶対パス、あるいは $trusted_dir からの相対パスか *}
{include_php file='/path/to/load_nav.php'}
{foreach item='nav' from=$navigation}
<a href="{$nav.url}">{$nav.name}</a><br />
{/foreach}
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.include"><varname>{include}</varname></link>
<link linkend="variable.security"><parameter>$security</parameter></link>
<link linkend="variable.trusted.dir"><parameter>$trusted_dir</parameter></link>
<link linkend="language.function.php"><varname>{php}</varname></link><link
linkend="language.function.capture"><varname>{capture}</varname></link><link
linkend="template.resources">テンプレートリソース</link> および <link
linkend="tips.componentized.templates">コンポーネント化したテンプレート</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,217 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.14 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.include">
<title>{include}</title>
<para>
<varname>{include}</varname> タグを使用して、
現在のテンプレートに他のテンプレートをインクルードします。
現在のテンプレートにて利用可能なあらゆる変数は、
インクルードされたテンプレートでも同じく利用可能です。
</para>
<itemizedlist>
<listitem><para>
<varname>{include}</varname> タグには、テンプレートリソースのパスを含んだ
<parameter>file</parameter> 属性を必ず指定する必要があります。
</para></listitem>
<listitem><para>
<varname>{include}</varname> の出力をブラウザに表示する代わりに変数に格納したい場合は、
オプションの <parameter>assign</parameter> 属性にその変数名を定義します。
<link linkend="language.function.assign"><varname>{assign}</varname></link>
と同等です。
</para></listitem>
<listitem><para>
インクルードされたテンプレートに変数を渡すには、
<link linkend="language.syntax.attributes">attributes</link>
を使用します。インクルードされたテンプレートに明示的に渡された変数は、
インクルードされたファイルのスコープでのみ有効となります。
そのテンプレートに同じ名前の変数が存在する場合は、
渡された変数がそれをオーバーライドします。
</para></listitem>
<listitem><para>
全ての割り当て変数の値は、インクルードされたテンプレートのスコープが閉じた後に元に戻ります。
これは、インクルードされたテンプレート内で全ての変数を使用可能であるということです。
しかし、インクルードされたテンプレート内での変数の変更は
<varname>{include}</varname>
の後でインクルードしている側のテンプレート内では見ることはできません。
</para></listitem>
<listitem><para>
<link linkend="variable.template.dir"><parameter>$template_dir</parameter></link>
ディレクトリ外にあるファイルを <varname>{include}</varname> するには、
<link linkend="template.resources">テンプレートリソース</link> を指定します。
</para></listitem>
</itemizedlist>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>インクルードするテンプレートファイル名</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>インクルードしたコンテンツの出力を格納する変数名</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>[var type]</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ローカルからテンプレートに渡す変数</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>シンプルな {include} の例</title>
<programlisting>
<![CDATA[
<html>
<head>
<title>{$title}</title>
</head>
<body>
{include file='page_header.tpl'}
{* ここにテンプレートの本体を記述します。変数 $tpl_name
はたとえば 'contact.tpl' などに置き換えられます。
*}
{include file="$tpl_name.tpl"}
{include file='page_footer.tpl'}
</body>
</html>
]]>
</programlisting>
</example>
<example>
<title>{include} に変数を渡す</title>
<programlisting>
<![CDATA[
{include file='links.tpl' title='Newest links' links=$link_array}
{* ここにテンプレートの本体を記述します *}
{include file='footer.tpl' foo='bar'}
]]>
</programlisting>
<para>このテンプレートは、以下のような <filename>links.tpl</filename> をインクルードします。</para>
<programlisting>
<![CDATA[
<div id="box">
<h3>{$title}{/h3>
<ul>
{foreach from=$links item=l}
.. 何かを行います ...
</foreach}
</ul>
</div>
]]>
</programlisting>
</example>
<example>
<title>{include} と変数への割り当て</title>
<para>この例は、<filename>nav.tpl</filename>
の内容を変数 <varname>$navbar</varname> に割り当て、
ページの最初と最後に出力させるものです。
</para>
<programlisting>
<![CDATA[
<body>
{include file='nav.tpl' assign=navbar}
{include file='header.tpl' title='Smarty is cool'}
{$navbar}
{* テンプレートの本体をここへ記述します *}
{$navbar}
{include file='footer.tpl'}
</body>
]]>
</programlisting>
</example>
<example>
<title>さまざまな {include} リソースの例</title>
<programlisting>
<![CDATA[
{* ファイルの絶対パス *}
{include file='/usr/local/include/templates/header.tpl'}
{* ファイルの絶対パス(結果は上と同じ) *}
{include file='file:/usr/local/include/templates/header.tpl'}
{* Windows環境のファイルの絶対パス(接頭辞の"file:"は必須) *}
{include file='file:C:/www/pub/templates/header.tpl'}
{* "db"と名付けられたテンプレートリソースからインクルード *}
{include file='db:header.tpl'}
{* 変数名に格納された名前のテンプレートをインクルード - 例 $module = 'contacts' *}
{include file="$module.tpl"}
{* この例は、シングルクォートでは変数が展開されないため、動作しません *}
{include file='$module.tpl'}
{* 複数の可変テンプレートをインクルード - 例 amber/links.view.tpl *}
{include file="$style_dir/$module.$view.tpl"}
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.include.php"><varname>{include_php}</varname></link>
<link linkend="language.function.insert"><varname>{insert}</varname></link>
<link linkend="language.function.php"><varname>{php}</varname></link>
<link linkend="template.resources">テンプレートリソース</link> および
<link linkend="tips.componentized.templates">コンポーネント化したテンプレート</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.insert">
<title>{insert}</title>
<para>
<varname>{insert}</varname> タグは <link
linkend="language.function.include"><varname>{include}</varname></link>
タグと似た動作をします。ただ <varname>{insert}</varname>
タグは、テンプレートの <link linkend="caching">キャッシュ</link>
が有効であってもキャッシュされません。
テンプレートが呼び出されるたびに実行されます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>呼び出すinsert関数の名前(insert_name)</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力を格納するテンプレート変数名</entry>
</row>
<row>
<entry>script</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>insert関数を呼び出す前にインクルードされるPHPスクリプト名</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>[var type]</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>insert関数に渡す変数</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
例えば、ページの上部にバナーを表示するテンプレートを持っているとします。
バナーにはHTML, images, flash等が混合して含まれます。
したがってここに静的リンクを用いる事はできないので、
バナーコンテンツをキャッシュの対象にしたくありません。
そのためには、あらかじめ設定ファイルから取得した #banner_location_id#
と #site_id# の値を渡し、バナーコンテンツを表示するために
{insert} タグを呼び出す必要があります。
</para>
<example>
<title>{insert} 関数</title>
<programlisting>
{* バナーを取得する例 *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
</programlisting>
</example>
<para>
この例では、name 属性に <quote>getBanner</quote> を指定し、
パラメータに #banner_location_id# と #site_id# を渡しています。Smarty は
PHP アプリケーション内の insert_getBanner() 関数を探し、第1パラメータとして
#banner_location_id# と #site_id# の値を格納した連想配列を渡します。
アプリケーションにおける全ての {insert} 関数の名前は、
ネームスペースの衝突を避けるために "insert_" によって始まる必要があります。
insert_getBanner() 関数は、渡された値によって何らかの処理を行い、結果を返すべきです。
この結果はテンプレートの {insert} タグに置換されて表示されます。
この例では、Smarty は insert_getBanner(array("lid" => "12345","sid" => "67890"));
という関数を呼び出し、返された結果が {insert} タグの位置に表示されます。
</para>
<itemizedlist>
<listitem><para>
<parameter>assign</parameter> 属性を指定すると、
<varname>{insert}</varname> タグの出力は
ブラウザに表示される代わりにテンプレート変数に格納されます。
<note>
<para>
出力をテンプレート変数に格納するのは、
<link linkend="variable.caching">キャッシュ</link>
が有効な状態ではあまり有益ではありません。
</para>
</note>
</para></listitem>
<listitem><para>
<parameter>script</parameter> 属性を与えると、この PHP スクリプトは
<varname>{insert}</varname> 関数が実行される前に
(一度だけ) インクルードされます。
これは、insert 関数がまだ存在しないかもしれない場合や、insert
関数の動作のために PHP スクリプトを最初にインクルードする必要がある場合に指定します。
</para>
<para>
パスには、絶対パスかあるいは
<link linkend="variable.trusted.dir"><parameter>$trusted_dir</parameter></link>
からの相対パスを指定します。<link
linkend="variable.security"><parameter>$security</parameter></link>
が有効な場合は、スクリプトは
<link linkend="variable.trusted.dir"><parameter>$trusted_dir</parameter></link>
内にある必要があります。
</para></listitem>
</itemizedlist>
<para>
Smarty オブジェクトは第2パラメータとして渡されます。
これにより、<varname>{insert}</varname>
関数から Smarty オブジェクトの情報の参照や修正が可能です。
</para>
<note>
<title>テクニカルノート</title>
<para>
テンプレートには、キャッシュの対象外となる部分を持たせる事が可能です。
<link linkend="caching">キャッシュ</link> が有効の場合でも、
<varname>{insert}</varname> タグによる出力はキャッシュされません。
そのページが呼び出される度に動的に実行されます。
この動作は、バナー・投票・天気予報・検索結果・ユーザーフィードバックエリア等に向いています。
</para>
</note>
<para>
<link linkend="language.function.include"><varname>{include}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.ldelim">
<title>{ldelim},{rdelim}</title>
<para>
<varname>{ldelim}</varname> および <varname>{rdelim}</varname>
は、テンプレートのデリミタを
<link linkend="language.escaping">エスケープ</link> します。
デフォルトでは、これは <emphasis role="bold">{</emphasis>
および <emphasis role="bold">}</emphasis> となります。
Javascript や CSS のようなテキストのあつまりをエスケープするためには
<link linkend="language.function.literal"><varname>{literal}{/literal}</varname></link>
を使用することもできます。<link
linkend="language.variables.smarty.ldelim"><parameter>{$smarty.ldelim}</parameter></link>
も参照してください。
</para>
<example>
<title>{ldelim}, {rdelim}</title>
<programlisting>
<![CDATA[
{* これは、テンプレートからデリミタのリテラルを出力します *}
{ldelim}funcname{rdelim} is how functions look in Smarty!
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
{funcname} is how functions look in Smarty!
]]>
</screen>
<para>Javascript を使用する別の例</para>
<programlisting>
<![CDATA[
<script language="JavaScript">
function foo() {ldelim}
... コード ...
{rdelim}
</script>
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<script language="JavaScript">
function foo() {
.... コード ...
}
</script>
]]>
</screen>
</example>
<example>
<title>別の Javascript の例</title>
<programlisting>
<![CDATA[
<script language="JavaScript" type="text/javascript">
function myJsFunction(){ldelim}
alert("The server name\n{$smarty.server.SERVER_NAME}\n{$smarty.server.SERVER_ADDR}");
{rdelim}
</script>
<a href="javascript:myJsFunction()">Click here for Server Info</a>
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.literal"><varname>{literal}</varname></link>
および <link linkend="language.escaping">Smarty の構文解析を回避</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.literal">
<title>{literal}</title>
<para>
<varname>{literal}</varname> タグに囲まれたデータのブロックは、
リテラルとして認識されます。これは一般的に、Javascript やスタイルシートなどで
中括弧がテンプレートの
<link linkend="variable.left.delimiter">デリミタ</link>
として解釈されるとまずい場合に使用します。
<varname>{literal}{/literal}</varname> タブの内部は解釈されず、
そのままで表示されます。<varname>{literal}</varname>
ブロック内にテンプレートタグを含める必要がある場合は、代わりに
<link linkend="language.function.ldelim"><varname>{ldelim}{rdelim}</varname></link>
で個々のデリミタをエスケープしてください。
</para>
<example>
<title>{literal} タグ</title>
<programlisting>
<![CDATA[
{literal}
<script type="text/javascript">
<!--
function isblank(field) {
if (field.value == '')
{ return false; }
else
{
document.loginform.submit();
return true;
}
}
// -->
</script>
{/literal}
]]>
</programlisting>
</example>
<example>
<title>Javascript の関数の例</title>
<programlisting>
<![CDATA[
<script language="JavaScript" type="text/javascript">
{literal}
function myJsFunction(name, ip){
alert("The server name\n" + name + "\n" + ip);
}
{/literal}
</script>
<a href="javascript:myJsFunction('{$smarty.server.SERVER_NAME}','{$smarty.server.SERVER_ADDR}')">Click here for the Server Info</a>
]]>
</programlisting>
</example>
<example>
<title>テンプレート内での css style</title>
<programlisting>
<![CDATA[
{* included this style .. as an experiment *}
<style type="text/css">
{literal}
/* this is an intersting idea for this section */
.madIdea{
border: 3px outset #ffffff;
margin: 2 3 4 5px;
background-color: #001122;
}
{/literal}
</style>
<div class="madIdea">With smarty you can embed CSS in the template</div>
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.ldelim"><varname>{ldelim} {rdelim}</varname></link>
および
<link linkend="language.escaping">Smarty の構文解析を回避</link>
のページも参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.13 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.php">
<title>{php}</title>
<para>
<varname>{php}</varname> タグで、PHP コードを直接テンプレートに埋め込むことができます。
<link linkend="variable.php.handling"><parameter>$php_handling</parameter></link>
の設定にかかわらず、これはエスケープされません。
このタグは上級ユーザのためのものなので通常は必要とされません。
</para>
<note>
<title>テクニカルノート</title>
<para>
<varname>{php}</varname> ブロック内の PHP 変数にアクセスするには、PHP の
<ulink url="&url.php-manual;global"><literal>global</literal></ulink>
キーワードを使う必要があります。
</para>
</note>
<example>
<title>{php} タグ内での PHP コード</title>
<programlisting>
<![CDATA[
{php}
// PHP スクリプトをテンプレートから直接インクルードします
include('/path/to/display_weather.php');
{/php}
]]>
</programlisting>
</example>
<example>
<title>{php} タグで global を使用して変数を代入する</title>
<programlisting role="php">
<![CDATA[
{* このテンプレートは {php} ブロックを含み、その中で変数 $varX を割り当てます *}
{php}
global $foo, $bar;
if($foo == $bar){
echo 'This will be sent to browser';
}
// 変数を Smarty に割り当てます
$this->assign('varX','Toffee');
{/php}
{* 変数を出力します *}
<strong>{$varX}</strong> is my fav ice cream :-)
]]>
</programlisting>
</example>
<para>
<link linkend="variable.php.handling"><parameter>$php_handling</parameter></link>
<link linkend="language.function.include.php"><varname>{include_php}</varname></link>
<link linkend="language.function.include"><varname>{include}</varname></link>
<link linkend="language.function.insert"><varname>{insert}</varname></link>
および
<link linkend="tips.componentized.templates">コンポーネント化したテンプレート</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,837 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.20 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.section">
<title>{section},{sectionelse}</title>
<para>
<varname>{section}</varname> は、
<emphasis role="bold">データの配列</emphasis> をループするために使用します。
これは、<link linkend="language.function.foreach"><varname>{foreach}</varname></link>
<emphasis role="bold">1つの連想配列</emphasis>
をループするのとは異なります。すべての <varname>{section}</varname>
タグは、終了タグ <varname>{/section}</varname> とペアになっている必要があります。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>セクション名</entry>
</row>
<row>
<entry>loop</entry>
<entry>mixed</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ループ回数を決定する値</entry>
</row>
<row>
<entry>start</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>0</emphasis></entry> <entry>
ループを開始するインデックス位置。この値が負の場合は、
配列の最後尾から開始位置が算出されます。
例えばループ配列に7つの値があり、そしてstartが-2であるならば、
開始インデックスは5になります。
ループ配列の長さを超えるような無効な値は、
自動的に最も近い値に切り捨てられます。</entry>
</row>
<row>
<entry>step</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>1</emphasis></entry>
<entry>
ループインデックスを進めるために使われるステップ値。
例えばstep=2なら、インデックスは0, 2, 4をループします。
stepの値が負の場合は、配列の前方に向かって進みます。
</entry>
</row>
<row>
<entry>max</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>セクションがループする最大の回数</entry>
</row>
<row>
<entry>show</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&true;</emphasis></entry>
<entry>このセクションを表示するかどうか</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
必須の属性は <parameter>name</parameter><parameter>loop</parameter>
です。
</para></listitem>
<listitem><para>
<varname>{section}</varname><parameter>name</parameter> は、
英数字とアンダースコアを使って自由に命名できます。これは
<ulink url="&url.php-manual;language.variables">PHP の変数</ulink>
と同様です。
</para></listitem>
<listitem><para>
{section} はネスト可能で、その場合の
<varname>{section}</varname> の名前はお互いにユニークである必要があります。
</para></listitem>
<listitem><para>
<parameter>loop</parameter> 属性で指定されたループ変数
(たいていは配列) は、<varname>{section}</varname>
のループ回数を決定するために使用されます。
loop の値として、整数値を渡すこともできます。
</para></listitem>
<listitem><para>
<varname>{section}</varname> 内で値を表示するには、
変数名に続けてブラケット {} で囲んだセクション名を指定します。
</para></listitem>
<listitem><para>
ループ変数に値が存在しない場合は
<varname>{sectionelse}</varname> が実行されます。
</para></listitem>
<listitem><para>
<varname>{section}</varname> には、そのプロパティを操作するための
自身の変数があります。これらには <link linkend="language.variables.smarty.loops">
<parameter>{$smarty.section.name.property}</parameter></link>
としてアクセスできます。<quote>name</quote> は、<parameter>name</parameter>
属性の値です。
</para></listitem>
<listitem><para>
<varname>{section}</varname> のプロパティには、
<link linkend="section.property.index"><parameter>index</parameter></link>
<link linkend="section.property.index.prev"><parameter>index_prev</parameter></link>
<link linkend="section.property.index.next"><parameter>index_next</parameter></link>
<link linkend="section.property.iteration"><parameter>iteration</parameter></link>
<link linkend="section.property.first"><parameter>first</parameter></link>
<link linkend="section.property.last"><parameter>last</parameter></link>
<link linkend="section.property.rownum"><parameter>rownum</parameter></link>
<link linkend="section.property.loop"><parameter>loop</parameter></link>
<link linkend="section.property.show"><parameter>show</parameter></link>
<link linkend="section.property.total"><parameter>total</parameter></link>
があります。
</para></listitem>
</itemizedlist>
<example>
<title>{section} でのシンプルな配列のループ</title>
<para>
配列を Smarty に <link linkend="api.assign"><varname>assign()</varname></link> します。
</para>
<programlisting role="php">
<![CDATA[
<?php
$data = array(1000,1001,1002);
$smarty->assign('custid',$data);
?>
]]>
</programlisting>
<para>配列を出力するテンプレート</para>
<programlisting>
<![CDATA[
{* この例は $custid 配列のすべての値を表示します *}
{section name=customer loop=$custid}
id: {$custid[customer]}<br />
{/section}
<hr />
{* $custid 配列のすべての値を逆順に表示します *}
{section name=foo loop=$custid step=-1}
{$custid[foo]}<br />
{/section}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
id: 1000<br />
id: 1001<br />
id: 1002<br />
<hr />
id: 1002<br />
id: 1001<br />
id: 1000<br />
]]>
</screen>
</example>
<example>
<title>{section} で配列を割り当てない例</title>
<programlisting>
<![CDATA[
{section name=foo start=10 loop=20 step=2}
{$smarty.section.foo.index}
{/section}
<hr />
{section name=bar loop=21 max=6 step=-2}
{$smarty.section.bar.index}
{/section}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
10 12 14 16 18
<hr />
20 18 16 14 12 10
]]>
</screen>
</example>
<example>
<title>{section} の名前</title>
<para><varname>{section}</varname><parameter>name</parameter>
は自由につけることができます。<ulink url="&url.php-manual;language.variables">PHP
の変数</ulink> を参照してください。これは、<varname>{section}</varname>
内のデータを参照する際に使用します。</para>
<programlisting>
<![CDATA[
{section name=anything loop=$myArray}
{$myArray[anything].foo}
{$name[anything]}
{$address[anything].bar}
{/section}
]]>
</programlisting>
</example>
<example>
<title>{section} での連想配列のループ</title>
<para>これは、データの連想配列を
<varname>{section}</varname> で出力する例です。
次に示すのは、配列 <parameter>$contacts</parameter>
を Smarty に渡す PHP スクリプトです。</para>
<programlisting role="php">
<![CDATA[
<?php
$data = array(
array('name' => 'John Smith', 'home' => '555-555-5555',
'cell' => '666-555-5555', 'email' => 'john@myexample.com'),
array('name' => 'Jack Jones', 'home' => '777-555-5555',
'cell' => '888-555-5555', 'email' => 'jack@myexample.com'),
array('name' => 'Jane Munson', 'home' => '000-555-5555',
'cell' => '123456', 'email' => 'jane@myexample.com')
);
$smarty->assign('contacts',$data);
?>
]]>
</programlisting>
<para><parameter>$contacts</parameter> を出力するテンプレート</para>
<programlisting>
<![CDATA[
{section name=customer loop=$contacts}
<p>
name: {$contacts[customer].name}<br />
home: {$contacts[customer].home}<br />
cell: {$contacts[customer].cell}<br />
e-mail: {$contacts[customer].email}
</p>
{/section}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
<p>
name: John Smith<br />
home: 555-555-5555<br />
cell: 666-555-5555<br />
e-mail: john@myexample.com
</p>
<p>
name: Jack Jones<br />
home phone: 777-555-5555<br />
cell phone: 888-555-5555<br />
e-mail: jack@myexample.com
</p>
<p>
name: Jane Munson<br />
home phone: 000-555-5555<br />
cell phone: 123456<br />
e-mail: jane@myexample.com
</p>
]]>
</screen>
</example>
<example>
<title>{section} での <varname>loop</varname> 変数の使用</title>
<para>この例では、<parameter>$custid</parameter><parameter>$name</parameter>
および <parameter>$address</parameter> にはすべて配列が割り当てられ、
その要素数は同じであるものとします。まず、Smarty に配列を割り当てる
PHP スクリプトです。</para>
<programlisting role="php">
<![CDATA[
<?php
$id = array(1001,1002,1003);
$smarty->assign('custid',$id);
$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty->assign('name',$fullnames);
$addr = array('253 Abbey road', '417 Mulberry ln', '5605 apple st');
$smarty->assign('address',$addr);
?>
]]>
</programlisting>
<para><parameter>loop</parameter> 変数は、ループの回数を決定するためにのみ使用します。
<varname>{section}</varname> 内ではあらゆるテンプレート変数にアクセス可能です。</para>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
<p>
id: {$custid[customer]}<br />
name: {$name[customer]}<br />
address: {$address[customer]}
</p>
{/section}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
<p>
id: 1000<br />
name: John Smith<br />
address: 253 Abbey road
</p>
<p>
id: 1001<br />
name: Jack Jones<br />
address: 417 Mulberry ln
</p>
<p>
id: 1002<br />
name: Jane Munson<br />
address: 5605 apple st
</p>
]]>
</screen>
</example>
<example>
<title>ネストした {section}</title>
<para>
{section} は無制限にネスト可能です。{section} をネストすることで、
多次元配列のような複雑なデータ構造にアクセスすることが可能です。
これは、配列を割り当てる <filename>.php</filename> スクリプトの例です。
</para>
<programlisting role="php">
<![CDATA[
<?php
$id = array(1001,1002,1003);
$smarty->assign('custid',$id);
$fullnames = array('John Smith','Jack Jones','Jane Munson');
$smarty->assign('name',$fullnames);
$addr = array('253 N 45th', '417 Mulberry ln', '5605 apple st');
$smarty->assign('address',$addr);
$types = array(
array( 'home phone', 'cell phone', 'e-mail'),
array( 'home phone', 'web'),
array( 'cell phone')
);
$smarty->assign('contact_type', $types);
$info = array(
array('555-555-5555', '666-555-5555', 'john@myexample.com'),
array( '123-456-4', 'www.example.com'),
array( '0457878')
);
$smarty->assign('contact_info', $info);
?>
]]>
</programlisting>
<para>このテンプレートでは、<emphasis>$contact_type[customer]</emphasis>
は現在の顧客の連絡手段を格納した配列となります。</para>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
<hr>
id: {$custid[customer]}<br />
name: {$name[customer]}<br />
address: {$address[customer]}<br />
{section name=contact loop=$contact_type[customer]}
{$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br />
{/section}
{/section}
]]>
</programlisting>
<para>
上の例の出力。
</para>
<screen>
<![CDATA[
<hr>
id: 1000<br />
name: John Smith<br />
address: 253 N 45th<br />
home phone: 555-555-5555<br />
cell phone: 666-555-5555<br />
e-mail: john@myexample.com<br />
<hr>
id: 1001<br />
name: Jack Jones<br />
address: 417 Mulberry ln<br />
home phone: 123-456-4<br />
web: www.example.com<br />
<hr>
id: 1002<br />
name: Jane Munson<br />
address: 5605 apple st<br />
cell phone: 0457878<br />
]]>
</screen>
</example>
<example>
<title>データベースを使用する {sectionelse} の例</title>
<para>データベース (ADODB や PEAR) の検索結果を Smarty に格納します。</para>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'select id, name, home, cell, email from contacts '
."where name like '$foo%' ";
$smarty->assign('contacts', $db->getAll($sql));
?>
]]>
</programlisting>
<para>データベースの結果を HTML のテーブルに出力するテンプレート</para>
<programlisting>
<![CDATA[
<table>
<tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
{section name=co loop=$contacts}
<tr>
<td><a href="view.php?id={$contacts[co].id}">view<a></td>
<td>{$contacts[co].name}</td>
<td>{$contacts[co].home}</td>
<td>{$contacts[co].cell}</td>
<td>{$contacts[co].email}</td>
<tr>
{sectionelse}
<tr><td colspan="5">No items found</td></tr>
{/section}
</table>
]]>
</programlisting>
</example>
<sect2 id="section.property.index">
<title>.index</title>
<para>
<parameter>index</parameter> は現在のループインデックスを表示します。
0(又は <parameter>start</parameter> 属性の値)から始まり、
1(又は <parameter>step</parameter> 属性の値)ずつ増加します。
</para>
<note>
<title>テクニカルノート</title>
<para>
<parameter>step</parameter><parameter>start</parameter>
属性が変更されていない場合は、セクションのプロパティ <link
linkend="section.property.iteration"><parameter>iteration</parameter></link>
と同じ動作をします。ただ、1 ではなく 0 から始まるという点が異なります。
</para>
</note>
<example>
<title>{section} の <varname>index</varname> プロパティ</title>
<para>
<note><title>ちなみに……</title>
<para><literal>$custid[customer.index]</literal>
<literal>$custid[customer]</literal> は同じ意味です。</para>
</note>
</para>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
0 id: 1000<br />
1 id: 1001<br />
2 id: 1002<br />
]]>
</screen>
</example>
</sect2>
<sect2 id="section.property.index.prev">
<title>.index_prev</title>
<para>
<parameter>index_prev</parameter>
は前回のループインデックスを表示します。最初のループでは-1がセットされます。
</para>
</sect2>
<sect2 id="section.property.index.next">
<title>.index_next</title>
<para>
<parameter>index_next</parameter>
は次回のループインデックスを表示します。
ループの最後でもやはり現在のインデックスの次回の値を返します
(<parameter>step</parameter> 属性の設定に従います)。
</para>
<example>
<title><varname>index</varname><varname>index_next</varname>
および <varname>index_prev</varname> プロパティ</title>
<programlisting role="php">
<![CDATA[
<?php
$data = array(1001,1002,1003,1004,1005);
$smarty->assign('rows',$data);
?>
]]>
</programlisting>
<para>上の配列をテーブルに出力するテンプレート</para>
<programlisting>
<![CDATA[
{* $rows[row.index] と $rows[row] は同じ意味です *}
<table>
<tr>
<th>index</th><th>id</th>
<th>index_prev</th><th>prev_id</th>
<th>index_next</th><th>next_id</th>
</tr>
{section name=row loop=$rows}
<tr>
<td>{$smarty.section.row.index}</td><td>{$rows[row]}</td>
<td>{$smarty.section.row.index_prev}</td><td>{$rows[row.index_prev]}</td>
<td>{$smarty.section.row.index_next}</td><td>{$rows[row.index_next]}</td>
</tr>
{/section}
</table>
]]>
</programlisting>
<para>
上の例の出力するテーブルは次のようになります。
</para>
<screen>
<![CDATA[
index id index_prev prev_id index_next next_id
0 1001 -1 1 1002
1 1002 0 1001 2 1003
2 1003 1 1002 3 1004
3 1004 2 1003 4 1005
4 1005 3 1004 5
]]>
</screen>
</example>
</sect2>
<sect2 id="section.property.iteration">
<title>.iteration</title>
<para>
<parameter>iteration</parameter> は現在のループが反復された回数を表示します。
</para>
<note>
<para>
<link linkend="section.property.index"><parameter>index</parameter></link>
プロパティとは異なり、これは <varname>{section}</varname> のプロパティ
<parameter>start</parameter><parameter>step</parameter> および <parameter>max</parameter>
の影響を受けません。
<parameter>iteration</parameter> も 1 から始まります。これは
<parameter>index</parameter> が 0 から始まるのとは異なります。<link
linkend="section.property.rownum"><parameter>rownum</parameter></link>
<parameter>iteration</parameter> の別名で、全く同じ働きをします。
</para>
</note>
<example>
<title>セクションのプロパティ <varname>iteration</varname></title>
<programlisting role="php">
<![CDATA[
<?php
// 3000 から 3015 までの配列
$id = range(3000,3015);
$smarty->assign('arr',$id);
?>
]]>
</programlisting>
<para><literal>$arr</literal> 配列の要素を
<literal>step=2</literal> で出力するテンプレート</para>
<programlisting>
<![CDATA[
{section name=cu loop=$arr start=5 step=2}
iteration={$smarty.section.cu.iteration}
index={$smarty.section.cu.index}
id={$custid[cu]}<br />
{/section}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
iteration=1 index=5 id=3005<br />
iteration=2 index=7 id=3007<br />
iteration=3 index=9 id=3009<br />
iteration=4 index=11 id=3011<br />
iteration=5 index=13 id=3013<br />
iteration=6 index=15 id=3015<br />
]]>
</screen>
<para>
もうひとつの例は、<parameter>iteration</parameter> プロパティを使用して
5 行おきにテーブルのヘッダ部を出力します。
<link linkend="language.function.if"><varname>{if}</varname></link>
関数を mod 演算子とともに使用します。
</para>
<programlisting>
<![CDATA[
<table>
{section name=co loop=$contacts}
{if $smarty.section.co.iteration % 5 == 1}
<tr><th>&nbsp;</th><th>Name></th><th>Home</th><th>Cell</th><th>Email</th></tr>
{/if}
<tr>
<td><a href="view.php?id={$contacts[co].id}">view<a></td>
<td>{$contacts[co].name}</td>
<td>{$contacts[co].home}</td>
<td>{$contacts[co].cell}</td>
<td>{$contacts[co].email}</td>
<tr>
{/section}
</table>
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.first">
<title>.first</title>
<para>
<parameter>first</parameter> は、現在
<varname>{section}</varname> の一回目の処理を行っている場合に
&true; となります。
</para>
</sect2>
<sect2 id="section.property.last">
<title>.last</title>
<para>
<parameter>last</parameter> は、現在
<varname>{section}</varname> の最後の処理を行っている場合に
&true; となります。
</para>
<example>
<title>{section} プロパティ <varname>first</varname><varname>last</varname></title>
<para>
この例は <varname>$customers</varname> 配列をループし、
ループの最初でヘッダブロック、そしてループの最後でフッタブロックを出力します。
<link linkend="section.property.total"><parameter>total</parameter></link>
プロパティも使用します。
</para>
<programlisting>
<![CDATA[
{section name=customer loop=$customers}
{if $smarty.section.customer.first}
<table>
<tr><th>id</th><th>customer</th></tr>
{/if}
<tr>
<td>{$customers[customer].id}}</td>
<td>{$customers[customer].name}</td>
</tr>
{if $smarty.section.customer.last}
<tr><td></td><td>{$smarty.section.customer.total} customers</td></tr>
</table>
{/if}
{/section}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="section.property.rownum">
<title>.rownum</title>
<para>
<parameter>rownum</parameter> は現在のループが反復された回数を表示します(1から開始)。
これは <link
linkend="section.property.iteration"><parameter>iteration</parameter></link>
の別名で、同じ動作をします。
</para>
</sect2>
<sect2 id="section.property.loop">
<title>.loop</title>
<para>
<parameter>loop</parameter> は、この
{section} ループの最後のインデックス番号を表示します。
<varname>{section}</varname> の内部だけでなく、外部で使用することもできます。
</para>
<example>
<title>{section} プロパティ <varname>loop</varname></title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid}
{$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
There are {$smarty.section.customer.loop} customers shown above.
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
0 id: 1000<br />
1 id: 1001<br />
2 id: 1002<br />
There are 3 customers shown above.
]]>
</screen>
</example>
</sect2>
<sect2 id="section.property.show">
<title>.show</title>
<para>
<parameter>show</parameter> は、セクションのパラメータとして使用する
boolean 値です。&false; の場合はこのセクションは表示されません。
<varname>{sectionelse}</varname> があれば、それが代わりに表示されます。
</para>
<example>
<title><varname>show</varname> プロパティ</title>
<para>Boolean <varname>$show_customer_info</varname> を PHP
アプリケーションから渡し、このセクションを表示するかどうかを調整します。</para>
<programlisting>
<![CDATA[
{section name=customer loop=$customers show=$show_customer_info}
{$smarty.section.customer.rownum} id: {$customers[customer]}<br />
{/section}
{if $smarty.section.customer.show}
the section was shown.
{else}
the section was not shown.
{/if}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
1 id: 1000<br />
2 id: 1001<br />
3 id: 1002<br />
the section was shown.
]]>
</screen>
</example>
</sect2>
<sect2 id="section.property.total">
<title>.total</title>
<para>
<parameter>total</parameter><varname>{section}</varname>
がループしたトータル回数を表示します。これは
<varname>{section}</varname> の内部だけでなく外部でも使うことができます。
</para>
<example>
<title><varname>total</varname> プロパティの例</title>
<programlisting>
<![CDATA[
{section name=customer loop=$custid step=2}
{$smarty.section.customer.index} id: {$custid[customer]}<br />
{/section}
There are {$smarty.section.customer.total} customers shown above.
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.foreach"><varname>{foreach}</varname></link>
および
<link linkend="language.variables.smarty.loops"><parameter>$smarty.section</parameter></link>
も参照してください。
</para>
</sect2>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,85 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.strip">
<title>{strip}</title>
<para>
Webデザイナーの方は、HTML コードに含まれたホワイトスペースとキャリッジリターンが
ブラウザの表示に影響を及ぼす問題に何度も遭遇した事があると思います。
問題を回避するには、テンプレートの全てのタグを連ねて記述する必要があります。
しかしこれでは大変読みづらく管理しにくいテンプレートになってしまいます。
</para>
<para>
<varname>{strip}{/strip}</varname> タグに囲まれたコンテンツは、
ブラウザに表示される前に、各行の先頭と終端にある
余分なホワイトスペースやキャリッジリターンが除去されます。
これによってテンプレートは可読性を維持し、
余分なホワイトスペースによって問題を引き起こす心配もありません。
</para>
<note>
<para>
<varname>{strip}{/strip}</varname> はテンプレート変数の内容に影響しません。
詳細は <link linkend="language.modifier.strip">strip 修飾子</link>
を参照してください。
</para>
</note>
<example>
<title>{strip} タグ</title>
<programlisting>
<![CDATA[
{* 次の例は全て1行に出力されます *}
{strip}
<table border='0'>
<tr>
<td>
<a href="{$url}">
<font color="red">This is a test</font>
</a>
</td>
</tr>
</table>
{/strip}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
<table border='0'><tr><td><a href="http://. snipped...</a></td></tr></table>
]]>
</screen>
</example>
<para>
上記の例は、全ての行が HTML タグで始まり HTML タグで終わる事に注意して下さい。
全ての行は連ねて出力されます。行の始めか終わりにプレーンテキストがある場合は、
連続して出力されたその結果は望むものではないかもしれません。
</para>
<para>
<link linkend="language.modifier.strip"><varname>strip</varname></link>
修飾子も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="language.combining.modifiers">
<title>修飾子の連結</title>
<para>
変数には複数の修飾子を適用できます。
それらは左から右に連結された順に適用されます。
各修飾子は、<literal>|</literal> (パイプ) キャラクタで連結しなければなりません。
</para>
<example>
<title>修飾子の連結</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Smokers are Productive, but Death Cuts Efficiency.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|upper|spacify}
{$articleTitle|lower|spacify|truncate}
{$articleTitle|lower|truncate:30|spacify}
{$articleTitle|lower|spacify|truncate:30:". . ."}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Smokers are Productive, but Death Cuts Efficiency.
S M O K E R S A R ....snip.... H C U T S E F F I C I E N C Y .
s m o k e r s a r ....snip.... b u t d e a t h c u t s...
s m o k e r s a r e p r o d u c t i v e , b u t . . .
s m o k e r s a r e p. . .
]]>
</screen>
</example>
</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
-->

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="language.custom.functions">
<title>カスタム関数</title>
<para>
Smarty は、テンプレートで使用可能なカスタム関数をいくつか実装しています。
</para>
&designers.language-custom-functions.language-function-assign;
&designers.language-custom-functions.language-function-counter;
&designers.language-custom-functions.language-function-cycle;
&designers.language-custom-functions.language-function-debug;
&designers.language-custom-functions.language-function-eval;
&designers.language-custom-functions.language-function-fetch;
&designers.language-custom-functions.language-function-html-checkboxes;
&designers.language-custom-functions.language-function-html-image;
&designers.language-custom-functions.language-function-html-options;
&designers.language-custom-functions.language-function-html-radios;
&designers.language-custom-functions.language-function-html-select-date;
&designers.language-custom-functions.language-function-html-select-time;
&designers.language-custom-functions.language-function-html-table;
&designers.language-custom-functions.language-function-mailto;
&designers.language-custom-functions.language-function-math;
&designers.language-custom-functions.language-function-popup;
&designers.language-custom-functions.language-function-popup-init;
&designers.language-custom-functions.language-function-textformat;
</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
-->

View File

@@ -0,0 +1,163 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.assign">
<title>{assign}</title>
<para>
<varname>{assign}</varname> は、テンプレート変数を
<emphasis role="bold">テンプレートの実行時に</emphasis>
割り当てます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>var</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>割り当てられるテンプレート変数の名前</entry>
</row>
<row>
<entry>value</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>テンプレート変数に割り当てる値</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{assign}</title>
<programlisting>
<![CDATA[
{assign var='name' value='Bob'}
The value of $name is {$name}.
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
The value of $name is Bob.
]]>
</screen>
</example>
<example>
<title>{assign} での演算子の使用</title>
<para>この複雑な例では、変数を `バッククォート` で囲む必要があります。</para>
<programlisting>
<![CDATA[
{assign var=running_total value=`$running_total+$some_array[row].some_value`}
]]>
</programlisting>
</example>
<example>
<title>PHP スクリプトからの {assign} 変数へのアクセス</title>
<para>
PHP スクリプトから <varname>{assign}</varname> 変数にアクセスするには
<link linkend="api.get.template.vars">
<varname>get_template_vars()</varname></link>
を使用します。これは、変数 <parameter>$foo</parameter>
を作成するテンプレートです。
</para>
<programlisting>
<![CDATA[
{assign var='foo' value='Smarty'}
]]>
</programlisting>
<para>テンプレート変数は、以下のスクリプトのように
テンプレートの実行後か実行中にしか利用できません。
</para>
<programlisting role="php">
<![CDATA[
<?php
// これは何も出力しません。テンプレートがまだ実行されていないからです。
echo $smarty->get_template_vars('foo');
// テンプレートを変数に格納します。
$whole_page = $smarty->fetch('index.tpl');
// これは 'smarty' と出力します。テンプレートが実行されたからです。
echo $smarty->get_template_vars('foo');
$smarty->assign('foo','Even smarter');
// これは 'Even smarter' を出力します。
echo $smarty->get_template_vars('foo');
?>
]]>
</programlisting>
</example>
<para>
次の関数も、<emphasis>オプションで</emphasis>
テンプレート変数へ割り当てることができます。
</para>
<para>
<link linkend="language.function.capture"><varname>{capture}</varname></link>
<link linkend="language.function.include"><varname>{include}</varname></link>
<link linkend="language.function.include.php"><varname>{include_php}</varname></link>
<link linkend="language.function.insert"><varname>{insert}</varname></link>
<link linkend="language.function.counter"><varname>{counter}</varname></link>
<link linkend="language.function.cycle"><varname>{cycle}</varname></link>
<link linkend="language.function.eval"><varname>{eval}</varname></link>
<link linkend="language.function.fetch"><varname>{fetch}</varname></link>
<link linkend="language.function.math"><varname>{math}</varname></link>
<link linkend="language.function.textformat"><varname>{textformat}</varname></link>
</para>
<para>
<link linkend="api.assign"><varname>assign()</varname></link>
および
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,127 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.counter">
<title>{counter}</title>
<para>
<varname>{counter}</varname> はカウントした回数を表示します。
<varname>{counter}</varname> は各反復の回数を記憶します。
数字、カウントの間隔や進行方向、値の表示/非表示などを設定できます。
また、各々にユニークなname属性を与える事によって、
同時に複数のカウンタを実行する事ができます。name属性を指定しなかった場合は、
<quote>default</quote> を使用します。
</para>
<para>
<parameter>assign</parameter> 属性を指定した場合は、
<varname>{counter}</varname> 関数の出力がこのテンプレート変数に格納され、
テンプレートには出力されません。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>default</emphasis></entry>
<entry>カウンタの名前</entry>
</row>
<row>
<entry>start</entry>
<entry>number</entry>
<entry>No</entry>
<entry><emphasis>1</emphasis></entry>
<entry>カウントを開始する数</entry>
</row>
<row>
<entry>skip</entry>
<entry>number</entry>
<entry>No</entry>
<entry><emphasis>1</emphasis></entry>
<entry>カウントの間隔</entry>
</row>
<row>
<entry>direction</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>up</emphasis></entry>
<entry>カウントの進行方向 (up/down)</entry>
</row>
<row>
<entry>print</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&true;</emphasis></entry>
<entry>値を表示するかどうか</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力が割り当てられるテンプレート変数</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{counter}</title>
<programlisting>
<![CDATA[
{* initialize the count *}
{counter start=0 skip=2}<br />
{counter}<br />
{counter}<br />
{counter}<br />
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
0<br />
2<br />
4<br />
6<br />
]]>
</screen>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.cycle">
<title>{cycle}</title>
<para>
<varname>{cycle}</varname> は、値の設定に従って循環します。
テーブル内のセルの色を交互に2色もしくはそれ以上の色に変更したり、
配列の値を循環するような事が簡単に行えます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>default</emphasis></entry>
<entry>サイクルの名前</entry>
</row>
<row>
<entry>values</entry>
<entry>mixed</entry>
<entry>Yes</entry>
<entry><emphasis>N/A</emphasis></entry>
<entry>カンマを境界としたリスト (delimiter属性を参照)
または値の配列のどちらかによって指定する、循環される値
</entry>
</row>
<row>
<entry>print</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&true;</emphasis></entry>
<entry>値を表示するかどうか</entry>
</row>
<row>
<entry>advance</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&true;</emphasis></entry>
<entry>次の値に進むかどうか</entry>
</row>
<row>
<entry>delimiter</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>,</emphasis></entry>
<entry>value 属性で使用するためのデリミタ</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力が割り当てられるテンプレート変数</entry>
</row>
<row>
<entry>reset</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>次の値に進まずに、最初の値をセットする。</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
<parameter>name</parameter> 属性を渡す事によって、テンプレート内で
1つ以上の値のセットを通して <varname>{cycle}</varname> を行えます。
<varname>{cycle}</varname> にはユニークな <parameter>name</parameter>
を与えてください。
</para></listitem>
<listitem><para>
<parameter>print</parameter> 属性に &false; をセットする事で、
強制的に現在の値を表示しない事が可能です。これは、
こっそり値をスキップするのに役に立つでしょう。
</para></listitem>
<listitem><para>
<parameter>advance</parameter> 属性は値を繰り返すために使われます。
&false; をセットした時に次の <varname>{cycle}</varname> が呼ばれると、
同じ値を表示します。
</para></listitem>
<listitem><para>
<parameter>assign</parameter> 属性を指定した場合は、
<varname>{cycle}</varname> 関数の出力は
テンプレートに出力される代わりにテンプレート変数に割り当てられます。
</para></listitem>
</itemizedlist>
<example>
<title>{cycle}</title>
<programlisting>
<![CDATA[
{section name=rows loop=$data}
<tr bgcolor="{cycle values="#eeeeee,#d0d0d0"}">
<td>{$data[rows]}</td>
</tr>
{/section}
]]>
</programlisting>
<para>上のテンプレートの出力</para>
<screen>
<![CDATA[
<tr bgcolor="#eeeeee">
<td>1</td>
</tr>
<tr bgcolor="#d0d0d0">
<td>2</td>
</tr>
<tr bgcolor="#eeeeee">
<td>3</td>
</tr>
]]>
</screen>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.debug">
<title>{debug}</title>
<para>
<varname>{debug}</varname> は、ページにデバッギングコンソールを出力します。
これは、PHP スクリプトにおける <link linkend="chapter.debugging.console">debug</link>
の設定に関係なく動作します。これはプログラムを実行した時、
使用されるテンプレートは表示せずに、<link linkend="api.assign">割り当てられた</link>変数のみを表示します。
ですが、現在このテンプレートのスコープ内で有効な変数をすべて見る事ができます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>output</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>javascript</emphasis></entry>
<entry>出力タイプ。html又はjavascript</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<link linkend="chapter.debugging.console">デバッギングコンソール</link>
のページも参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.eval">
<title>{eval}</title>
<para>
<varname>{eval}</varname> は、与えられた変数をテンプレートとして評価します。
テンプレート変数又はテンプレートタグを
変数や設定ファイル内に埋め込むような用途に使われます。
</para>
<para>
<parameter>assign</parameter> 属性が指定されると、
<varname>{eval}</varname> 関数の出y録はこのテンプレート変数に割り当てられ、
テンプレートに出力されることはありません。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>var</entry>
<entry>mixed</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>評価される変数 (又は文字列)</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力が割り当てられるテンプレート変数</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<note>
<title>テクニカルノート</title>
<para>
<itemizedlist>
<listitem><para>
評価される変数は、テンプレートと同じように扱われます。
エスケープやセキュリティ機能も、テンプレートと同様になります。
</para></listitem>
<listitem><para>
評価される変数はリクエスト毎にコンパイルされるので、
コンパイルされた形式では保存されません。ですが、
<link linkend="caching">キャッシュ</link> が有効に設定されている場合は、
残りのテンプレートの出力に関してはキャッシュされます。
</para></listitem>
</itemizedlist>
</para>
</note>
<example>
<title>{eval}</title>
<para>設定ファイル <filename>setup.conf</filename></para>
<programlisting>
<![CDATA[
emphstart = <strong>
emphend = </strong>
title = Welcome to {$company}'s home page!
ErrorCity = You must supply a {#emphstart#}city{#emphend#}.
ErrorState = You must supply a {#emphstart#}state{#emphend#}.
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{config_load file='setup.conf'}
{eval var=$foo}
{eval var=#title#}
{eval var=#ErrorCity#}
{eval var=#ErrorState# assign='state_error'}
{$state_error}
]]>
</programlisting>
<para>
上のテンプレートの出力
</para>
<screen>
<![CDATA[
This is the contents of foo.
Welcome to Foobar Pub & Grill's home page!
You must supply a <strong>city</strong>.
You must supply a <strong>state</strong>.
]]>
</screen>
</example>
<example>
<title>もうひとつの {eval} の例</title>
<para>これは、サーバ名 (大文字変換したもの) と IP を出力します。
割り当てられる変数 <parameter>$str</parameter> は、
データベースのクエリから取得します。</para>
<programlisting role="php">
<![CDATA[
<?php
$str = 'The server name is {$smarty.server.SERVER_NAME|upper} '
.'at {$smarty.server.SERVER_ADDR}';
$smarty->assign('foo',$str);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{eval var=$foo}
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.fetch">
<title>{fetch}</title>
<para>
<varname>{fetch}</varname> は、ローカルシステムやhttp, ftpからファイルを取得し、
コンテンツを表示します。
</para>
<itemizedlist>
<listitem><para>
ファイル名が <parameter>http://</parameter> から始まる場合は、web
サイト上のページを取得して表示します。
<note>
<para>
http リダイレクトはサポートしていません。
必要に応じて、最後のスラッシュをつけることを忘れないようにしましょう。
</para>
</note>
</para></listitem>
<listitem><para>
ファイル名が <parameter>ftp://</parameter> で始まる場合は、
ftp サーバからダウンロードしたファイルを表示します。
</para></listitem>
<listitem><para>
ローカルファイルの場合には、ファイルのフルパスあるいは
実行する PHP スクリプトからの相対パスを指定する必要があります。
<note>
<para>
テンプレートの <link linkend="variable.security">
<parameter>$security</parameter></link> が有効になっており、
ファイルをローカルファイルシステムから取得する場合、
<varname>{fetch}</varname> は定義済みの
<link linkend="variable.secure.dir">安全なディレクトリ</link>
のいずれかにあるファイルのみを受け付けます。
</para>
</note>
</para></listitem>
<listitem><para>
<parameter>assign</parameter> 属性を指定すると、
<varname>{fetch}</varname> 関数の出力がこのテンプレート変数に割り当てられます。
テンプレートには出力されません。
</para></listitem>
</itemizedlist>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>取得するファイル、http あるいは ftp のサイト</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力が割り当てられるテンプレート変数</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{fetch} の例</title>
<programlisting>
<![CDATA[
{* テンプレートにJavaScriptを含めます *}
{fetch file='/export/httpd/www.example.com/docs/navbar.js'}
{* 他のwebサイトからテンプレートに天候のテキストを埋め込みます *}
{fetch file='http://www.myweather.com/68502/'}
{* ftp経由でニュースヘッドラインファイルを取得します *}
{fetch file='ftp://user:password@ftp.example.com/path/to/currentheadlines.txt'}
{* 上と同じですが、変数を使用します *}
{fetch file="ftp://`$user`:`$password`@`$server`/`$path`"}
{* 取得したコンテンツをテンプレート変数に割り当てます *}
{fetch file='http://www.myweather.com/68502/' assign='weather'}
{if $weather ne ''}
<div id="weather">{$weather}</div>
{/if}
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.capture"><varname>{capture}</varname></link>
<link linkend="language.function.eval"><varname>{eval}</varname></link>
<link linkend="language.function.assign"><varname>{assign}</varname></link>
および
<link linkend="api.fetch"><varname>fetch()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,237 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.17 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.checkboxes">
<title>{html_checkboxes}</title>
<para>
<varname>{html_checkboxes}</varname> は、
提供されたデータから HTML チェックボックスグループを作成する
<link linkend="language.custom.functions">カスタム関数</link>
です。デフォルトで選択されているアイテムの指定もうまく配慮されます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>checkbox</emphasis></entry>
<entry>チェックボックスリストの名前</entry>
</row>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Yes (options属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>チェックボックスボタンの値の配列</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Yes (options属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>チェックボックスボタンの出力の配列</entry>
</row>
<row>
<entry>selected</entry>
<entry>string/array</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>あらかじめ選択されたチェックボックス要素群</entry>
</row>
<row>
<entry>options</entry>
<entry>associative array</entry>
<entry>Yes (valuesとoutput属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>values属性とoutput属性の連想配列</entry>
</row>
<row>
<entry>separator</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>各チェックボックスアイテムを区分するための文字列</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>チェックボックスのタグを出力せずに配列に格納する</entry>
</row>
<row>
<entry>labels</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&true;</emphasis></entry>
<entry>出力に &lt;label&gt; タグを加える</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>各チェックボックスの出力をひとつの要素とする配列に格納する</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
<parameter>options</parameter> を使用しない場合は、
必須の属性は <parameter>values</parameter> および
<parameter>output</parameter> となります。
</para></listitem>
<listitem><para>
全ての出力は XHTML 準拠です。
</para></listitem>
<listitem><para>
上の属性リストに無いパラメータが与えられた場合は、作成された各
&lt;input&gt; タグの内側に名前/値のペアで表されます。
</para></listitem>
</itemizedlist>
<example>
<title>{html_checkboxes}</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array(
'Joe Schmoe',
'Jack Smith',
'Jane Johnson',
'Charlie Brown')
);
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{html_checkboxes name='id' values=$cust_ids output=$cust_names
selected=$customer_id separator='<br />'}
]]>
</programlisting>
<para>
あるいは、このような PHP コードに対して
</para>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_checkboxes', array(
1000 => 'Joe Schmoe',
1001 => 'Jack Smith',
1002 => 'Jane Johnson',
1003 => 'Charlie Brown')
);
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
テンプレートはこのようになります。
</para>
<programlisting>
<![CDATA[
{html_checkboxes name='id' options=$cust_checkboxes
selected=$customer_id separator='<br />'}
]]>
</programlisting>
<para>
どちらも、出力は次のようになります。
</para>
<screen>
<![CDATA[
<label><input type="checkbox" name="id[]" value="1000" />Joe Schmoe</label><br />
<label><input type="checkbox" name="id[]" value="1001" checked="checked" />Jack Smith</label>
<br />
<label><input type="checkbox" name="id[]" value="1002" />Jane Johnson</label><br />
<label><input type="checkbox" name="id[]" value="1003" />Charlie Brown</label><br />
]]>
</screen>
</example>
<example>
<title>
データベースの例 (PEAR あるいは ADODB)
</title>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'select type_id, types from contact_types order by type';
$smarty->assign('contact_types',$db->getAssoc($sql));
$sql = 'select contact_id, contact_type_id, contact '
.'from contacts where contact_id=12';
$smarty->assign('contact',$db->getRow($sql));
?>
]]>
</programlisting>
<para>データベースのクエリの出力</para>
<programlisting>
<![CDATA[
{html_checkboxes name='contact_type_id' options=$contact_types
selected=$contact.contact_type_id separator='<br />'}
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.html.radios"><varname>{html_radios}</varname></link>
および
<link linkend="language.function.html.options"><varname>{html_options}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.image">
<title>{html_image}</title>
<para>
<varname>{html_image}</varname> は、HTML の <literal>&lt;img&gt;</literal>
タグを作成する
<link linkend="language.custom.functions">カスタム関数</link> です。
<parameter>height</parameter> 属性と <parameter>width</parameter>
属性を省略した場合は、画像ファイルから自動的に算出します。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>file</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>画像のパス・ファイル名</entry>
</row>
<row>
<entry>height</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>実際の画像の高さ</emphasis></entry>
<entry>画像を表示する高さ</entry>
</row>
<row>
<entry>width</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>実際の画像の幅</emphasis></entry>
<entry>画像を表示する幅</entry>
</row>
<row>
<entry>basedir</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis>web サーバのドキュメントルート</emphasis></entry>
<entry>相対パスの基準となるディレクトリ</entry>
</row>
<row>
<entry>alt</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis><quote></quote></emphasis></entry>
<entry>画像の代替テキスト</entry>
</row>
<row>
<entry>href</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>画像にリンクする href の値</entry>
</row>
<row>
<entry>path_prefix</entry>
<entry>string</entry>
<entry>no</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力パスのプレフィックス</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
<parameter>basedir</parameter> 属性は、画像の相対パスの基準となるベースディレクトリです。
指定しなかった場合は、web サーバのドキュメントルートである
<varname>$_ENV['DOCUMENT_ROOT']</varname> を使用します。
<link linkend="variable.security"><parameter>$security</parameter></link>
が有効な場合は、画像のパスは
<link linkend="variable.secure.dir">セキュアディレクトリ</link>
内になければなりません。
</para></listitem>
<listitem><para>
<parameter>href</parameter> は画像にリンクされた href の値です。
これを指定すると、image タグの周りに
<literal>&lt;a href="LINKVALUE"&gt;&lt;a&gt;</literal>
タグを配置します。
</para> </listitem>
<listitem><para>
<parameter>path_prefix</parameter> には、任意で
出力パスを指定できます。これは、画像を違うサーバに配置したい場合に有効です。
</para></listitem>
<listitem><para>
前述の属性リストにないパラメータが与えられた場合は、作成された各
<literal>&lt;img&gt;</literal> タグの内側に
名前/値 のペアで表されます。
</para></listitem>
</itemizedlist>
<note>
<title>テクニカルノート</title>
<para>
<varname>{html_image}</varname> は、画像を読み込んで幅と高さを取得するため、
ディスクへのアクセスが必要です。テンプレートの <link linkend="caching">キャッシュ</link>
を使用しない場合は、<varname>{html_image}</varname>
ではなく静的に image タグを使用するほうがパフォーマンス的にお勧めです。
</para>
</note>
<example>
<title>{html_image} の例</title>
<programlisting>
<![CDATA[
{html_image file='pumpkin.jpg'}
{html_image file='/path/from/docroot/pumpkin.jpg'}
{html_image file='../path/relative/to/currdir/pumpkin.jpg'}
]]>
</programlisting>
<para>
上のテンプレートの出力
</para>
<screen>
<![CDATA[
<img src="pumpkin.jpg" alt="" width="44" height="68" />
<img src="/path/from/docroot/pumpkin.jpg" alt="" width="44" height="68" />
<img src="../path/relative/to/currdir/pumpkin.jpg" alt="" width="44" height="68" />
]]>
</screen>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,282 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.18 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.options">
<title>{html_options}</title>
<para>
<varname>{html_options}</varname> は、HTML の
<literal>&lt;select&gt;&lt;option&gt;</literal> グループにデータを代入して作成する
<link linkend="language.custom.functions">カスタム関数</link> です。
デフォルトで選択されるアイテムも決定できます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Yes (options属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ドロップダウンリストのvalue属性の配列</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Yes (options属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ドロップダウンリストの出力内容の配列</entry>
</row>
<row>
<entry>selected</entry>
<entry>string/array</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>あらかじめ選択されているオプション要素</entry>
</row>
<row>
<entry>options</entry>
<entry>associative array</entry>
<entry>Yes (valuesとoutput属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>キーがvalues属性、要素がoutput属性の連想配列</entry>
</row>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>selectグループの名前</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
<parameter>options</parameter> を使用しない場合は、
<parameter>values</parameter> および <parameter>output</parameter>
が必須となります。
</para></listitem>
<listitem><para>
任意である <parameter>name</parameter> 属性が与えられると、
<literal>&lt;select&gt;&lt;/select&gt;</literal> タグが作成されます。
それ以外の場合は <literal>&lt;option&gt;</literal> のリストのみを作成します。
</para></listitem>
<listitem><para>
配列が渡された場合は HTML の <literal>&lt;optgroup&gt;</literal>
として扱われ、グループが表示されます。
<literal>&lt;optgroup&gt;</literal> での再帰呼出もサポートしています。
</para></listitem>
<listitem><para>
前述の属性リストに無いパラメータが与えられた場合は、
作成された各 <literal>&lt;select&gt;</literal> タグの内側に
名前/値 のペアで表されます。任意の <parameter>name</parameter>
属性が与えられない場合には、これらは無視されます。
</para></listitem>
<listitem><para>
すべての出力は XHTML に準拠しています。
</para></listitem>
</itemizedlist>
<example>
<title><varname>options</varname> 属性での連想配列</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('myOptions', array(
1800 => 'Joe Schmoe',
9904 => 'Jack Smith',
2003 => 'Charlie Brown')
);
$smarty->assign('mySelect', 9904);
?>
]]>
</programlisting>
<para>
以下のテンプレートはドロップダウンリストを作成します。
<parameter>name</parameter> 属性が存在することで
<literal>&lt;select&gt;</literal> タグが作成されることに注意しましょう。
</para>
<programlisting>
<![CDATA[
{html_options name=foo options=$myOptions selected=$mySelect}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
<select name="foo">
<option label="Joe Schmoe" value="1800">Joe Schmoe</option>
<option label="Jack Smith" value="9904" selected="selected">Jack Smith</option>
<option label="Charlie Brown" value="2003">Charlie Brown</option>
</select>
]]>
</screen>
</example>
<example>
<title><varname>values</varname>
<varname>ouptut</varname> を個別の配列で指定したドロップダウン</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_ids', array(56,92,13));
$smarty->assign('cust_names', array(
'Joe Schmoe',
'Jane Johnson',
'Charlie Brown'));
$smarty->assign('customer_id', 92);
?>
]]>
</programlisting>
<para>
上の配列を次のテンプレートで出力します
(PHP の <ulink url="&url.php-manual;function.count">
<varname>count()</varname></ulink> 関数を修飾子として使用することで、
select の大きさを設定していることに注意しましょう)。
</para>
<programlisting>
<![CDATA[
<select name="customer_id" size="{$cust_names|@count}">
{html_options values=$cust_ids output=$cust_names selected=$customer_id}
</select>
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
<select name="customer_id">
<option label="Joe Schmoe" value="56">Joe Schmoe</option>
<option label="Jack Smith" value="92" selected="selected">Jane Johnson</option>
<option label="Charlie Brown" value="13">Charlie Brown</option>
</select>
]]>
</screen>
</example>
<example>
<title>データベース (ADODB あるいは PEAR) の例</title>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'select type_id, types from contact_types order by type';
$smarty->assign('contact_types',$db->getAssoc($sql));
$sql = 'select contact_id, name, email, contact_type_id
from contacts where contact_id='.$contact_id;
$smarty->assign('contact',$db->getRow($sql));
?>
]]>
</programlisting>
<para>
テンプレートは次のようになります。
<link linkend="language.modifier.truncate"><varname>truncate</varname></link>
修飾子の使用法に注意しましょう。
</para>
<programlisting>
<![CDATA[
<select name="type_id">
<option value='null'>-- none --</option>
{html_options options=$contact_types|truncate:20 selected=$contact.type_id}
</select>
]]>
</programlisting>
</example>
<example>
<title>&lt;optgroup&gt; を使用したドロップダウン</title>
<programlisting role="php">
<![CDATA[
<?php
$arr['Sport'] = array(6 => 'Golf', 9 => 'Cricket',7 => 'Swim');
$arr['Rest'] = array(3 => 'Sauna',1 => 'Massage');
$smarty->assign('lookups', $arr);
$smarty->assign('fav', 7);
?>
]]>
</programlisting>
<para>テンプレート
</para>
<programlisting>
<![CDATA[
{html_options name=foo options=$lookups selected=$fav}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<select name="foo">
<optgroup label="Sport">
<option label="Golf" value="6">Golf</option>
<option label="Cricket" value="9">Cricket</option>
<option label="Swim" value="7" selected="selected">Swim</option>
</optgroup>
<optgroup label="Rest">
<option label="Sauna" value="3">Sauna</option>
<option label="Massage" value="1">Massage</option>
</optgroup>
</select>
]]>
</screen>
</example>
<para>
<link linkend="language.function.html.checkboxes"><varname>{html_checkboxes}</varname></link>
および
<link linkend="language.function.html.radios"><varname>{html_radios}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,225 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.18 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.radios">
<title>{html_radios}</title>
<para>
<varname>{html_radios}</varname>
HTML のラジオボタングループを作成する
<link linkend="language.custom.functions">カスタム関数</link>
です。デフォルトで選択されているアイテムの指定も考慮します。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>name</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>radio</emphasis></entry>
<entry>ラジオリストの名前</entry>
</row>
<row>
<entry>values</entry>
<entry>array</entry>
<entry>Yes (options属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ラジオボタンの値の配列</entry>
</row>
<row>
<entry>output</entry>
<entry>array</entry>
<entry>Yes (options属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ラジオボタンの項目内容の配列</entry>
</row>
<row>
<entry>selected</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>あらかじめ選択されたラジオ要素</entry>
</row>
<row>
<entry>options</entry>
<entry>associative array</entry>
<entry>Yes (valuesとoutput属性を用いない場合)</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>values属性とoutput属性の連想配列</entry>
</row>
<row>
<entry>separator</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>各ラジオアイテムを区分するための文字列</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>radio タグを配列に格納し、出力はしない</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
<parameter>options</parameter> を使用しない場合は
<parameter>values</parameter> および
<parameter>output</parameter> が必須となります。
</para></listitem>
<listitem><para>
全ての出力は XHTML に準拠しています。
</para></listitem>
<listitem><para>
前述の属性リストに無いパラメータが与えられた場合は、
作成された各 <literal>&lt;input&gt;</literal> タグの内側に
名前/値 のペアで表されます。
</para></listitem>
</itemizedlist>
<example>
<title>{html_radios} の最初の例</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_ids', array(1000,1001,1002,1003));
$smarty->assign('cust_names', array(
'Joe Schmoe',
'Jack Smith',
'Jane Johnson',
'Charlie Brown')
);
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{html_radios name='id' values=$cust_ids output=$cust_names
selected=$customer_id separator='<br />'}
]]>
</programlisting>
</example>
<example>
<title>{html_radios} の二番目の例</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('cust_radios', array(
1000 => 'Joe Schmoe',
1001 => 'Jack Smith',
1002 => 'Jane Johnson',
1003 => 'Charlie Brown'));
$smarty->assign('customer_id', 1001);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{html_radios name='id' options=$cust_radios
selected=$customer_id separator='<br />'}
]]>
</programlisting>
<para>
どちらも、次のように出力します。
</para>
<screen>
<![CDATA[
<label for="id_1000">
<input type="radio" name="id" value="1000" id="id_1000" />Joe Schmoe</label><br />
<label for="id_1001"><input type="radio" name="id" value="1001" id="id_1001" checked="checked" />Jack Smith</label><br />
<label for="id_1002"><input type="radio" name="id" value="1002" id="id_1002" />Jane Johnson</label><br />
<label for="id_1003"><input type="radio" name="id" value="1003" id="id_1003" />Charlie Brown</label><br />
]]>
</screen>
</example>
<example>
<title>{html_radios} - データベース (PEAR あるいは ADODB) の例</title>
<programlisting role="php">
<![CDATA[
<?php
$sql = 'select type_id, types from contact_types order by type';
$smarty->assign('contact_types',$db->getAssoc($sql));
$sql = 'select contact_id, name, email, contact_type_id '
.'from contacts where contact_id='.$contact_id;
$smarty->assign('contact',$db->getRow($sql));
?>
]]>
</programlisting>
<para>
データベースから割り当てた変数を、次のテンプレートで出力します。
</para>
<programlisting>
<![CDATA[
{html_radios name='contact_type_id' options=$contact_types
selected=$contact.contact_type_id separator='<br />'}
]]>
</programlisting>
</example>
<para>
<link
linkend="language.function.html.checkboxes"><varname>{html_checkboxes}</varname></link>
および <link
linkend="language.function.html.options"><varname>{html_options}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,347 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.select.date">
<title>{html_select_date}</title>
<para>
<varname>{html_select_date}</varname> は、日付のドロップダウンリストを作成する
<link linkend="language.custom.functions">カスタム関数</link> です。
年・月・日のいずれか又は全てを表示する事が出来ます。
以下の属性リストに無いパラメータが与えられた場合は、
作成された年、月、日の各 <literal>&lt;select&gt;</literal> タグの内側に
名前/値 のペアで表されます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>prefix</entry>
<entry>string</entry>
<entry>No</entry>
<entry>Date_</entry>
<entry>name属性に付加する接頭辞</entry>
</row>
<row>
<entry>time</entry>
<entry>timestamp/ YYYY-MM-DD</entry>
<entry>No</entry>
<entry>UNIXタイムスタンプ又はYYYY-MM-DDフォーマットによる現在の時間</entry>
<entry>使用する日付/時間</entry>
</row>
<row>
<entry>start_year</entry>
<entry>string</entry>
<entry>No</entry>
<entry>現在の年</entry>
<entry>ドロップダウンリストの始めの年
(年を表す数字又は現在の年からの相対年数(+/- N))</entry>
</row>
<row>
<entry>end_year</entry>
<entry>string</entry>
<entry>No</entry>
<entry>start_yearと同じ</entry>
<entry>ドロップダウンリストの終わりの年
(年を表す数字又は現在の年からの相対年数(+/- N))</entry>
</row>
<row>
<entry>display_days</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>日を表示するかどうか</entry>
</row>
<row>
<entry>display_months</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>月を表示するかどうか</entry>
</row>
<row>
<entry>display_years</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>年を表示するかどうか</entry>
</row>
<row>
<entry>month_format</entry>
<entry>string</entry>
<entry>No</entry>
<entry>%B</entry>
<entry>月の表示フォーマット(strftime)</entry>
</row>
<row>
<entry>day_format</entry>
<entry>string</entry>
<entry>No</entry>
<entry>%02d</entry>
<entry>日の出力のフォーマット(sprintf)</entry>
</row>
<row>
<entry>day_value_format</entry>
<entry>string</entry>
<entry>No</entry>
<entry>%d</entry>
<entry>日の値のフォーマット (sprintf)</entry>
</row>
<row>
<entry>year_as_text</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>年をテキストとして表示するかどうか</entry>
</row>
<row>
<entry>reverse_years</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>年を逆順で表示する</entry>
</row>
<row>
<entry>field_array</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>
name属性が与えられた場合、結果の値を
name[Day],name[Month],name[Year]の形の連想配列にしてPHPに返す
</entry>
</row>
<row>
<entry>day_size</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>日のselectタグにsize属性を追加</entry>
</row>
<row>
<entry>month_size</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>月のselectタグにsize属性を追加</entry>
</row>
<row>
<entry>year_size</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>年のselectタグにsize属性を追加</entry>
</row>
<row>
<entry>all_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>全てのselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>day_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>日のselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>month_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>月のselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>year_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>年のselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>field_order</entry>
<entry>string</entry>
<entry>No</entry>
<entry>MDY</entry>
<entry>フィールドを表示する順序</entry>
</row>
<row>
<entry>field_separator</entry>
<entry>string</entry>
<entry>No</entry>
<entry>\n</entry>
<entry>フィールド間に表示する文字列</entry>
</row>
<row>
<entry>month_value_format</entry>
<entry>string</entry>
<entry>No</entry>
<entry>%m</entry>
<entry>strftime() フォーマットによる月の値(デフォルトは%m</entry>
</row>
<row>
<entry>year_empty</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>
年のセレクトボックスの最初の要素に、指定した文字列をlabelとして、
空文字 <quote></quote> のvalueを持たせます。
例えば、セレクトボックスに <quote>年を選択して下さい</quote> と表示させる時に便利です。
年を選択しないことを示唆するのに、time属性に対して <quote>-MM-DD</quote>
という値が指定できることに注意してください。</entry>
</row>
<row>
<entry>month_empty</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>
月のセレクトボックスの最初の要素に、指定した文字列をlabelとして、
空文字 <quote></quote> のvalueを持たせます。月を選択しないことを示唆するのに、
time属性に対して <quote>YYYY--DD</quote> という値が指定できることに注意してください。</entry>
</row>
<row>
<entry>day_empty</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>
日のセレクトボックスの最初の要素に、指定した文字列をlabelとして、
空文字 <quote></quote> のvalueを持たせます。日を選択しないことを示唆するのに、
time属性に対して <quote>YYYY-MM-</quote> という値が指定できることに注意してください。</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<note>
<para>
<link linkend="tips.dates">日付に関するヒント</link>
のページに、<varname>{html_select_date}</varname>
の値をタイムスタンプに変換する便利な php 関数が紹介されています。
</para>
</note>
<example>
<title>{html_select_date}</title>
<para>テンプレートのコード</para>
<programlisting>
<![CDATA[
{html_select_date}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
<select name="Date_Month">
<option value="1">January</option>
<option value="2">February</option>
<option value="3">March</option>
..... 省略 .....
<option value="10">October</option>
<option value="11">November</option>
<option value="12" selected="selected">December</option>
</select>
<select name="Date_Day">
<option value="1">01</option>
<option value="2">02</option>
<option value="3">03</option>
..... 省略 .....
<option value="11">11</option>
<option value="12">12</option>
<option value="13" selected="selected">13</option>
<option value="14">14</option>
<option value="15">15</option>
..... 省略 .....
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="Date_Year">
<option value="2006" selected="selected">2006</option>
</select>
]]>
</screen>
</example>
<example>
<title>{html_select_date} の二番目の例</title>
<programlisting>
<![CDATA[
{* 開始年および終了年は、現在の年からの相対値となります *}
{html_select_date prefix='StartDate' time=$time start_year='-5'
end_year='+1' display_days=false}
]]>
</programlisting>
<para>
現在が西暦 2000 だとすると、出力は次のようになります。
</para>
<screen>
<![CDATA[
<select name="StartDateMonth">
<option value="1">January</option>
<option value="2">February</option>
.... 省略 ....
<option value="11">November</option>
<option value="12" selected="selected">December</option>
</select>
<select name="StartDateYear">
<option value="1995">1995</option>
.... 省略 ....
<option value="1999">1999</option>
<option value="2000" selected="selected">2000</option>
<option value="2001">2001</option>
</select>
]]>
</screen>
</example>
<para>
<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>
および <link linkend="tips.dates">日付に関するヒント</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,223 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.select.time">
<title>{html_select_time}</title>
<para>
<varname>{html_select_time}</varname> は、時間のドロップダウンリストを作成する
<link linkend="language.custom.functions">カスタム関数</link> です。
時・分・秒・am/pm のいずれか又は全てを表示する事が出来ます。
</para>
<para>
<parameter>time</parameter> 属性にはUNIXタイムスタンプや
<literal>YYYYMMDDHHMMSS</literal> 形式の文字列、PHP の
<ulink url="&url.php-manual;strtotime"><varname>strtotime()</varname></ulink>
によって解析可能な文字列のような異なるフォーマットを持たせる事が出来ます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>prefix</entry>
<entry>string</entry>
<entry>No</entry>
<entry>Time_</entry>
<entry>name属性に付加する接頭辞</entry>
</row>
<row>
<entry>time</entry>
<entry>timestamp</entry>
<entry>No</entry>
<entry>現在の時間</entry>
<entry>使用する日付/時間</entry>
</row>
<row>
<entry>display_hours</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>時を表示するかどうか</entry>
</row>
<row>
<entry>display_minutes</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>分を表示するかどうか</entry>
</row>
<row>
<entry>display_seconds</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>秒を表示するかどうか</entry>
</row>
<row>
<entry>display_meridian</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>am/pm を表示するかどうか</entry>
</row>
<row>
<entry>use_24_hours</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>24 時間クロックを用いるかどうか</entry>
</row>
<row>
<entry>minute_interval</entry>
<entry>integer</entry>
<entry>No</entry>
<entry>1</entry>
<entry>ドロップダウンリストの分間隔</entry>
</row>
<row>
<entry>second_interval</entry>
<entry>integer</entry>
<entry>No</entry>
<entry>1</entry>
<entry>ドロップダウンリストの秒間隔</entry>
</row>
<row>
<entry>field_array</entry>
<entry>string</entry>
<entry>No</entry>
<entry>n/a</entry>
<entry>結果の値をこの名前の配列に渡して出力</entry>
</row>
<row>
<entry>all_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>全てのselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>hour_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>時間のselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>minute_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>分のselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>second_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>秒のselect/inputタグに拡張属性を追加</entry>
</row>
<row>
<entry>meridian_extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry>null</entry>
<entry>am/pmのselect/inputタグに拡張属性を追加</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{html_select_time}</title>
<programlisting>
<![CDATA[
{html_select_time use_24_hours=true}
]]>
</programlisting>
<para>
現在時刻が午前 9 時 20 分 23 秒だとすると、このテンプレートの出力は次のようになります。
</para>
<screen>
<![CDATA[
<select name="Time_Hour">
<option value="00">00</option>
<option value="01">01</option>
... 省略 ....
<option value="08">08</option>
<option value="09" selected>09</option>
<option value="10">10</option>
... 省略 ....
<option value="22">22</option>
<option value="23">23</option>
</select>
<select name="Time_Minute">
<option value="00">00</option>
<option value="01">01</option>
... 省略 ....
<option value="19">19</option>
<option value="20" selected>20</option>
<option value="21">21</option>
... 省略 ....
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Second">
<option value="00">00</option>
<option value="01">01</option>
... 省略 ....
<option value="22">22</option>
<option value="23" selected>23</option>
<option value="24">24</option>
... 省略 ....
<option value="58">58</option>
<option value="59">59</option>
</select>
<select name="Time_Meridian">
<option value="am" selected>AM</option>
<option value="pm">PM</option>
</select>
]]>
</screen>
</example>
<para>
<link linkend="language.variables.smarty.now"><parameter>$smarty.now</parameter></link>
<link linkend="language.function.html.select.date"><varname>{html_select_date}</varname></link>
および <link linkend="tips.dates">日付に関するヒントのページ</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,247 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.12 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.html.table">
<title>{html_table}</title>
<para>
<varname>{html_table}</varname> は、HTML の
<literal>&lt;table&gt;</literal> にデータの配列を出力する
<link linkend="language.custom.functions">カスタム関数</link> です。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>loop</entry>
<entry>array</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ループに用いるデータ配列</entry>
</row>
<row>
<entry>cols</entry>
<entry>mixed</entry>
<entry>No</entry>
<entry><emphasis>3</emphasis></entry>
<entry>
テーブルのカラム数。cols属性は空であるがrows属性が与えられたという場合、
colsの数は、すべての要素を表示するのに事足りるcolsが表示されるように
rowsの数と要素の数によって計算されます。
rowsとcolsの両方が空だった場合、 colsのデフォルトは 3 として計算は省かれます。
リストあるいは配列を渡すと、そのリストあるいは配列の要素数がカラム数となります。
</entry>
</row>
<row>
<entry>rows</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>
テーブルの行数。rows属性は空であるがcols属性が与えられたという場合、
rowsの数は、すべての要素を表示するのに事足りるrowsが表示されるように
colsの数と要素の数によって計算されます。
</entry>
</row>
<row>
<entry>inner</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>cols</emphasis></entry>
<entry>
ループ配列から参照される連続要素の進行方向。
<emphasis>cols</emphasis> なら要素が列方向へ、
<emphasis>rows</emphasis> なら要素が行方向へ記述されることを意味します。
</entry>
</row>
<row>
<entry>caption</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>テーブルの <literal>&lt;caption&gt;</literal>
要素に使用する文字列</entry>
</row>
<row>
<entry>table_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>border="1"</emphasis></entry>
<entry><literal>&lt;table&gt;</literal> タグの属性</entry>
</row>
<row>
<entry>th_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry><literal>&lt;th&gt;</literal> タグの属性
(配列は循環します)</entry>
</row>
<row>
<entry>tr_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry><literal>&lt;tr&gt;</literal> タグの属性
(配列は循環します)</entry>
</row>
<row>
<entry>td_attr</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry><literal>&lt;td&gt;</literal> タグの属性
(配列は循環します)</entry>
</row>
<row>
<entry>trailpad</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>&amp;nbsp;</emphasis></entry>
<entry>行の最後に余ったセルがあればそれらを埋めるのに用いられる値</entry>
</row>
<row>
<entry>hdir</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>right</emphasis></entry>
<entry>
各行の表示される方向。有効な値:
<emphasis>right</emphasis> (左から右へ)、
<emphasis>left</emphasis> (右から左へ)
</entry>
</row>
<row>
<entry>vdir</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>down</emphasis></entry>
<entry>
各カラムの表示される方向。有効な値:
<emphasis>down</emphasis> (上から下へ)、
<emphasis>up</emphasis> (下から上へ)
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<itemizedlist>
<listitem><para>
<parameter>cols</parameter> 属性は、テーブルのカラム数を定義します。
</para></listitem>
<listitem><para>
<parameter>table_attr</parameter><parameter>tr_attr</parameter>
および <parameter>td_attr</parameter> の値は、それぞれ
<literal>&lt;table&gt;</literal><literal>&lt;tr&gt;</literal>
および <literal>&lt;td&gt;</literal> タグの属性を表します。
</para></listitem>
<listitem><para>
<parameter>tr_attr</parameter><parameter>td_attr</parameter>
が配列の場合は、循環して処理します。
</para></listitem>
<listitem><para>
<parameter>trailpad</parameter> は、テーブルの最後の行でセルが余った場合に
そこを埋める値として使用します。
</para></listitem>
</itemizedlist>
<example>
<title>{html_table}</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign( 'data', array(1,2,3,4,5,6,7,8,9) );
$smarty->assign( 'tr', array('bgcolor="#eeeeee"','bgcolor="#dddddd"') );
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>PHP から割り当てられた変数の内容を、三通りの方法で出力します。
それぞれ、テンプレートの後に出力結果を続けます。
</para>
<programlisting>
<![CDATA[
{**** 例 1 ****}
{html_table loop=$data}
<table border="1">
<tbody>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</tbody>
</table>
{**** 例 2 ****}
{html_table loop=$data cols=4 table_attr='border="0"'}
<table border="0">
<tbody>
<tr><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</tbody>
</table>
{**** 例 3 ****}
{html_table loop=$data cols="first,second,third,fourth" tr_attr=$tr}
<table border="1">
<thead>
<tr>
<th>first</th><th>second</th><th>third</th><th>fourth</th>
</tr>
</thead>
<tbody>
<tr bgcolor="#eeeeee"><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr bgcolor="#dddddd"><td>5</td><td>6</td><td>7</td><td>8</td></tr>
<tr bgcolor="#eeeeee"><td>9</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
</tbody>
</table>
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,176 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.mailto">
<title>{mailto}</title>
<para>
<varname>{mailto}</varname> は、<literal>mailto:</literal>
リンクの作成とメールアドレスのエンコードを自動的に行います。
メールアドレスをエンコードすることで、
アドレス収集ソフトがあなたのサイトからメールアドレスを取得することを困難にします。
<note>
<title>テクニカルノート</title>
<para>
Javascript がおそらく一番徹底したエンコードを行いますが、
hexエンコードも使用する事が出来ます。
</para>
</note>
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>address</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>メールアドレス</entry>
</row>
<row>
<entry>text</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>表示するテキスト。デフォルトではメールアドレス。</entry>
</row>
<row>
<entry>encode</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>none</emphasis></entry>
<entry>メールアドレスのエンコード方法。
<literal>none</literal>
<literal>hex</literal><literal>javascript</literal>
あるいは <literal>javascript_charcode</literal>
のいずれか。</entry>
</row>
<row>
<entry>cc</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>カーボンコピーにあたるメールアドレス。 複数の場合はカンマによって区切られる。
</entry>
</row>
<row>
<entry>bcc</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ブラインドカーボンコピーにあたるメールアドレス。
複数の場合はカンマによって区切られる。</entry>
</row>
<row>
<entry>subject</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>メールの件名</entry>
</row>
<row>
<entry>newsgroups</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>投稿するニュースグループ。複数の場合はカンマによって区切られる。</entry>
</row>
<row>
<entry>followupto</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>フォローアップするメールアドレス。複数の場合はカンマによって区切られる。</entry>
</row>
<row>
<entry>extra</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>リンクする際に渡したい特別な情報(例えばスタイルシートクラス)。</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{mailto} のサンプルと、その結果</title>
<programlisting>
<![CDATA[
{mailto address="me@example.com"}
<a href="mailto:me@example.com" >me@example.com</a>
{mailto address="me@example.com" text="send me some mail"}
<a href="mailto:me@example.com" >send me some mail</a>
{mailto address="me@example.com" encode="javascript"}
<script type="text/javascript" language="javascript">
eval(unescape('%64%6f% ... snipped ...%61%3e%27%29%3b'))
</script>
{mailto address="me@example.com" encode="hex"}
<a href="mailto:%6d%65.. snipped..3%6f%6d">&#x6d;&..snipped...#x6f;&#x6d;</a>
{mailto address="me@example.com" subject="Hello to you!"}
<a href="mailto:me@example.com?subject=Hello%20to%20you%21" >me@example.com</a>
{mailto address="me@example.com" cc="you@example.com,they@example.com"}
<a href="mailto:me@example.com?cc=you@example.com%2Cthey@example.com" >me@example.com</a>
{mailto address="me@example.com" extra='class="email"'}
<a href="mailto:me@example.com" class="email">me@example.com</a>
{mailto address="me@example.com" encode="javascript_charcode"}
<script type="text/javascript" language="javascript">
<!--
{document.write(String.fromCharCode(60,97, ... snipped ....60,47,97,62))}
//-->
</script>
]]>
</programlisting>
</example>
<para>
<link linkend="language.modifier.escape"><varname>escape</varname></link>
<link linkend="language.function.textformat"><varname>{textformat}</varname></link>
および
<link linkend="tips.obfuscating.email">E-mail アドレスを混乱させる</link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,204 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.math">
<title>{math}</title>
<para>
<varname>{math}</varname> を使用すると、
テンプレートのデザイナーがテンプレート内で数学の計算を実行できます。
</para>
<itemizedlist>
<listitem><para>
式の中では、数値型のテンプレート変数を使用でき、結果はタグの位置に出力されます。
</para></listitem>
<listitem><para>
式で使用する変数はパラメータとして渡します。
これはテンプレート変数あるいは静的な値のいずれかとなります。
</para></listitem>
<listitem><para>+, -, /, *, abs, ceil, cos, exp, floor, log, log10, max, min,
pi, pow, rand, round, sin, sqrt, srans および tan を使用できます。
これらの詳細については、PHP の
<ulink url="&url.php-manual;eval">数学</ulink> 関数のマニュアルを参照してください。
</para></listitem>
<listitem><para>
<parameter>assign</parameter> 属性を指定すると、
<varname>{math}</varname> 関数の出力はテンプレート変数に格納され、
テンプレートには出力されません。
</para></listitem>
</itemizedlist>
<note>
<title>テクニカルノート</title>
<para>
<varname>{math}</varname> は PHP の
<ulink url="&url.php-manual;eval"><varname>eval()</varname></ulink>
関数を使用するのでパフォーマンス的にコストの高い関数です。
PHP 内で math 関数を実行する事は、テンプレートで行うよりもはるかに効率的で、
mathの計算がPHPで可能な場合はPHPで行い、結果をテンプレートに
<link linkend="api.assign"><varname>assign()</varname></link> するようにしましょう。
<link linkend="language.function.section">
<varname>{section}</varname></link> ループ内のような反復動作で
<varname>{math}</varname> 関数を呼び出す事は避けて下さい。
</para>
</note>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>equation</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>実行する式</entry>
</row>
<row>
<entry>format</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>結果の表示フォーマット (sprintf)</entry>
</row>
<row>
<entry>var</entry>
<entry>numeric</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>式の変数に渡す値</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力を割り当てるテンプレート変数</entry>
</row>
<row>
<entry>[var ...]</entry>
<entry>numeric</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>式の変数の値</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{math}</title>
<para>
<emphasis role="bold">サンプル a:</emphasis>
</para>
<programlisting>
<![CDATA[
{* $height=4, $width=5 *}
{math equation="x + y" x=$height y=$width}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
9
]]>
</screen>
<para>
<emphasis role="bold">サンプル b:</emphasis>
</para>
<programlisting>
<![CDATA[
{* $row_height = 10, $row_width = 20, #col_div# = 2, テンプレートで割り当てます *}
{math equation="height * width / division"
height=$row_height
width=$row_width
division=#col_div#}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
100
]]>
</screen>
<para>
<emphasis role="bold">サンプル c:</emphasis>
</para>
<programlisting>
<![CDATA[
{* 括弧も使用できます *}
{math equation="(( x + y ) / z )" x=2 y=10 z=2}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
6
]]>
</screen>
<para>
<emphasis role="bold">サンプル d:</emphasis>
</para>
<programlisting>
<![CDATA[
{* sprintf 形式のフォーマット文字列を指定できます *}
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
9.44
]]>
</screen>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.popup.init">
<title>{popup_init}</title>
<para>
<link linkend="language.function.popup"><varname>{popup}</varname></link>
は、ポップアップウィンドウ用のライブラリである
<ulink url="&url.overLib;">overLib</ulink> と統合しています。
これは、ヘルプウィンドウやツールチップといった状況依存の情報を表示するために使用します。
</para>
<itemizedlist>
<listitem><para>
<varname>{popup_init}</varname> は、<link linkend="language.function.popup">
<varname>{popup}</varname></link> 関数を使用する予定のページ内で
<emphasis>一度だけ</emphasis> 呼び出す必要があります。呼び出す場所としては
<literal>&lt;head&gt;</literal> タグの中がお勧めです。
</para></listitem>
<listitem><para>
パスは、実行するスクリプトの場所からの相対パスか、あるいは完全修飾形式のパスとなります。
テンプレートからの相対パスではありません。
</para></listitem>
<listitem><para>
<ulink url="&url.overLib;">overLib</ulink> の作者は
Erik Bosrup で、ホームページ/ダウンロード先は
<ulink url="&url.overLib;">&url.overLib;</ulink> です。
</para></listitem>
</itemizedlist>
<example>
<title>{popup_init}</title>
<programlisting>
<![CDATA[
<head>
{* popup_init は、ページの先頭で一度だけ呼ばれる必要があります。 *}
{popup_init src='javascripts/overlib/overlib.js'}
{* 完全修飾形式の url の例 *}
{popup_init src='http://myserver.org/my_js_libs/overlib/overlib.js'}
</head>
// 最初の例の出力
<head>
<div id="overDiv" style="position:absolute; visibility:hidden; z-index:1000;"></div>
<script type="text/javascript" language="JavaScript" src="javascripts/overlib/overlib.js"></script>
</head>
]]>
</programlisting>
</example>
<note>
<title>XHTML の検証</title>
<para><literal>{popup_init}</literal>
strict な検証を行いません。strict で検証すると
<literal>document type does not allow element "div" here;</literal>
というエラーが出るでしょう
(<literal>&lt;div&gt;</literal> タグを <literal>&lt;head&gt;</literal>
の中で使用しているからです)。
つまり、<literal>&lt;script&gt;</literal> タグと
<literal>&lt;div&gt;</literal> タグを手動で追加する必要があります。
</para>
</note>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,436 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.popup">
<title>{popup}</title>
<para>
<varname>{popup}</varname> を使用して、Javascript のポップアップウィンドウを作成します。
<link linkend="language.function.popup.init">
<varname>{popup_init}</varname></link> は、この動作の最初に呼び出される必要があります。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>text</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップウィンドウ中に表示するtext/html</entry>
</row>
<row>
<entry>trigger</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>onMouseOver</emphasis></entry>
<entry>ポップアップウィンドウを起動するトリガーonMouseOver又はonClick</entry>
</row>
<row>
<entry>sticky</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>閉じられるまでポップアップを待機させる</entry>
</row>
<row>
<entry>caption</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>タイトルにセットする見出し</entry>
</row>
<row>
<entry>fgcolor</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップボックスの内部の色</entry>
</row>
<row>
<entry>bgcolor</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップボックスの枠線の色</entry>
</row>
<row>
<entry>textcolor</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップボックス内部のテキストの色</entry>
</row>
<row>
<entry>capcolor</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップボックスの見出しのテキストの色</entry>
</row>
<row>
<entry>closecolor</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>closeテキストの色</entry>
</row>
<row>
<entry>textfont</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>メインテキストで使用されるフォントの種類</entry>
</row>
<row>
<entry>captionfont</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>見出しで使用されるフォント</entry>
</row>
<row>
<entry>closefont</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry><quote>Close</quote> テキストのフォント</entry>
</row>
<row>
<entry>textsize</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>メインテキストのフォントサイズ</entry>
</row>
<row>
<entry>captionsize</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>見出しテキストのフォントサイズ</entry>
</row>
<row>
<entry>closesize</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry><quote>Close</quote> テキストのフォントサイズ</entry>
</row>
<row>
<entry>width</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ボックスの幅</entry>
</row>
<row>
<entry>height</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ボックスの高さ</entry>
</row>
<row>
<entry>left</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>ポップアップをマウスの左側に表示</entry>
</row>
<row>
<entry>right</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>ポップアップをマウスの右側に表示</entry>
</row>
<row>
<entry>center</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>ポップアップをマウスの中央に表示</entry>
</row>
<row>
<entry>above</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>ポップアップをマウスの上側に表示
(注: heightがセットされている場合のみ有効)</entry>
</row>
<row>
<entry>below</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>ポップアップをマウスの下側に表示</entry>
</row>
<row>
<entry>border</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの枠線の幅</entry>
</row>
<row>
<entry>offsetx</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポインタから水平にどれくらい離れた位置にポップアップを表示するか</entry>
</row>
<row>
<entry>offsety</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポインタから垂直にどれくらい離れた位置にポップアップを表示するか</entry>
</row>
<row>
<entry>fgbackground</entry>
<entry>url to image</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの内部に色の代わりに表示する画像</entry>
</row>
<row>
<entry>bgbackground</entry>
<entry>url to image</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの境界に色の代わりに表示する画像。
(注:bgcolor や colorを <quote></quote> にしたほうがよい)
(注:Closeリンクを使用する場合、Netscape
ではテーブルのセルが再描写されて誤った表示になることがあります)</entry>
</row>
<row>
<entry>closetext</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry><quote>Close</quote> テキストの代替として使用する文字列</entry>
</row>
<row>
<entry>noclose</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>sticky属性がtrueに設定されているポップアップの見出しに
<quote>Close</quote> テキストを表示しない</entry>
</row>
<row>
<entry>status</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ブラウザのステータスバーに表示する文字列</entry>
</row>
<row>
<entry>autostatus</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップのテキストをステータスバーのテキストとして設定する
(注: statusの設定をオーバーライドします)</entry>
</row>
<row>
<entry>autostatuscap</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの見出しテキストをステータスバーのテキストとして設定する
(注: statusとautostatusの設定をオーバーライドします)</entry>
</row>
<row>
<entry>inarray</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>overlib.js 内にある ol_array 配列中の指定したインデックスから、
text を読み込む (このパラメータはtextの代わりに使用されます)</entry>
</row>
<row>
<entry>caparray</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>overlib.js 内にある ol_caps 配列中の指定したインデックスから、
caption を読み込む</entry>
</row>
<row>
<entry>capicon</entry>
<entry>url</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの見出しの前に画像を表示する</entry>
</row>
<row>
<entry>snapx</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップを水平グリッドにスナップする</entry>
</row>
<row>
<entry>snapy</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップを垂直グリッドにスナップする</entry>
</row>
<row>
<entry>fixx</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの水平の位置を固定する
(注: 他の全ての水平の位置に関する属性はオーバーライドされます)</entry>
</row>
<row>
<entry>fixy</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップの垂直の位置を固定する
(注: 他の全ての垂直の位置に関する属性はオーバーライドされます)</entry>
</row>
<row>
<entry>background</entry>
<entry>url</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>テーブルボックスの背景の代わりに画像をセットする</entry>
</row>
<row>
<entry>padx</entry>
<entry>integer,integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>水平のホワイトスペースによって背景画像の表示領域を大きくする
(注: 2つのパラメータが必要)</entry>
</row>
<row>
<entry>pady</entry>
<entry>integer,integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>垂直のホワイトスペースによって背景画像の表示領域を大きくする
(注: 2つのパラメータが必要)</entry>
</row>
<row>
<entry>fullhtml</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>背景画像上でHTMLを完全にコントロールする (HTML コードは
<quote>text</quote> 属性に記述する)</entry>
</row>
<row>
<entry>frame</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>異なるフレームにおけるポップアップを操作する
(詳細はoverlibのサイトを参照)</entry>
</row>
<row>
<entry>function</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>指定した Javascript 関数を呼び出し、
その返り値をポップアップウィンドウに表示する</entry>
</row>
<row>
<entry>delay</entry>
<entry>integer</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップをツールチップ風に表示する。
設定した遅延 (ミリ秒) の後にポップアップします。</entry>
</row>
<row>
<entry>hauto</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップがマウスの左側か右側のどちらに位置するべきかを自動的に決定する</entry>
</row>
<row>
<entry>vauto</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>ポップアップがマウスの上側か下側のどちらに位置するべきかを自動的に決定する</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{popup}</title>
<programlisting>
<![CDATA[
{* popup_initはページの先頭で一度だけ呼び出す必要があります *}
{popup_init src='/javascripts/overlib.js'}
{* マウスが重なった時にポップアップによる説明が表示されるリンクを作成します *}
<a href="mypage.html" {popup text='This link takes you to my page!'}>mypage</a>
{* popupのtextにhtmlやlinksを用いる事ができます *}
<a href="mypage.html" {popup sticky=true caption='mypage contents'
text="<ul><li>links</li><li>pages</li><li>images</li></ul>"
snapx=10 snapy=10 trigger='onClick'}>mypage</a>
{* テーブルのセルの上でポップアップします *}
<tr><td {popup caption='Part details' text=$part_long_description}>{$part_number}</td></tr>
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.capture"><varname>{capture}</varname>
</link> のページにもよい例があります。</para>
<para>
<link linkend="language.function.popup.init"><varname>{popup_init}</varname></link>
および
<ulink url="&url.overLib;">overLib</ulink> のホームページも参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,297 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.function.textformat">
<title>{textformat}</title>
<para>
<varname>{textformat}</varname> は、
テキストを整形するために用いる
<link linkend="plugins.block.functions">ブロック関数</link> です。
これは基本的に空白と特殊文字を取り除き、
境界でラップして行をインデントする事によって段落を整形します。
</para>
<para>
明示的にパラメータを設定したり、あらかじめ決められたスタイルを使用したりできます。現在、
<quote>email</quote> のみが有効なスタイルです。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>属性名</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>style</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>あらかじめ決められたスタイル</entry>
</row>
<row>
<entry>indent</entry>
<entry>number</entry>
<entry>No</entry>
<entry><emphasis>0</emphasis></entry>
<entry>各行をインデントするキャラクタ数</entry>
</row>
<row>
<entry>indent_first</entry>
<entry>number</entry>
<entry>No</entry>
<entry><emphasis>0</emphasis></entry>
<entry>最初の行をインデントするキャラクタ数</entry>
</row>
<row>
<entry>indent_char</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>(半角スペース1個)</emphasis></entry>
<entry>インデントするために使われるキャラクタ(又は文字列)</entry>
</row>
<row>
<entry>wrap</entry>
<entry>number</entry>
<entry>No</entry>
<entry><emphasis>80</emphasis></entry>
<entry>各行をいくつのキャラクタ数でラップするか</entry>
</row>
<row>
<entry>wrap_char</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>\n</emphasis></entry>
<entry>各行を分割するためのキャラクタ(又は文字列)</entry>
</row>
<row>
<entry>wrap_cut</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry><emphasis>&false;</emphasis></entry>
<entry>&true; ならば、単語の境界の代わりに正確なキャラクタ数で行を分割します。</entry>
</row>
<row>
<entry>assign</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>出力が割り当てられるテンプレート変数</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>{textformat}</title>
<programlisting>
<![CDATA[
{textformat wrap=40}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
This is foo. This is foo. This is foo.
This is foo. This is foo. This is foo.
This is bar.
bar foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo.
]]>
</screen>
<programlisting>
<![CDATA[
{textformat wrap=40 indent=4}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
This is foo. This is foo. This is
foo. This is foo. This is foo. This
is foo.
This is bar.
bar foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo.
bar foo bar foo foo. bar foo bar
foo foo.
]]>
</screen>
<programlisting>
<![CDATA[
{textformat wrap=40 indent=4 indent_first=4}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
This is foo. This is foo. This
is foo. This is foo. This is foo.
This is foo.
This is bar.
bar foo bar foo foo. bar foo bar
foo foo. bar foo bar foo foo. bar
foo bar foo foo. bar foo bar foo
foo. bar foo bar foo foo. bar foo
bar foo foo.
]]>
</screen>
<programlisting>
<![CDATA[
{textformat style="email"}
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is foo.
This is bar.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
bar foo bar foo foo.
{/textformat}
]]>
</programlisting>
<para>
上の例の出力
</para>
<screen>
<![CDATA[
This is foo. This is foo. This is foo. This is foo. This is foo. This is
foo.
This is bar.
bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo
bar foo foo. bar foo bar foo foo. bar foo bar foo foo. bar foo bar foo
foo.
]]>
</screen>
</example>
<para>
<link linkend="language.function.strip"><varname>{strip}</varname></link>
および
<link linkend="language.modifier.wordwrap"><varname>wordwrap</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.25 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="language.modifiers">
<title>変数の修飾子</title>
<para>
変数の修飾子は、
<link linkend="language.syntax.variables">変数</link>
<link linkend="language.custom.functions">カスタム関数</link>
や文字列を修飾して出力することができます。修飾子を適用するには、
変数名の後に <literal>|</literal> (パイプ) と修飾子の名前を指定します。
また、修飾子はその動作に影響を及ぼす追加のパラメータを受け入れる場合もあります。
そのパラメータは修飾子の後に続き、<literal>:</literal> (コロン) によって区切られます。
また、<emphasis>すべての PHP 関数は、暗黙的に修飾子として使用でき</emphasis>
(あとで説明します)、修飾子は <link linkend="language.combining.modifiers">組み合わせる</link>
こともできます。
</para>
<example>
<title>修飾子の例</title>
<programlisting>
<![CDATA[
{* 変数に修飾子を適用 *}
{$title|upper}
{* パラメータを持つ修飾子 *}
{$title|truncate:40:'...'}
{* テンプレート関数のパラメータに修飾子を適用 *}
{html_table loop=$myvar|upper}
{* パラメータ付き *}
{html_table loop=$myvar|truncate:40:'...'}
{* リテラル文字列に修飾子を適用 *}
{'foobar'|upper}
{* 現在の日付を整形するために date_format を使用 *}
{$smarty.now|date_format:"%Y/%m/%d"}
{* カスタム関数に修飾子を適用 *}
{mailto|upper address='smarty@example.com'}
{* php の str_repeat を使用 *}
{'='|str_repeat:80}
{* php の count *}
{$myArray|@count}
{* php の shuffle をサーバの ip に対して使用 *}
{$smarty.server.SERVER_ADDR|shuffle}
(* 配列全体の大文字変換と切り詰め *}
<select name="name_id">
{html_options output=$myArray|upper|truncate:20}
</select>
]]>
</programlisting>
</example>
<itemizedlist>
<listitem><para>
配列に対して修飾子を用いた場合は、その配列に格納された全ての値に影響を及ぼします。
配列全体を1つの値として作用させるには修飾子の先頭に <literal>@</literal>
記号をつける必要があります。
<note>
<title></title>
<para><literal>{$articleTitle|@count}</literal> - これは、
配列 <parameter>$articleTitle</parameter> の要素数を、php の
<ulink url="&url.php-manual;count"><varname>count()</varname></ulink>
関数を修飾子として用いて出力します。
</para></note>
</para> </listitem>
<listitem><para>
修飾子は <link
linkend="variable.plugins.dir"><parameter>$plugins_dir</parameter></link>
から自動的に読み込むか、明示的に <link
linkend="api.register.modifier"><varname>register_modifier()</varname></link>
関数で登録します。つ目の方法は、PHP スクリプトと Smarty テンプレートで
関数を共有する場合などに有用です。
</para></listitem>
<listitem><para>
先ほどの例で示したように、全ての PHP 関数は暗黙で修飾子として使用する事ができます。
しかし、修飾子としてPHP関数を使うにはつの小さな落とし穴があります。
<itemizedlist>
<listitem><para>第1に、 たまに関数のパラメータの順序が望ましいものではなくります。
<literal>$foo</literal>
<literal>{"%2.f"|sprintf:$foo}</literal> でフォーマットすることはできますが、
Smarty が提供する方式である <literal>{$foo|string_format:"%2.f"}</literal>
のほうがより直感的です。
</para></listitem>
<listitem><para>
第2に、<link linkend="variable.security">
<parameter>$security</parameter></link> が有効な場合、
修飾子として使用される全ての PHP 関数は
<link linkend="variable.security.settings">
<parameter>$security_settings</parameter></link> 配列の
<literal>MODIFIER_FUNCS</literal> 要素で
信頼できるものとして定義される必要があります。
</para></listitem>
</itemizedlist>
</para></listitem>
</itemizedlist>
<para>
<link linkend="api.register.modifier"><varname>register_modifier()</varname></link>
<link linkend="language.combining.modifiers">修飾子の連結</link>
および
<link linkend="plugins">プラグインによる Smarty の拡張</link>
も参照してください。
</para>
&designers.language-modifiers.language-modifier-capitalize;
&designers.language-modifiers.language-modifier-cat;
&designers.language-modifiers.language-modifier-count-characters;
&designers.language-modifiers.language-modifier-count-paragraphs;
&designers.language-modifiers.language-modifier-count-sentences;
&designers.language-modifiers.language-modifier-count-words;
&designers.language-modifiers.language-modifier-date-format;
&designers.language-modifiers.language-modifier-default;
&designers.language-modifiers.language-modifier-escape;
&designers.language-modifiers.language-modifier-indent;
&designers.language-modifiers.language-modifier-lower;
&designers.language-modifiers.language-modifier-nl2br;
&designers.language-modifiers.language-modifier-regex-replace;
&designers.language-modifiers.language-modifier-replace;
&designers.language-modifiers.language-modifier-spacify;
&designers.language-modifiers.language-modifier-string-format;
&designers.language-modifiers.language-modifier-strip;
&designers.language-modifiers.language-modifier-strip-tags;
&designers.language-modifiers.language-modifier-truncate;
&designers.language-modifiers.language-modifier-upper;
&designers.language-modifiers.language-modifier-wordwrap;
</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
-->

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.capitalize">
<title>capitalize</title>
<para>
変数内の全ての単語の先頭を大文字で開始します。
PHP の <ulink url="&url.php-manual;ucfirst">
<varname>ucfirst()</varname></ulink> 関数と似ています。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>数字とセットの単語を大文字にするかどうか</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>capitalize</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'next x-men film, x3, delayed.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|capitalize}
{$articleTitle|capitalize:true}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
next x-men film, x3, delayed.
Next X-Men Film, x3, Delayed.
Next X-Men Film, X3, Delayed.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.lower"><varname>lower</varname></link>
および
<link linkend="language.modifier.upper"><varname>upper</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.cat">
<title>cat</title>
<para>
与えられた変数に値を連結します。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="cat" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>与えられた変数にこの値を連結する</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>cat</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', "Psychics predict world didn't end");
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle|cat:' yesterday.'}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Psychics predict world didn't end yesterday.
]]>
</screen>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,97 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.count.characters">
<title>count_characters</title>
<para>
変数内の文字数をカウントします。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>空白キャラクタをカウントに含めるかどうか</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>count_characters</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Cold Wave Linked to Temperatures.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|count_characters}
{$articleTitle|count_characters:true}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Cold Wave Linked to Temperatures.
29
33
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.count.words"><varname>count_words</varname></link>
<link linkend="language.modifier.count.sentences"><varname>count_sentences</varname></link> および
<link linkend="language.modifier.count.paragraphs"><varname>count_paragraphs</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.count.paragraphs">
<title>count_paragraphs</title>
<para>
変数内のパラグラフの数をカウントします。
</para>
<example>
<title>count_paragraphs</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
"War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.\n\n
Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation."
);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|count_paragraphs}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
War Dims Hope for Peace. Child's Death Ruins Couple's Holiday.
Man is Fatally Slain. Death Causes Loneliness, Feeling of Isolation.
2
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.count.characters"><varname>count_characters</varname></link>
<link linkend="language.modifier.count.sentences"><varname>count_sentences</varname></link>
および
<link linkend="language.modifier.count.words"><varname>count_words</varname></link>.
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.count.sentences">
<title>count_sentences</title>
<para>
変数内のセンテンスの数をカウントします。
</para>
<example>
<title>count_sentences</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
'Two Soviet Ships Collide - One Dies.
Enraged Cow Injures Farmer with Axe.'
);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|count_sentences}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Two Soviet Ships Collide - One Dies. Enraged Cow Injures Farmer with Axe.
2
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.count.characters"><varname>count_characters</varname></link>
<link linkend="language.modifier.count.paragraphs"><varname>count_paragraphs</varname></link>
および
<link linkend="language.modifier.count.words"><varname>count_words</varname></link>.
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.count.words">
<title>count_words</title>
<para>
変数内の単語の数をカウントします。
</para>
<example>
<title>count_words</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|count_words}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Dealers Will Hear Car Talk at Noon.
7
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.count.characters"><varname>count_characters</varname></link>
<link linkend="language.modifier.count.paragraphs"><varname>count_paragraphs</varname></link>
および
<link linkend="language.modifier.count.sentences"><varname>count_sentences</varname></link>.
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,281 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.15 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.date.format">
<title>date_format</title>
<para>
日付と時間を
<ulink url="&url.php-manual;strftime"><varname>strftime()</varname></ulink>
のフォーマットに基づいて整形します。日付を Unix
<ulink url="&url.php-manual;function.time">タイムスタンプ</ulink>
や MySQL タイムスタンプ、そして月・日・年で構成された
(PHP の <ulink url="&url.php-manual;strtotime"><varname>strtotime()</varname></ulink>
でパース可能な) 文字列として変数に割り当てる事ができます。デザイナーは、
<varname>date_format</varname> を使用することで日付の書式設定を自由にコントロールできます。
<varname>date_format</varname> に渡した日付が空で
第2パラメータが渡された場合、その日付をフォーマットします。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>No</entry>
<entry>%b %e, %Y</entry>
<entry>日付の表示フォーマット</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>No</entry>
<entry>n/a</entry>
<entry>入力が空のときのデフォルトの日付</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<para>
<note>
<para>
Smarty-2.6.10 以降、<varname>date_format</varname> に渡された数値は
<emphasis>常に</emphasis> (MySQL タイムスタンプは例外です。以下を参照してください)
Unix タイムスタンプとして解釈されるようになりました。
</para>
<para>
Smarty-2.6.10 より前は、PHP の
<varname>strtotime()</varname> がパース可能な数値文字列
(<literal>YYYYMMDD</literal> のような形式) は、
タイムスタンプではなく日付文字列として解釈されることもあります
(<varname>strtotime()</varname> の実装に依存します)。
</para>
<para>
唯一の例外は、mysql タイムスタンプです。
これは数値のみで、文字数は14文字 ("YYYYMMDDHHMMSS") です。
mysql タイムスタンプは unix タイムスタンプより優先されます。
</para>
</note>
<note>
<title>プログラマーズノート</title>
<para>
<varname>date_format</varname> は、本質的には PHP の
<ulink url="&url.php-manual;strftime"><varname>strftime()</varname></ulink>
関数のラッパーです。PHP をコンパイルしたシステム上の
<ulink url="&url.php-manual;strftime"><varname>strftime()</varname></ulink>
の実装によっては、利用可能な変換指定子が多少変わる場合があります。
有効な指定子の一覧は、システムの man ページを参照してください。
Windows 上でも一部の指定子をエミュレートしており、%D, %e, %h, %l, %n,
%r, %R, %t, %T が使用できます。
</para>
</note>
</para>
<example>
<title>date_format</title>
<programlisting role="php">
<![CDATA[
<?php
$config['date'] = '%I:%M %p';
$config['time'] = '%H:%M:%S';
$smarty->assign('config', $config);
$smarty->assign('yesterday', strtotime('-1 day'));
?>
]]>
</programlisting>
<para>
このテンプレートでは、<link linkend="language.variables.smarty.now">
<parameter>$smarty.now</parameter></link> を使用して現在時刻を取得しています。
</para>
<programlisting>
<![CDATA[
{$smarty.now|date_format}
{$smarty.now|date_format:"%D"}
{$smarty.now|date_format:$config.date}
{$yesterday|date_format}
{$yesterday|date_format:"%A, %B %e, %Y"}
{$yesterday|date_format:$config.time}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Jan 1, 2022
01/01/22
02:33 pm
Dec 31, 2021
Monday, December 1, 2021
14:33:00
]]>
</screen>
</example>
<para>
<command>date_format</command> の変換指定子
<itemizedlist>
<listitem><para>
%a - 現在のロケールに基づく短縮された曜日の名前
</para></listitem>
<listitem><para>
%A - 現在のロケールに基づく完全な曜日の名前
</para></listitem>
<listitem><para>
%b - 現在のロケールに基づく短縮された月の名前
</para></listitem>
<listitem><para>
%B - 現在のロケールに基づく完全な月の名前
</para></listitem>
<listitem><para>
%c - 現在のロケールに基づく適当な日付と時間の表現
</para></listitem>
<listitem><para>
%C - 世紀(年を100で割り、整数に丸めたもの。00から99)
</para></listitem>
<listitem><para>
%d - 10進数の日付(01から31)
</para></listitem>
<listitem><para>
%D - %m/%d/%yと同じ
</para></listitem>
<listitem><para>
%e - 月単位の日付を10進数で表したもの。日付が1桁の場合は、前に空白を一つ付ける。('1'から'31')
</para></listitem>
<listitem><para>
%g - 西暦の下二桁 [00,99]
</para></listitem>
<listitem><para>
%G - 西暦 [0000,9999]
</para></listitem>
<listitem><para>
%h - %bと同じ。
</para></listitem>
<listitem><para>
%H - 時間を24時間表示の10進数で(00から23まで)
</para></listitem>
<listitem><para>
%I - 時間を12時間表示の10進数で(01から12までの範囲)
</para></listitem>
<listitem><para>
%j - 年間での日付を10進数で表現 (001から366)
</para></listitem>
<listitem><para>
%k - 24時間表示の時間の一桁目に空白を入れる ( 0 から 23までの範囲)
</para></listitem>
<listitem><para>
%l - 12時間表示の時間の一桁目に空白を入れる ( 1 から 12までの範囲)
</para></listitem>
<listitem><para>
%m - 月を10進数で表現 (01から12)
</para></listitem>
<listitem><para>
%M - 分を10進数で表現
</para></listitem>
<listitem><para>
%n - 改行文字
</para></listitem>
<listitem><para>
%p - 指定した時間により `am' または `pm' 、または 現在のロケールに対応した文字列
</para></listitem>
<listitem><para>
%r - a.m.およびp.m.表記で表した時間
</para></listitem>
<listitem><para>
%R - 24時間表記で表した時間
</para></listitem>
<listitem><para>
%S - 10進数で表した秒
</para></listitem>
<listitem><para>
%t - タブ文字
</para></listitem>
<listitem><para>
%T - 現在の時間。%H:%M:%Sに等しい。
</para></listitem>
<listitem><para>
%u - 10進数表記の曜日で[1,7]の範囲。1が月曜日。
</para></listitem>
<listitem><para>
%U - 年間で何番目の週であるかを 10 進数で表現。年間で最初の日曜を最初の週の最初の日として数えます。
</para></listitem>
<listitem><para>
%V - ISO 8601:1988で規定された現在の年の週番号の10進数表現で 01から53までの範囲となります。
1は最初の週でその週は現在の年に 最低4日はあります。週は月曜日から始まります。
</para></listitem>
<listitem><para>
%w - 曜日を10進数で表現。日曜は0になります。
</para></listitem>
<listitem><para>
%W - 現在の年で何番目の週であるかを10進数で表現。 年間で最初の月曜を最初の週の最初の日として数えます。
</para></listitem>
<listitem><para>
%x - 時間を除いた日付を現在のロケールに基づき表現します。
</para></listitem>
<listitem><para>
%X - 日付を除いた時間を現在のロケールに基づき表現します。
</para></listitem>
<listitem><para>
%y - 世紀の部分を除いた年を10進数として表現。(00から99までの範囲)
</para></listitem>
<listitem><para>
%Y - 世紀を含む年を10進数で表現
</para></listitem>
<listitem><para>
%Z - タイムゾーンまたはその名前または短縮形
</para></listitem>
<listitem><para>
%% - 文字リテラル`%'
</para></listitem>
</itemizedlist>
</para>
<para>
<link linkend="language.variables.smarty.now"><parameter>$smarty.now</parameter></link>
<ulink url="&url.php-manual;strftime"><varname>strftime()</varname></ulink>
<link linkend="language.function.html.select.date"><varname>{html_select_date}</varname></link>
および <link linkend="tips.dates">日付に関するヒント</link> のページも参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.9 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.default">
<title>default</title>
<para>
変数のデフォルト値を設定します。変数が空であるか設定されていない場合に、
代わりとしてデフォルト値が表示されます。この修飾子は1つのパラメータをとります。
</para>
<para>
<note>
<para>
<ulink url="&url.php-manual;error_reporting">
<varname>error_reporting(E_ALL)</varname></ulink> を指定すると、
テンプレート内で未定義の変数を使用した場合に常にエラーが発生します。
この関数を使用すると、null あるいは空文字列に変換できるので便利です。
</para>
</note>
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>empty</emphasis></entry>
<entry>変数が空の場合に表示されるデフォルト値</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>default</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Dealers Will Hear Car Talk at Noon.');
$smarty->assign('email', '');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle|default:'no title'}
{$myTitle|default:'no title'}
{$email|default:'No email address available'}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Dealers Will Hear Car Talk at Noon.
no title
No email address available
]]>
</screen>
</example>
<para>
<link linkend="tips.default.var.handling">変数のデフォルトの扱い</link>
および
<link linkend="tips.blank.var.handling">空白の変数の扱い</link>
のページも参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,162 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.18 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.escape">
<title>escape</title>
<para>
<varname>escape</varname> は変数のエンコードやエスケープを行います。
たとえば <literal>html</literal>
<literal>url</literal><literal>シングルクォート</literal>
<literal>hex</literal><literal>hexentity</literal>
<literal>javascript</literal> および <literal>mail</literal>
などに対する処理を行います。
デフォルトでは <literal>html</literal> 用の処理をします。
</para>
<informaltable frame="all">
<tgroup cols="6">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="possible" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>有効な値</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>No</entry>
<entry><literal>html</literal>, <literal>htmlall</literal>,
<literal>url</literal>,
<literal>urlpathinfo</literal>, <literal>quotes</literal>,
<literal>hex</literal>, <literal>hexentity</literal>,
<literal>javascript</literal>, <literal>mail</literal>
</entry>
<entry><literal>html</literal></entry>
<entry>使用するエスケープフォーマット</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>No</entry>
<entry><literal>ISO-8859-1</literal>, <literal>UTF-8</literal>
および <ulink url="&url.php-manual;htmlentities">
<varname>htmlentities()</varname></ulink> がサポートする任意の文字セット
</entry>
<entry><literal>ISO-8859-1</literal></entry>
<entry>htmlentities() へ渡す文字セットのエンコーディング</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>escape</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
"'Stiff Opposition Expected to Casketless Funeral Plan'"
);
$smarty->assign('EmailAddress','smarty@example.com');
?>
]]>
</programlisting>
<para>
<literal>escape</literal> を使用するテンプレートの後に、その出力結果を続けています。
</para>
<programlisting>
<![CDATA[
{$articleTitle}
'Stiff Opposition Expected to Casketless Funeral Plan'
{$articleTitle|escape}
&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
{$articleTitle|escape:'html'} {* & " ' < > をエスケープします *}
&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
{$articleTitle|escape:'htmlall'} {* 全ての html エンティティをエスケープします *}
&#039;Stiff Opposition Expected to Casketless Funeral Plan&#039;
<a href="?title={$articleTitle|escape:'url'}">click here</a>
<a href="?title=%27Stiff+Opposition+Expected+to+Casketless+Funeral+Plan%27">click here</a>
{$articleTitle|escape:'quotes'}
\'Stiff Opposition Expected to Casketless Funeral Plan\'
<a href="mailto:{$EmailAddress|escape:"hex"}">{$EmailAddress|escape:"hexentity"}</a>
{$EmailAddress|escape:'mail'} {* email をテキストに変換します *}
<a href="mailto:%62%6f%..snip..%65%74">&#x62;&#x6f;&#x62..snip..&#x65;&#x74;</a>
{'mail@example.com'|escape:'mail'}
smarty [AT] example [DOT] com
]]>
</programlisting>
</example>
<example>
<title>別の例</title>
<para>PHP の関数を修飾子として使用できます。これは
<link linkend="variable.security">
<varname>$security</varname></link> の設定によります。
</para>
<screen>
<![CDATA[
{* "rewind" パラメータに現在の場所を登録します *}
<a href="{$SCRIPT_NAME}?page=foo&rewind={$smarty.server.REQUEST_URI|urlencode}">click here</a>
]]>
</screen>
<para>これは email 用に便利です。しかし、
<link linkend="language.function.mailto">
<varname>{mailto}</varname></link> も参照してください。</para>
<screen>
<![CDATA[
{* email アドレスを混乱させます *}
<a href="mailto:{$EmailAddress|escape:'hex'}">{$EmailAddress|escape:'mail'}</a>
]]>
</screen>
</example>
<para>
<link linkend="language.escaping">Smarty の構文解析を回避</link>
<link linkend="language.function.mailto"><varname>{mailto}</varname></link>
および
<link linkend="tips.obfuscating.email">E-mail アドレスを混乱させる</link>
のページも参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.indent">
<title>indent</title>
<para>
各行で文字列をインデントします。デフォルトは 4 です。
第1パラメータには、インデントするキャラクタ数が指定できます。
第2パラメータには、インデントに使用するキャラクタが指定できます。
たとえば、<literal>"\t"</literal> はタブを表します。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc" />
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>integer</entry>
<entry>No</entry>
<entry>4</entry>
<entry>インデントするキャラクタ数</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>No</entry>
<entry>(半角スペース 1 文字)</entry>
<entry>インデントに使用するキャラクタ</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>indent</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
'NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.'
);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|indent}
{$articleTitle|indent:10}
{$articleTitle|indent:1:"\t"}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.
NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.
NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.
NJ judge to rule on nude beach.
Sun or rain expected today, dark tonight.
Statistics show that teen pregnancy drops off significantly after 25.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.strip"><varname>strip</varname></link>
<link linkend="language.modifier.wordwrap"><varname>wordwrap</varname></link>
および
<link linkend="language.modifier.spacify"><varname>spacify</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.lower">
<title>lower</title>
<para>
変数を小文字に置き換えます。これは、PHP の
<ulink url="&url.php-manual;strtolower">
<varname>strtolower()</varname></ulink> 関数と同義です。
</para>
<example>
<title>lower</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Two Convicts Evade Noose, Jury Hung.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|lower}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Two Convicts Evade Noose, Jury Hung.
two convicts evade noose, jury hung.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.upper"><varname>upper</varname></link>
および
<link linkend="language.modifier.capitalize"><varname>capitalize</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.nl2br">
<title>nl2br</title>
<para>
与えられた変数内の全ての改行文字 <literal>"\n"</literal>
を html の <literal>&lt;br /&gt;</literal> タグに変換します。
これは PHP の <ulink url="&url.php-manual;nl2br">
<varname>nl2br()</varname></ulink> 関数と同義です。
</para>
<example>
<title>nl2br</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
"Sun or rain expected\ntoday, dark tonight"
);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle|nl2br}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Sun or rain expected<br />today, dark tonight
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.wordwrap"><varname>word_wrap</varname></link>
<link linkend="language.modifier.count.paragraphs"><varname>count_paragraphs</varname></link>
および
<link linkend="language.modifier.count.sentences"><varname>count_sentences</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,110 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.regex.replace">
<title>regex_replace</title>
<para>
変数に対して正規表現による検索・置換を行います。
正規表現は、PHP マニュアルの
<ulink url="&url.php-manual;preg_replace">
<varname>preg_replace()</varname></ulink> の構文を使用してください。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>置換するための正規表現</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>この文字列に置換する</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>regex_replace</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', "Infertility unlikely to\nbe passed on, experts say.");
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{* 復改、タブおよび改行を空白に置換します *}
{$articleTitle}
{$articleTitle|regex_replace:"/[\r\t\n]/":" "}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Infertility unlikely to
be passed on, experts say.
Infertility unlikely to be passed on, experts say.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.replace">
<varname>replace</varname></link>
および
<link linkend="language.modifier.escape"><varname>escape</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.replace">
<title>replace</title>
<para>
変数に対して、シンプルな検索・置換を行います。これは、PHP の
<ulink url="&url.php-manual;str_replace">
<varname>str_replace()</varname></ulink> 関数と同義です。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>置換元の文字列</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>この文字列に置換する</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>replace</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', "Child's Stool Great for Use in Garden.");
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|replace:'Garden':'Vineyard'}
{$articleTitle|replace:' ':' '}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Child's Stool Great for Use in Garden.
Child's Stool Great for Use in Vineyard.
Child's Stool Great for Use in Garden.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.regex.replace"><varname>regex_replace</varname></link>
および
<link linkend="language.modifier.escape"><varname>escape</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.spacify">
<title>spacify</title>
<para>
<varname>spacify</varname> は、変数の各キャラクタ間にスペースを挿入します。
第1パラメータには、挿入するキャラクタ(または文字列) を渡す事ができます。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>No</entry>
<entry><emphasis>one space</emphasis></entry>
<entry>変数の各キャラクタ間に挿入される要素</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>spacify</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Something Went Wrong in Jet Crash, Experts Say.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|spacify}
{$articleTitle|spacify:"^^"}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Something Went Wrong in Jet Crash, Experts Say.
S o m e t h i n g W .... snip .... s h , E x p e r t s S a y .
S^^o^^m^^e^^t^^h^^i^^n^^g^^ .... snip .... ^^e^^r^^t^^s^^ ^^S^^a^^y^^.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.wordwrap"><varname>wordwrap</varname></link>
および
<link linkend="language.modifier.nl2br"><varname>nl2br</varname></link>
も参照ください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.string.format">
<title>string_format</title>
<para>
変数の値を10進数として表示したり、文字列をフォーマットして表示します。
フォーマット文字列には
<ulink url="&url.php-manual;sprintf"><varname>sprintf()</varname></ulink>
の構文を使用してください。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>string</entry>
<entry>Yes</entry>
<entry><emphasis>n/a</emphasis></entry>
<entry>フォーマット文字列(sprintf)</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>string_format</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('number', 23.5787446);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$number}
{$number|string_format:"%.2f"}
{$number|string_format:"%d"}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
23.5787446
23.58
24
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.date.format"><varname>date_format</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,102 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.strip.tags">
<title>strip_tags</title>
<para>
マークアップタグを取り除きます。これは、基本的に
<literal>&lt;</literal><literal>&gt;</literal>
で囲まれたもののことです。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>bool</entry>
<entry>No</entry>
<entry>&true;</entry>
<entry>タグを' 'または''のどちらで置き換えるか</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>strip_tags</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
"Blind Woman Gets <font face=\"helvetica\">New
Kidney</font> from Dad she Hasn't Seen in <b>years</b>."
);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|strip_tags} {* same as {$articleTitle|strip_tags:true} *}
{$articleTitle|strip_tags:false}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Blind Woman Gets <font face="helvetica">New Kidney</font> from Dad she Hasn't Seen in <b>years</b>.
Blind Woman Gets New Kidney from Dad she Hasn't Seen in years .
Blind Woman Gets New Kidney from Dad she Hasn't Seen in years.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.replace"><varname>replace</varname></link>
および
<link linkend="language.modifier.regex.replace"><varname>regex_replace</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.strip">
<title>strip</title>
<para>
繰り返された空白・改行・タブを、1つの空白または与えられた文字列によって置き換えます。
</para>
<note>
<title>Note</title>
<para>
テンプレートテキストのブロックを対象に取り去りたいなら、
組み込みの <link
linkend="language.function.strip"><varname>{strip}</varname></link>
関数を使用して下さい。
</para>
</note>
<example>
<title>strip</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', "Grandmother of\neight makes\t hole in one.");
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|strip}
{$articleTitle|strip:'&nbsp;'}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Grandmother of
eight makes hole in one.
Grandmother of eight makes hole in one.
Grandmother&nbsp;of&nbsp;eight&nbsp;makes&nbsp;hole&nbsp;in&nbsp;one.
]]>
</screen>
</example>
<para>
<link linkend="language.function.strip"><varname>{strip}</varname></link>
および
<link linkend="language.modifier.truncate"><varname>truncate</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.truncate">
<title>truncate</title>
<para>
指定したキャラクタ数(デフォルトは80)で変数を切り捨てます。
第2パラメータには、変数が切り捨てられた時に終端に付加する文字列を指定する事が出来ます。
指定する文字列の長さは元の切り捨ての長さの中に含まれます。
デフォルトでは、<varname>truncate</varname> は単語の境界で切り捨てを行います。
厳密なキャラクタ数で切り捨てたい場合には第3パラメータに &true; を渡します。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>integer</entry>
<entry>No</entry>
<entry>80</entry>
<entry>切り捨てを行うキャラクタ数</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>No</entry>
<entry>...</entry>
<entry>切り捨てが発生した際に終端に付加するキャラクタ。
この長さは切り捨て長さの設定に含まれません。</entry>
</row>
<row>
<entry>3</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>切り捨てを単語の境界で行うか(&false;)、厳密なキャラクタ数で行うか(&true;)</entry>
</row>
<row>
<entry>4</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>切り捨てを文字列の終端で行うか(&false;)、
文字列の中盤で行うか(&true;)。この設定が&true;の場合、
単語の境界が無視されることに注意。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>truncate</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Years at Checkout Counter.');
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|truncate}
{$articleTitle|truncate:30}
{$articleTitle|truncate:30:""}
{$articleTitle|truncate:30:"---"}
{$articleTitle|truncate:30:"":true}
{$articleTitle|truncate:30:"...":true}
{$articleTitle|truncate:30:'..':true:true}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after Eighteen Years at Checkout Counter.
Two Sisters Reunite after...
Two Sisters Reunite after
Two Sisters Reunite after---
Two Sisters Reunite after Eigh
Two Sisters Reunite after E...
Two Sisters Re..ckout Counter.
]]>
</screen>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.upper">
<title>upper</title>
<para>
変数を大文字に置き換えます。これは、PHP の
<ulink url="&url.php-manual;strtoupper">
<varname>strtoupper()</varname></ulink> 関数と同義です。
</para>
<example>
<title>upper</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle', "If Strike isn't Settled Quickly it may Last a While.");
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|upper}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
If Strike isn't Settled Quickly it may Last a While.
IF STRIKE ISN'T SETTLED QUICKLY IT MAY LAST A WHILE.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.lower"><varname>lower</varname></link>
および
<link linkend="language.modifier.capitalize"><varname>capitalize</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.modifier.wordwrap">
<title>wordwrap</title>
<para>
指定したカラム幅で文字列をワードラップしますデフォルトは80
第2パラメータには、次の行にワードラップするために使用される文字列を指定する事が出来ます
(デフォルトは <literal>"\n"</literal>)。
デフォルトでは、<varname>wordwrap</varname> は単語の境界でワードラップを行います。
厳密な文字数でワードラップしたい場合は第3パラメータに &true; を渡します。
これは PHP の
<ulink url="&url.php-manual;wordwrap"><varname>wordwrap()</varname></ulink>
関数と同義です。
</para>
<informaltable frame="all">
<tgroup cols="5">
<colspec colname="param" align="center" />
<colspec colname="type" align="center" />
<colspec colname="required" align="center" />
<colspec colname="default" align="center" />
<colspec colname="desc"/>
<thead>
<row>
<entry>パラメータの位置</entry>
<entry></entry>
<entry>必須</entry>
<entry>デフォルト</entry>
<entry>概要</entry>
</row>
</thead>
<tbody>
<row>
<entry>1</entry>
<entry>integer</entry>
<entry>No</entry>
<entry>80</entry>
<entry>ワードラップするカラム幅</entry>
</row>
<row>
<entry>2</entry>
<entry>string</entry>
<entry>No</entry>
<entry>\n</entry>
<entry>ワードラップに使用される文字列</entry>
</row>
<row>
<entry>3</entry>
<entry>boolean</entry>
<entry>No</entry>
<entry>&false;</entry>
<entry>ワードラップを単語の境界で行うか(&false;)、
厳密なキャラクタ数で行うか(&true;)</entry>
</row>
</tbody>
</tgroup>
</informaltable>
<example>
<title>wordwrap</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('articleTitle',
"Blind woman gets new kidney from dad she hasn't seen in years."
);
?>
]]>
</programlisting>
<para>
テンプレート
</para>
<programlisting>
<![CDATA[
{$articleTitle}
{$articleTitle|wordwrap:30}
{$articleTitle|wordwrap:20}
{$articleTitle|wordwrap:30:"<br />\n"}
{$articleTitle|wordwrap:30:"\n":true}
]]>
</programlisting>
<para>
出力
</para>
<screen>
<![CDATA[
Blind woman gets new kidney from dad she hasn't seen in years.
Blind woman gets new kidney
from dad she hasn't seen in
years.
Blind woman gets new
kidney from dad she
hasn't seen in
years.
Blind woman gets new kidney<br />
from dad she hasn't seen in<br />
years.
Blind woman gets new kidney
from dad she hasn't seen in
years.
]]>
</screen>
</example>
<para>
<link linkend="language.modifier.nl2br"><varname>nl2br</varname></link>
および
<link linkend="language.function.textformat"><varname>{textformat}</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="language.variables">
<title>変数</title>
<para>
Smarty は色々な種類の変数を持っています。変数の種類は接頭辞の記号によって決まります
(記号によって囲まれる場合もあります)。
</para>
<para>
Smarty 変数は、その値を直接表示したり
<link linkend="language.syntax.functions">関数</link> の引数や
<link linkend="language.syntax.attributes">属性</link>
<link linkend="language.modifiers">修飾子</link>
そして条件式の内部などで使用されたりします。
変数の値を表示するには、それを単純に
<link linkend="variable.left.delimiter">デリミタ</link>
で囲み、デリミタ内に変数のみが含まれるようにします。
<example>
<title>変数の例</title>
<programlisting>
<![CDATA[
{$Name}
{$product.part_no} <b>{$product.description}</b>
{$Contacts[row].Phone}
<body bgcolor="{#bgcolor#}">
]]>
</programlisting>
</example>
<note>
<title>ヒント</title>
<para>Smarty 変数の値を手っ取り早く調べるには、
<link linkend="chapter.debugging.console">デバッギングコンソール</link> を使用するとよいでしょう。
</para>
</note>
</para>
&designers.language-variables.language-assigned-variables;
&designers.language-variables.language-config-variables;
&designers.language-variables.language-variables-smarty;
</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
-->

View File

@@ -0,0 +1,205 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.assigned.variables">
<title>PHP から割り当てられた変数</title>
<para>
PHP から <link linkend="api.assign">割り当てられた</link> 変数は、
(php と同様に) 先頭にドル記号 (<literal>$</literal>) をつける事で参照できます。
テンプレート内で
<link linkend="language.function.assign"><varname>{assign}</varname></link>
関数を用いて割り当てられた変数もこの方法で表示されます。
</para>
<example>
<title>割り当てられた変数</title>
<para> php script</para>
<programlisting role="php">
<![CDATA[
<?php
$smarty = new Smarty();
$smarty->assign('firstname', 'Doug');
$smarty->assign('lastname', 'Evans');
$smarty->assign('meetingPlace', 'New York');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
一方、<filename>index.tpl</filename> の内容はこのようになります。
</para>
<programlisting>
<![CDATA[
Hello {$firstname} {$lastname}, glad to see you can make it.
<br />
{* これは動作しません。変数名は大文字小文字を区別するからです。 *}
This weeks meeting is in {$meetingplace}.
{* こちらは動作します *}
This weeks meeting is in {$meetingPlace}.
]]>
</programlisting>
<para>
出力は次のようになります。
</para>
<screen>
<![CDATA[
Hello Doug Evans, glad to see you can make it.
<br />
This weeks meeting is in .
This weeks meeting is in New York.
]]>
</screen>
</example>
<sect2 id="language.variables.assoc.arrays">
<title>連想配列</title>
<para>
PHP から割り当てられた連想配列を参照することもできます。
この場合は、'.' (ピリオド) 記号の後にキーを指定します。
</para>
<example>
<title>連想配列の値にアクセスする</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('Contacts',
array('fax' => '555-222-9876',
'email' => 'zaphod@slartibartfast.example.com',
'phone' => array('home' => '555-444-3333',
'cell' => '555-111-1234')
)
);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
一方、<filename>index.tpl</filename> の内容はこのようになります。
</para>
<programlisting>
<![CDATA[
{$Contacts.fax}<br />
{$Contacts.email}<br />
{* you can print arrays of arrays as well *}
{$Contacts.phone.home}<br />
{$Contacts.phone.cell}<br />
]]>
</programlisting>
<para>
出力は次のようになります。
</para>
<screen>
<![CDATA[
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />
]]>
</screen>
</example>
</sect2>
<sect2 id="language.variables.array.indexes">
<title>配列のインデックス</title>
<para>
配列に対してインデックスでアクセスすることもできます。
これは PHP 本来の構文と同じです。
</para>
<example>
<title>インデックスによって配列にアクセスする</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->assign('Contacts', array(
'555-222-9876',
'zaphod@slartibartfast.example.com',
array('555-444-3333',
'555-111-1234')
));
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
一方、<filename>index.tpl</filename> の内容はこのようになります。
</para>
<programlisting>
<![CDATA[
{$Contacts[0]}<br />
{$Contacts[1]}<br />
{* you can print arrays of arrays as well *}
{$Contacts[2][0]}<br />
{$Contacts[2][1]}<br />
]]>
</programlisting>
<para>
出力は次のようになります。
</para>
<screen>
<![CDATA[
555-222-9876<br />
zaphod@slartibartfast.example.com<br />
555-444-3333<br />
555-111-1234<br />
]]>
</screen>
</example>
</sect2>
<sect2 id="language.variables.objects">
<title>オブジェクト</title>
<para>
PHP から割り当てられた <link linkend="advanced.features.objects">オブジェクト</link>
のプロパティにアクセスするには、<literal>-&gt;</literal>
記号の後にプロパティ名を指定します。
</para>
<example>
<title>オブジェクトのプロパティにアクセスする</title>
<programlisting>
<![CDATA[
name: {$person->name}<br />
email: {$person->email}<br />
]]>
</programlisting>
<para>
出力は次のようになります。
</para>
<screen>
<![CDATA[
name: Zaphod Beeblebrox<br />
email: zaphod@slartibartfast.example.com<br />
]]>
</screen>
</example>
</sect2>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.config.variables">
<title>設定ファイルから読み込まれた変数</title>
<para>
<link linkend="config.files">設定ファイル</link>
から読み込まれた変数を参照するには、それをハッシュマーク (<literal>#</literal>)
で囲むか、あるいは Smarty 変数 <link linkend="language.variables.smarty.config">
<parameter>$smarty.config</parameter></link> を使用します。
2つ目の方法は、クォートされた属性値の中に含める場合に便利です。
</para>
<example>
<title>設定ファイルの変数</title>
<para>
サンプルの設定ファイル - <filename>foo.conf</filename>:
</para>
<programlisting>
<![CDATA[
pageTitle = "This is mine"
bodyBgColor = '#eeeeee'
tableBorderSize = 3
tableBgColor = "#bbbbbb"
rowBgColor = "#cccccc"
]]>
</programlisting>
<para>
<parameter>#hash#</parameter> 方式のテンプレート
</para>
<programlisting>
<![CDATA[
{config_load file='foo.conf'}
<html>
<title>{#pageTitle#}</title>
<body bgcolor="{#bodyBgColor#}">
<table border="{#tableBorderSize#}" bgcolor="{#tableBgColor#}">
<tr bgcolor="{#rowBgColor#}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
]]>
</programlisting>
<para>
<link linkend="language.variables.smarty.config">
<parameter>$smarty.config</parameter></link> 方式のテンプレート
</para>
<programlisting>
<![CDATA[
{config_load file='foo.conf'}
<html>
<title>{$smarty.config.pageTitle}</title>
<body bgcolor="{$smarty.config.bodyBgColor}">
<table border="{$smarty.config.tableBorderSize}" bgcolor="{$smarty.config.tableBgColor}">
<tr bgcolor="{$smarty.config.rowBgColor}">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
]]>
</programlisting>
<para>
どちらの場合も出力は同じです。
</para>
<screen>
<![CDATA[
<html>
<title>This is mine</title>
<body bgcolor="#eeeeee">
<table border="3" bgcolor="#bbbbbb">
<tr bgcolor="#cccccc">
<td>First</td>
<td>Last</td>
<td>Address</td>
</tr>
</table>
</body>
</html>
]]>
</screen>
</example>
<para>
変数は、設定ファイルから読み込まれるまで使用できません。
詳細は、後ほど
<link linkend="language.function.config.load">
<varname>{config_load}</varname></link>
の項で説明します。
</para>
<para>
<link linkend="language.syntax.variables">変数</link> および
<link linkend="language.variables.smarty">予約変数
$smarty</link> も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,228 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.18 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="language.variables.smarty">
<title>予約変数 {$smarty}</title>
<para>
PHP の予約変数 <parameter>{$smarty}</parameter> を使用すると、
環境変数やリクエスト変数にアクセスすることができます。
アクセスできる内容について、以下に説明します。
</para>
<sect2 id="language.variables.smarty.request">
<title>リクエスト変数</title>
<para>
<literal>$_GET</literal><literal>$_POST</literal>
<literal>$_COOKIE</literal><literal>$_SERVER</literal>
<literal>$_ENV</literal> および <literal>$_SESSION</literal>
(<link linkend="variable.request.vars.order">
<varname>$request_vars_order</varname></link>
および <link linkend="variable.request.use.auto.globals">
<varname>$request_use_auto_globals</varname></link> を参照してください)
といった <ulink url="&url.php-manual;reserved.variables">リクエスト変数</ulink>
にアクセスするには、下の例のようにします。
</para>
<example>
<title>リクエスト変数の表示</title>
<programlisting>
<![CDATA[
{* ($_GET) http://www.example.com/index.php?page=foo から page の内容を表示 *}
{$smarty.get.page}
{* ($_POST['page']) フォームから送信された変数"page"の値を表示 *}
{$smarty.post.page}
{* クッキーに登録された"username"の値を表示 ($_COOKIE['username']) *}
{$smarty.cookies.username}
{* サーバ変数"SERVER_NAME"の値を表示 ($_SERVER['SERVER_NAME']) *}
{$smarty.server.SERVER_NAME}
{* 環境変数"PATH"の値を表示 *}
{$smarty.env.PATH}
{* phpのセッション変数"id"の値を表示 ($_SESSION['id']) *}
{$smarty.session.id}
{* get/post/cookies/server/envの値から、変数"username"の値を表示 *}
{$smarty.request.username}
]]>
</programlisting>
</example>
<note>
<para>
歴史的な理由から、<parameter>{$SCRIPT_NAME}</parameter> には直接アクセスできます。
しかし、この値にアクセスする方法としては
<parameter>{$smarty.server.SCRIPT_NAME}</parameter> が推奨されています。
</para>
<programlisting>
<![CDATA[
<a href="{$SCRIPT_NAME}?page=smarty">click me</a>
<a href="{$smarty.server.SCRIPT_NAME}?page=smarty">click me</a>
]]>
</programlisting>
</note>
</sect2>
<sect2 id="language.variables.smarty.now">
<title>{$smarty.now}</title>
<para>
現在の <ulink url="&url.php-manual;function.time">タイムスタンプ</ulink>
にアクセスするには <parameter>{$smarty.now}</parameter> を使用します。
この値は、いわゆるエポック (1970年1月1日) からの経過秒数が含まれます。
また、これを直接
<link linkend="language.modifier.date.format"><varname>date_format</varname>
</link> 修飾子に渡して表示させることができます。実行するたびに
<ulink url="&url.php-manual;function.time"><varname>time()</varname></ulink>
がコールされることに注意しましょう。つまり、全体を処理するのに3秒かかるスクリプトがあったとして、
その最初と最後でそれぞれ <parameter>$smarty.now</parameter>
をコールすると、その値には2秒の差が生じます。
<informalexample>
<programlisting>
<![CDATA[
{* date_format 修飾子を用いて、現在の日付と時刻を表示します *}
{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
]]>
</programlisting>
</informalexample>
</para>
</sect2>
<sect2 id="language.variables.smarty.const">
<title>{$smarty.const}</title>
<para>
PHP 定数の値に直接アクセスできます。<link
linkend="smarty.constants">smarty 定数</link> も参照してください。
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// php で定義されている定数
define('MY_CONST_VAL','CHERRIES');
?>
]]>
</programlisting>
</informalexample>
<para>定数を出力するテンプレート</para>
<informalexample>
<programlisting>
<![CDATA[
{$smarty.const.MY_CONST_VAL}
]]>
</programlisting>
</informalexample>
</sect2>
<sect2 id="language.variables.smarty.capture">
<title>{$smarty.capture}</title>
<para>
組み込みの
<link linkend="language.function.capture">
<varname>{capture}..{/capture}</varname></link>
関数でキャプチャしたテンプレートの出力にアクセスするには
<parameter>{$smarty.capture}</parameter> 変数を使用します。
詳細は <link linkend="language.function.capture">
<varname>{capture}</varname></link> のページを参照してください。
</para>
</sect2>
<sect2 id="language.variables.smarty.config">
<title>{$smarty.config}</title>
<para>
<parameter>{$smarty.config}</parameter> 変数は、読み込まれた
<link linkend="language.config.variables">config 変数</link>
を参照するのに使用できます。
<parameter>{$smarty.config.foo}</parameter>
<parameter>{#foo#}</parameter> と同義です。詳細は
<link linkend="language.function.config.load">{config_load}</link>
のページを参照してください。
</para>
</sect2>
<sect2 id="language.variables.smarty.loops">
<title>{$smarty.section}、{$smarty.foreach}</title>
<para>
<parameter>{$smarty.section}</parameter> 変数および
<parameter>{$smarty.foreach}</parameter> 変数は、
<link linkend="language.function.section"><varname>{section}</varname></link>
および
<link linkend="language.function.foreach"><varname>{foreach}</varname></link>
のループプロパティを参照するために使用します。
この中には <varname>.first</varname><varname>.index</varname>
といった有用な値が含まれます。
</para>
</sect2>
<sect2 id="language.variables.smarty.template">
<title>{$smarty.template}</title>
<para>
現在処理中のテンプレートの名前を返します。
次の例の <filename>container.tpl</filename> と、そこからインクルードしている
<filename>banner.tpl</filename> の両方で
<parameter>{$smarty.template}</parameter> を使用しています。
</para>
<programlisting>
<![CDATA[
<b>Main container is {$smarty.template}</b>
{include file='banner.tpl'}
]]>
</programlisting>
<para>
出力は、このようになります。
</para>
<programlisting>
<![CDATA[
<b>Main page is container.tpl</b>
banner.tpl
]]>
</programlisting>
</sect2>
<sect2 id="language.variables.smarty.version">
<title>{$smarty.version}</title>
<para>
このテンプレートをコンパイルした Smarty のバージョンを返します。
</para>
<programlisting>
<![CDATA[
<div id="footer">Powered by Smarty {$smarty.version}</div>
]]>
</programlisting>
</sect2>
<sect2 id="language.variables.smarty.ldelim">
<title>{$smarty.ldelim}、{$smarty.rdelim}</title>
<para>
これらの変数を使用して、左右のデリミタをそのまま表示します。
<link linkend="language.function.ldelim">
<varname>{ldelim}、{rdelim}</varname></link> と同じです。
</para>
<para>
<link linkend="language.assigned.variables">assigned variables</link> および
<link linkend="language.config.variables">config variables</link>
も参照してください。
</para>
</sect2>
</sect1>
<!-- 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
-->

685
docs/ja/getting-started.xml Normal file
View File

@@ -0,0 +1,685 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.19 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<part id="getting.started">
<title>はじめに</title>
<chapter id="what.is.smarty">
<title>Smarty とは?</title>
<para>
Smarty は PHP のためのテンプレートエンジンです。具体的に言うと、php
のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、
これらの役割を違う人間が受け持っている場合に最適だと言えます。
</para>
<para>
例えば、新聞記事を表示するwebページを作成しているとします。
</para>
<itemizedlist>
<listitem><para>
記事の <literal>$headline</literal> (見出し)、<literal>$tagline</literal>
(キャッチフレーズ)、<literal>$author</literal> (著者) および
<literal>$body</literal> (本文) が中身を構成する要素となります。
ここには、それをどのように表示するかという情報は含まれません。
これらはアプリケーションによって Smarty に
<link linkend="api.assign">渡されます</link>
</para></listitem>
<listitem><para>
テンプレートデザイナーはこのテンプレートを編集し、
HTML タグや <link linkend="language.basic.syntax">テンプレートタグ</link>
を使用して、これらの <link linkend="language.syntax.variables">変数</link>
と要素 (テーブル、div、背景色、フォントサイズ、スタイルシート、svg など)
の体裁を調整します。
</para></listitem>
<listitem><para>
ある日、プログラマーが (アプリケーションロジックを変更したなどの理由で)
記事の内容を取得する手段を変更する必要が出てきたとします。
この変更はテンプレートデザイナーに影響がないため、
記事には全く同じ内容のテンプレートが適用できるでしょう。
</para></listitem>
<listitem><para>
同様に、もしテンプレートデザイナーがテンプレートを完全に作り直したい場合でも、
アプリケーションロジックを変更する必要がありません。
</para></listitem>
<listitem><para>
したがって、プログラマーはテンプレートを作り直す事なくアプリケーションロジックを変更する事ができ、
テンプレートデザイナーはアプリケーションロジックを壊す事なくテンプレートを変更できます。
</para></listitem>
</itemizedlist>
<para>
Smarty の設計の目標の一つとして、
ビジネスロジックとプレゼンテーションロジックの分離があります。
</para>
<itemizedlist>
<listitem><para>
これは、プレゼンテーションのためだけという条件の下で
テンプレートにロジックを含める事が可能であるという事です。
他のテンプレートを <link linkend="language.function.include">include</link>
したり、テーブル行の色を
<link linkend="language.function.cycle">変更</link> したり、変数を
<link linkend="language.modifier.upper">大文字</link> にしたり、データの配列を
<link linkend="language.function.foreach">ループ</link> させたり、それを
<link linkend="api.display">表示</link>
したりといったことが、プレゼンテーションロジックの例になります。
</para></listitem>
<listitem><para>
これは、Smarty がビジネスロジックとプレゼンテーションロジックの分離を
強制している訳ではない事を意味しています。
Smarty はテンプレート内に置かれたものがビジネスロジックなのか何なのか全くわかりません。
</para></listitem>
<listitem><para>
また、テンプレートにロジックを <emphasis>置きたくない</emphasis>
ならば、テキストと変数のみでコンテンツを作り上げることも可能です。
</para></listitem>
</itemizedlist>
<para>
Smarty のユニークな特徴の一つは、テンプレートをコンパイルすることです。
つまり、Smarty がテンプレートファイルを読み込み、
それをもとにして PHP スクリプトを作成するということです。
一度作成してしまえば、その後はコンパイルされた PHP スクリプトが実行されるので、
各リクエスト時にテンプレートファイルのパースによるオーバーヘッドがありません。
さらに各テンプレートは、
<ulink url="&url.e-accel;">eAccelerator</ulink>
<ulink url="&url.ion-accel;">ionCube</ulink>
<ulink url="&url.mmcache-accel;">mmCache</ulink>
あるいは <ulink url="&url.zend;">Zend Accelerator</ulink>
のような PHP コンパイラやキャッシュソリューションを最大限に活用することができます。
</para>
<para>
<emphasis role="bold">Smarty の特徴</emphasis>
</para>
<itemizedlist>
<listitem>
<para>
非常に高速
</para>
</listitem>
<listitem>
<para>
下仕事は PHP パーサが行うので能率的
</para>
</listitem>
<listitem>
<para>
コンパイルは一度だけ行われるので、テンプレートのパースによるオーバーヘッドが無い
</para>
</listitem>
<listitem>
<para>
<link linkend="variable.compile.check">再コンパイル</link>
は変更があったテンプレートファイルのみで行うのでスマート
</para>
</listitem>
<listitem>
<para>
簡単に独自の <link
linkend="language.custom.functions">関数</link>
<link linkend="language.modifiers">変数の修飾子</link>
を作成できるので、テンプレート言語を強力に拡張することが可能
</para>
</listitem>
<listitem>
<para>
テンプレートの
<link linkend="variable.left.delimiter">{デリミタ}</link>
タグの記法を変更し、
<literal>{$foo}</literal><literal>{{$foo}}</literal>
<literal>&lt;!--{$foo}--&gt;</literal> などを使用することが可能
</para>
</listitem>
<listitem>
<para>
<link linkend="language.function.if">
<literal>{if}..{elseif}..{else}..{/if}</literal></link>
構文は PHP パーサが処理するので、<literal>{if...}</literal>
の条件式にはシンプルなものから複雑なものまで自由に指定可能
</para>
</listitem>
<listitem>
<para>
<link linkend="language.function.section">
<varname>sections</varname></link><varname>if's</varname>
などは無制限にネスト可能
</para>
</listitem>
<listitem>
<para>
テンプレートファイル内に
<link linkend="language.function.php">PHP コードを埋め込む</link>
ことも可能。しかし、エンジン自体が
<link linkend="plugins">カスタマイズ</link> できるので、
これはおそらく不要 (そして非推奨)。
</para>
</listitem>
<listitem>
<para>
組み込みで <link linkend="caching">キャッシュ機能</link> をサポート
</para>
</listitem>
<listitem>
<para>
任意の <link linkend="template.resources">テンプレート</link> ソース
</para>
</listitem>
<listitem>
<para>
カスタム <link
linkend="section.template.cache.handler.func">キャッシュハンドラ</link>
関数
</para>
</listitem>
<listitem>
<para>
<link linkend="plugins">プラグイン</link> 機構
</para>
</listitem>
</itemizedlist>
</chapter>
<chapter id="installation">
<title>インストール</title>
<sect1 id="installation.requirements">
<title>必要条件</title>
<para>
Smarty は、PHP 4.0.6 以降が動作しているウェブサーバを必要とします。
</para>
</sect1>
<sect1 id="installing.smarty.basic">
<title>基本的なインストール</title>
<para>
Smarty のライブラリファイルを、ディストリビューションの
<filename class="directory">/libs/</filename> サブディレクトリにインストールしてください。
これらの <filename>.php</filename> を編集してはいけません。
これらはすべてのアプリケーションで共有するものであり、
Smarty を新しいバージョンにアップグレードする際にのみ更新します。
</para>
<para>以下の例で、Smarty の tarball の展開先は次のようになります。
<itemizedlist>
<listitem><para>*nix の場合は
<filename class="directory">/usr/local/lib/Smarty-v.e.r/</filename>
</para></listitem>
<listitem><para>Windows 環境の場合は
<filename class="directory">c:\webroot\libs\Smarty-v.e.r\</filename>
</para></listitem>
</itemizedlist>
</para>
<example>
<title>必要な Smarty ライブラリファイル群</title>
<screen>
<![CDATA[
Smarty-v.e.r/
libs/
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
internals/*.php (これら全て)
plugins/*.php (これら全て)
]]>
</screen>
</example>
<para>
Smarty は、<link linkend="constant.smarty.dir"><constant>SMARTY_DIR</constant></link>
という名前の PHP の <ulink url="&url.php-manual;define">定数</ulink>
を使用します。これは、Smarty の <filename>libs/</filename> ディレクトリへの
<emphasis role="bold">絶対パス</emphasis> を表します。
基本的にあなたのアプリケーションが <filename>Smarty.class.php</filename>
ファイルを見つける事が出来るなら
<link linkend="constant.smarty.dir"><constant>SMARTY_DIR</constant></link>
を定義する必要はありません。Smarty は自分でそれを考えます。
したがって、もし <filename>Smarty.class.php</filename>
<ulink url="&url.php-manual;ini.core.php#ini.include-path">include_path</ulink>
にないか、あなたのアプリケーションにてそれらへの絶対パスが指定されていないなら、
手動で <constant>SMARTY_DIR</constant> を定義する必要があります。
<constant>SMARTY_DIR</constant> は、<emphasis role="bold">
最後にスラッシュ / を含めなければなりません</emphasis>
</para>
<informalexample>
<para>
次の例では、PHP スクリプト内での Smarty インスタンスの作成方法を示します。
</para>
<programlisting role="php">
<![CDATA[
<?php
// 注: Smarty の 'S' は大文字です
require_once('Smarty.class.php');
$smarty = new Smarty();
?>
]]>
</programlisting>
</informalexample>
<para>
上のスクリプトを実行してみてください。
<filename>Smarty.class.php</filename> ファイルが見つからないというエラーが出た場合は、
以下のいずれかを行う必要があります。
</para>
<example>
<title>手動で SMARTY_DIR 定数を定義する</title>
<programlisting role="php">
<![CDATA[
<?php
// *nix スタイル (大文字の 'S' に注意)
define('SMARTY_DIR', '/usr/local/lib/Smarty-v.e.r/libs/');
// windows スタイル
define('SMARTY_DIR', 'c:/webroot/libs/Smarty-v.e.r/libs/');
// *nixとwindowsで共通なハックバージョンの例
// Smarty は現在のスクリプトが 'includes/' ディレクトリの下にあると仮定します。
define('SMARTY_DIR',str_replace("\\","/",getcwd()).'/includes/Smarty-v.e.r/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
?>
]]>
</programlisting>
</example>
<example>
<title>ライブラリファイルの絶対パスを指定する</title>
<programlisting role="php">
<![CDATA[
<?php
// *nix スタイル (大文字の 'S' に注意)
require_once('/usr/local/lib/Smarty-v.e.r/libs/Smarty.class.php');
// windows スタイル
require_once('c:/webroot/libs/Smarty-v.e.r/libs/Smarty.class.php');
$smarty = new Smarty();
?>
]]>
</programlisting>
</example>
<example>
<title><filename>php.ini</filename> ファイルにライブラリへのパスを追加する</title>
<programlisting role="php">
<![CDATA[
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;
; *nix: "/path1:/path2"
include_path = ".:/usr/share/php:/usr/local/lib/Smarty-v.e.r/libs/"
; Windows: "\path1;\path2"
include_path = ".;c:\php\includes;c:\webroot\libs\Smarty-v.e.r\libs\"
]]>
</programlisting>
</example>
<example>
<title>PHP スクリプト内での <literal><ulink url="&url.e-accel;">ini_set()</ulink></literal>
によるインクルードパスの追加</title>
<programlisting role="php">
<![CDATA[
<?php
// *nix
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'/usr/local/lib/Smarty-v.e.r/libs/');
// windows
ini_set('include_path', ini_get('include_path').PATH_SEPARATOR.'c:/webroot/lib/Smarty-v.e.r/libs/');
?>
]]>
</programlisting>
</example>
<para>
これでライブラリファイルは正常に設置できたので、
今度はあなたのアプリケーション内に Smarty 用のディレクトリを セットアップしましょう。
</para>
<itemizedlist>
<listitem><para>
Smarty は、デフォルトで
<filename class="directory">templates/</filename>
<filename class="directory">templates_c/</filename><filename
class="directory">configs/</filename> および <filename
class="directory">cache/</filename>
と名づけられた4つのディレクトリが必要です。
</para></listitem>
<listitem><para>これらの名前は、それぞれ
Smarty クラスのプロパティ
<link linkend="variable.template.dir">
<varname>$template_dir</varname></link>
<link linkend="variable.compile.dir">
<varname>$compile_dir</varname></link>
<link linkend="variable.config.dir">
<varname>$config_dir</varname></link> および
<link linkend="variable.cache.dir">
<varname>$cache_dir</varname></link> で定義することができます。
</para></listitem>
<listitem><para>
Smarty を使用する各アプリケーションにおいて、
これらのディレクトリを個別に設置する事を強く推奨します。
</para></listitem>
</itemizedlist>
<para>
インストール例として、ゲストブックアプリケーションの
Smarty 環境をセットアップしてみます。
私達はディレクトリの命名規約の目的についてのみ取り上げました。
例のアプリケーション名を <literal>guestbook/</literal>
からあなたのアプリケーション名に置き換えれば、同様の環境を使用できます。
</para>
<example>
<title>ファイル構造</title>
<screen>
<![CDATA[
/usr/local/lib/Smarty-v.e.r/libs/
Smarty.class.php
Smarty_Compiler.class.php
Config_File.class.php
debug.tpl
internals/*.php
plugins/*.php
/web/www.example.com/
guestbook/
templates/
index.tpl
templates_c/
configs/
cache/
htdocs/
index.php
]]>
</screen>
</example>
<para>
あなたは web サーバのドキュメントルートの位置を知っている必要があります。
例ではドキュメントルートは <filename
class="directory">/web/www.example.com/guestbook/htdocs/</filename>
とします。Smarty ディレクトリは Smarty ライブラリによってのみアクセスされ、
web ブラウザから直接アクセスされる事はありません。
したがってセキュリティの心配を避けるために、
これらのディレクトリをドキュメントルートの <emphasis>外部</emphasis>
に配置する事を推奨します (ただし必須ではありません)。
</para>
<para>
ドキュメントルート下には最低1つのファイルが必要であり、
それは web ブラウザによってアクセスされるスクリプトです。
この例ではドキュメントルート <filename class="directory">/htdocs/</filename>
の下にサブディレクトリを作成し、その中に <filename>index.php</filename>
を配置します。
</para>
<para>
Smarty は
<link linkend="variable.compile.dir">
<parameter>$compile_dir</parameter></link>
<link linkend="variable.cache.dir">
<parameter>$cache_dir</parameter></link>
(<filename class="directory">templates_c/</filename>
<filename class="directory">cache/</filename>) に
<emphasis role="bold">書き込み権限</emphasis> でアクセスする必要があるので、
web サーバのユーザがこれらに書き込める必要があります
(windows ユーザはこの話を無視してください)。
<note><para>通常は、このユーザは <quote>nobody</quote> でグループは
<quote>nobody</quote> です。OS X ユーザの場合は、デフォルトのユーザは
<quote>www</quote> でグループは <quote>www</quote> です。
もし Apache を使用しているなら、<filename>httpd.conf</filename>
ファイルを見ればユーザ名とグループ名がわかります。</para></note>
</para>
<example>
<title>パーミッションおよびディレクトリへの書き込み権限の付与</title>
<programlisting role="shell">
<![CDATA[
chown nobody:nobody /web/www.example.com/guestbook/templates_c/
chmod 770 /web/www.example.com/guestbook/templates_c/
chown nobody:nobody /web/www.example.com/guestbook/cache/
chmod 770 /web/www.example.com/guestbook/cache/
]]>
</programlisting>
</example>
<note>
<title>注意</title>
<para>
<literal>chmod 770</literal> は強固なセキュリティです。
これは、ユーザ <quote>nobody</quote> とグループ <quote>nobody</quote>
のみにディレクトリのリード/ライトアクセスを許可します。
もし誰にでもリードアクセスを可能にしたい場合
(大抵はあなた自身がファイルを見るための利便性から)
は、代わりに <literal>775</literal> を使う事が出来ます。
</para>
</note>
<para>
次に、Smarty が表示するファイル <filename>index.tpl</filename>
を作成する必要があります。これは、<link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link> の中に配置しなければなりません。
</para>
<example>
<title>/web/www.example.com/guestbook/templates/index.tpl</title>
<screen>
<![CDATA[
{* Smarty *}
こんにちは、{$name}。ようこそ Smarty へ!
]]>
</screen>
</example>
<note>
<title>テクニカルノート</title>
<para>
<literal>{* Smarty *}</literal> はテンプレートの
<link linkend="language.syntax.comments">コメント</link> です。
これは必須ではありませんが、全てのテンプレートファイルのはじめに
コメントを書くのは良い習慣です。
これは、ファイルの拡張子に関わらずファイルを認識する事を簡単にします。
例えば、テキストエディタはファイルを認識して特有のシンタックスハイライトを有効にするでしょう。
</para>
</note>
<para>
では、<filename>index.php</filename> を編集しましょう。
Smarty のインスタンスを作成し、テンプレート変数を割り当て
(<link linkend="api.assign"><varname>assign()</varname></link>)、
<filename>index.tpl</filename> ファイルを表示
(<link linkend="api.display"><varname>display()</varname></link>)
します。
</para>
<example>
<title>/web/www.example.com/docs/guestbook/index.php の編集</title>
<programlisting role="php">
<![CDATA[
<?php
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = '/web/www.example.com/guestbook/templates/';
$smarty->compile_dir = '/web/www.example.com/guestbook/templates_c/';
$smarty->config_dir = '/web/www.example.com/guestbook/configs/';
$smarty->cache_dir = '/web/www.example.com/guestbook/cache/';
$smarty->assign('name','Ned');
//** 次の行のコメントをはずすと、デバッギングコンソールを表示します
//$smarty->debugging = true;
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<note>
<title>注意</title>
<para>
この例では、Smartyのディレクトリすべてを絶対パスで設定しています。
もし <filename
class="directory">/web/www.example.com/guestbook/</filename>
が PHP の include_path にあるのなら、これらの設定は必要ありません。
けれどもこれらを絶対パスで指定する方が より効率的で、(経験上)エラーが少なくなります。
そうすれば、Smarty はあなたが意図したディレクトリからファイルを確実に取得できます。
</para>
</note>
<para>
では、web ブラウザから <filename>index.php</filename> ファイルを読み込んでみましょう。
<emphasis>"こんにちは、Ned。ようこそ Smarty へ!"</emphasis> と表示されるはずです。
</para>
<para>
これで Smarty の基本的なセットアップは完了しました!
</para>
</sect1>
<sect1 id="installing.smarty.extended">
<title>拡張セットアップ</title>
<para>
これは、<link
linkend="installing.smarty.basic">基本的なインストール</link>
の続きです。まず先にこちらから読んで下さい!
</para>
<para>
Smarty をより柔軟にするセットアップ方法は、
<ulink url="&url.php-manual;ref.classobj">クラスを拡張</ulink>
してあなたの Smarty の環境を初期化する事です。
ディレクトリパスの設定を同じ変数に何度も割り当てる代わりに、一箇所でそれらを行う事が出来ます。
</para>
<para>
新しいディレクトリ<filename
class="directory">/php/includes/guestbook/</filename>
を作成し、<filename>setup.php</filename> という新しいファイルを作成しましょう。
この例の環境では <filename class="directory">/php/includes</filename>
<literal>include_path</literal> です。
例と同じようにするか、あるいは絶対パスを使用して下さい。
</para>
<example>
<title>/php/includes/guestbook/setup.php</title>
<programlisting role="php">
<![CDATA[
<?php
// Smartyライブラリを読み込みます
require('Smarty.class.php');
// setup.phpはアプリケーションに必要なライブラリファイルを
// 読み込むのに適した場所です。それをここで行うことができます。例:
// require('guestbook/guestbook.lib.php');
class Smarty_GuestBook extends Smarty {
function Smarty_GuestBook()
{
// クラスのコンストラクタ。
// これらは新しいインスタンスで自動的にセットされます。
$this->Smarty();
$this->template_dir = '/web/www.example.com/guestbook/templates/';
$this->compile_dir = '/web/www.example.com/guestbook/templates_c/';
$this->config_dir = '/web/www.example.com/guestbook/configs/';
$this->cache_dir = '/web/www.example.com/guestbook/cache/';
$this->caching = true;
$this->assign('app_name', 'Guest Book');
}
}
?>
]]>
</programlisting>
</example>
<para>
では、<filename>index.php</filename> ファイルを修正し、
<filename>setup.php</filename> を使うようにしてみましょう。
</para>
<example>
<title>/web/www.example.com/guestbook/htdocs/index.php</title>
<programlisting role="php">
<![CDATA[
<?php
require('guestbook/setup.php');
$smarty = new Smarty_GuestBook();
$smarty->assign('name','Ned');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
このように、アプリケーションのために全てを自動的に初期化する
<literal>Smarty_GuestBook()</literal>
クラスを使う事で、Smarty のインスタンスをとても簡単に作成することができました。
</para>
</sect1>
</chapter>
</part>
<!-- 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
-->

View File

@@ -0,0 +1,8 @@
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<!ENTITY SMARTYManual "Smarty マニュアル">
<!ENTITY SMARTYDesigners "テンプレートデザイナのための Smarty">
<!ENTITY SMARTYProgrammers "プログラマのための Smarty">
<!ENTITY Appendixes "付録">

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<!ENTITY note.parameter.merge '<note>
<title>テクニカルノート</title>
<para>
<parameter>merge</parameter> パラメータは配列のキーを尊重するので、
インデックスが数値である2つの配列をマージする場合、
それらはお互い上書きされるか不連続なキーの配列になるかもしれません。
これは、数値のキーを全て削除した後に再びキーに番号付けを行う、PHP
の <ulink url="&url.php-manual;array_merge"><varname>array_merge()</varname></ulink>
関数とは違っています。
</para>
</note>'>
<!ENTITY parameter.compileid '<para>
任意の第3パラメータとして <parameter>$compile_id</parameter>
を渡すことができます。
異なる言語でコンパイルされた別々のテンプレートが存在するような、
同じテンプレートの異なるバージョンをコンパイルしたい場合に利用します。
<parameter>$compile_id</parameter> の別の利用法としては、複数の
<link linkend="variable.template.dir"><parameter>$template_dir</parameter></link>
を持っているが
<link linkend="variable.compile.dir"><parameter>$compile_dir</parameter></link>
は1つしかない場合などがあります。各
<link linkend="variable.template.dir"><parameter>$template_dir</parameter></link>
に別々の <parameter>$compile_id</parameter> をセットしなければ、
同名のテンプレートはお互いに上書きされてしまいます。
この関数をコールする度に compile_id を渡す代わりに、一度
<link linkend="variable.compile.id">
<parameter>$compile_id</parameter></link> 変数をセットすることもできます。
</para>'>
<!ENTITY api.register.snippet '<para>
PHP 関数のコールバック <parameter>function</parameter>
は、次のいずれかとなります。
<itemizedlist>
<listitem><para>
関数名を含んだ文字列
</para></listitem>
<listitem><para>
<literal>array(&amp;$object, $method)</literal> 形式の配列
<literal>&amp;$object</literal> はオブジェクトの参照で、
<literal>$method</literal> はメソッド名を含む文字列)
</para></listitem>
<listitem><para>
<literal>array($class, $method)</literal> という形式の配列
<literal>$class</literal> はクラス名であり、
<literal>$method</literal> はクラスのメソッド)
</para></listitem>
</itemizedlist>
</para>'>

8
docs/ja/livedocs.ent Normal file
View File

@@ -0,0 +1,8 @@
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<!ENTITY livedocs.author '作者:<br />'>
<!ENTITY livedocs.editors '編集者:<br />'>
<!ENTITY livedocs.copyright '著作権 &copy; %s by %s'>
<!ENTITY livedocs.published '公開日: %s'>

View File

@@ -0,0 +1,38 @@
<HTML>
<!-- $Revision$ -->
<!-- EN-Revision: 1.1 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<HEAD>
<TITLE>Smarty マニュアル</TITLE>
<META NAME="HTTP_EQUIV" CONTENT="text/html; charset=utf-8">
<LINK REL="STYLESHEET" HREF="style.css">
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" TOPMARGIN="0" LEFTMARGIN="0">
<TABLE BORDER="0" WIDTH="100%" HEIGHT="100%" CELLSPACING="0" CELLPADDING="0">
<TR><TD COLSPAN="3"><DIV CLASS="NAVHEADER"><TABLE BGCOLOR="#CCCCFF" BORDER="0"
CELLPADDING="0" CELLSPACING="0" WIDTH="100%"><TR><TD><TABLE WIDTH="100%" BORDER="0"
CELLPADDING="3" CELLSPACING="0"><TR><TH COLSPAN="3">Smarty Manual</TH></TR><TR><TD
COLSPAN="3" ALIGN="center">&nbsp;</TD></TR></TABLE></TD></TR><TR BGCOLOR="#333366">
<TD><IMG SRC="spacer.gif" BORDER="0" WIDTH="1" HEIGHT="1"><BR></TD></TR></TABLE></DIV></TD></TR>
<TR><TD><IMG SRC="spacer.gif" WIDTH="10" HEIGHT="1"></TD><TD HEIGHT="100%" VALIGN="MIDDLE" WIDTH="100%"><BR>
<P><TABLE ALIGN="CENTER">
<TR><TD ALIGN="CENTER">
<H1 CLASS="title">Smarty マニュアル</H1>
<DIV CLASS="author">Monte Ohrt</DIV>
<DIV CLASS="author">Andrei Zmievski</DIV>
</TD></TR></TABLE>
<BR><P ALIGN="CENTER">このファイルは [GENTIME] に作成されました<BR>
最新版は <A HREF="http://smarty.php.net/download-docs.php">http://smarty.php.net/download-docs.php</A>
で取得してください。</P>
<BR><P CLASS="copyright" ALIGN="CENTER">Copyright &copy; 2001 - 2005 New Digital Group, Inc.</P>
</TD><TD><IMG SRC="spacer.gif" WIDTH="10" HEIGHT="1"></TD></TR>
<TR><TD COLSPAN="3"><DIV CLASS="NAVFOOTER"><TABLE BGCOLOR="#CCCCFF" BORDER="0"
CELLPADDING="0" CELLSPACING="0" WIDTH="100%"><TR BGCOLOR="#333366">
<TD><IMG SRC="spacer.gif" BORDER="0" WIDTH="1" HEIGHT="1"><BR></TD></TR>
<TR><TD><TABLE WIDTH="100%" BORDER="0" CELLPADDING="3" CELLSPACING="0">
<TR><TD COLSPAN="3">&nbsp;</TD></TR><TR><TD COLSPAN="3" ALIGN="center">&nbsp;</TD>
</TR></TABLE></TD></TR></TABLE></DIV></TD></TR></TABLE>
</BODY></HTML>

94
docs/ja/preface.xml Normal file
View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.3 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<preface id="preface">
<title>序文</title>
<para>
"PHP スクリプトをレイアウトから分離させるにはどうすればいいのですか?"
これは間違いなく、PHPメーリングリストでよく尋ねられた質問のうちのつでしょう。
PHP は "HTML 埋め込み型スクリプト言語" と言われていますが、
PHP と HTML を混ぜ合わせたプロジェクトを2,3書いた後で、
フォームとコンテンツの分離は良いものであるというアイディアを考え出しました。
その上、多くの会社においてのレイアウトデザイナーとプログラマの役割は分担されています。
このような理由から、テンプレートソリューションの模索が始まりました。
</para>
<para>
例えば私たちの会社において、アプリケーション開発は次の順序で行われています。
アプリケーションの要求仕様書を作成した後、インタフェースデザイナーは
ユーザーインタフェースのモデルを作成しプログラマに渡します。
プログラマーは PHP によってビジネスロジックを実装し、
ユーザーインタフェースのモデルを使ってテンプレートの骨組みを作成します。
その後、プロジェクトはとても素晴らしいテンプレートをもたらしてくれる
HTML テンプレートデザイナー/レイアウトデザイナーに手渡されます。
このようにプロジェクトはプログラマー/デザイナーの間で
あちこちに何度も行き来する可能性があります。
プログラマーは HTML を何も扱いたくないし、HTML デザイナーに PHP
コードの箇所をいじられたくないので、有用なテンプレートの土台を持つ事は重要です。
デザイナーは設定ファイルやダイナミックブロックのサポートや
他のインタフェースの公開が必要ですが、彼らは複雑な PHP 言語を扱いたくありません。
</para>
<para>
今日、PHP で利用可能な多くのテンプレートソリューションを見ると、
それらの大半は制限付きのダイナミックブロックの機能性や、
テンプレート内に変数を展開するための基本的な方法を提供しています。
しかし、我々のニーズは僅かにそれを上回るものを必要としました。
プログラマーは HTML レイアウトを全く扱いたくないのですが、
これはほとんど避けられませんでした。例えば、
デザイナーが背景色をダイナミックブロックによって変更したい場合、
プログラマーはそれを前もって考慮しておく必要がありました。
また、我々はテンプレートに変数を割り当てるための環境設定用のファイルを扱える
デザイナーを必要としました。話は続きます。
</para>
<para>
我々は 1999 年末からテンプレートエンジンの仕様を書き始めました。
仕様を書き終えた後、願わくば PHP に統合されるようにと C
で書かれたテンプレートエンジンに取り組み始めました。
その時、我々は複雑な技術的障害に直面したばかりでなく、
具体的にテンプレートエンジンですべき事とすべきではない事についての激しい討論をしました。
そしてその経験から、テンプレートエンジンは PHP のクラスとして記述されるべきであると決定したのは、
誰もが使用するのに適していると考えたからです。我々は PHP のクラスとしてのエンジンを書き、
そして <productname>SmartTemplate</productname> が生まれました
(注: このクラスは一般に公開されませんでした)。これは、
規則的な変数置換・他のテンプレートのインクルード・設定ファイルによる統一・PHP
スクリプトの埋め込み・制限された if ステートメントの機能性と多重ネスト可能なダイナミックブロック等、
我々が必要とした全てを持ち合わせたクラスでした。
ですが、むしろ全てが正規表現によって処理されるというコードは私たちには理解できませんでした。
各呼び出しごとに全てのパースと正規表現による作業を行う必要があったので、
大規模なアプリケーションでは動作が著しく遅かったのです。
プログラマの観点からの最も大きな問題は、テンプレート及びダイナミックブロックをセットアップ・
処理するために PHP スクリプトにおいての必要な作業でした。どうすれば、
これをより容易に行えるのでしょうか?
</para>
<para>
そうして、最終的に Smarty となったものの展望がたちました。
私たちはテンプレートのパースによるオーバーヘッドを持たない
PHP コードがどれくらい高速に動作するかを知っています。
また、我々は PHP スクリプトが一般のデザイナーにとって
こまごまとした高圧的なものに見える可能性がある事を知っています。
そしてそれは PHP よりもはるかにシンプルなテンプレート言語によって隠蔽されるかもしれません。
もし我々がこの2つの強さを兼ね備えたらどうなるでしょう?
このようにして "Smarty" は生まれたのです…… (^o^)
</para>
</preface>
<!-- 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
-->

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="advanced.features">
<title>隲。?。陟托スオ隶匁コッ?</title>
&programmers.advanced-features.advanced-features-objects;
&programmers.advanced-features.advanced-features-prefilters;
&programmers.advanced-features.advanced-features-postfilters;
&programmers.advanced-features.advanced-features-outputfilters;
&programmers.advanced-features.section-template-cache-handler-func;
&programmers.advanced-features.template-resources;
</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
-->

View File

@@ -0,0 +1,139 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="advanced.features.objects">
<title>オブジェクト</title>
<para>
Smarty は、テンプレートから PHP の
<ulink url="&url.php-manual;object">オブジェクト</ulink>
へのアクセスを許可しています。オブジェクトにアクセスするには2つの方法があります。
</para>
<itemizedlist spacing="compact">
<listitem><para>
1つはテンプレートに <link linkend="api.register.object">オブジェクトを登録</link>
し、<link linkend="language.custom.functions">カスタム関数</link>
と似た構文を用いてアクセスする方法です。
</para></listitem>
<listitem><para>
もう1つの方法は <link linkend="api.assign"><varname>assign()</varname></link>
を用いてテンプレートにオブジェクトを割り当て、
他の割り当てられた変数のようにオブジェクトにアクセスする方法です。
</para></listitem>
</itemizedlist>
<para>
1つめのメソッドは素晴らしいテンプレート構文を持っています。
それはとてもセキュアで、 登録されたオブジェクトはいくつかのメソッドやプロパティを制限する事が出来ます。
しかし<emphasis role="bold">繰り返しの処理やオブジェクトの配列への割り当て等の事が出来ません</emphasis>
あなたのニーズによって選択するメソッドは決まりますが、
テンプレート構文を最小限守るには必ず1つめのメソッドを使用して下さい。
</para>
<para>
<link linkend="variable.security"><parameter>$security</parameter></link>
が有効の時、('_' から始まる) プライベートメソッドや関数にはアクセス出来ません。
もしメソッドとプロパティで同じ名前が存在する場合、メソッドが優先されます。
</para>
<para>
第3パラメータにメソッドやパラメータをリストした配列を与える事でアクセスを制限できます。
</para>
<para>
デフォルトではテンプレートからオブジェクトに渡されたパラメータは
<link linkend="language.custom.functions">カスタム関数</link>
によって同じ方法で渡されます。 連想配列は第1パラメータとして渡され、
smarty オブジェクトは第2パラメータとして渡されます。
もし古いオブジェクトパラメータの渡し方のように各引数を一度に渡したいなら、第4パラメータに
&false; を指定します。
</para>
<para>
任意の第5パラメータは
<parameter>format</parameter>&true; の時だけ影響し、
ブロックとして扱われるべきオブジェクトのメソッドのリストを格納します。
これはこれらのメソッドがテンプレート内に終了タグ
(<literal>{foobar->meth2}...{/foobar->meth2}</literal>)
を持つことを意味し、メソッドへのパラメータは
<link linkend="plugins.block.functions">
<varname>block-function-plugins</varname></link>
へのパラメータと同じ構文となります。つまり、4つのパラメータ
<parameter>$params</parameter>
<parameter>$content</parameter>
<parameter>&amp;$smarty</parameter> および
<parameter>&amp;$repeat</parameter> を持ち、ブロック関数プラグインのように振る舞います。
</para>
<example>
<title>登録または割り当てられたオブジェクトを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
// オブジェクト
class My_Object {
function meth1($params, &$smarty_obj) {
return 'this is my meth1';
}
}
$myobj = new My_Object;
// オブジェクトを (参照で) 登録します
$smarty->register_object('foobar',$myobj);
// いくらかのメソッド又はプロパティを制限したい場合、それらを配列の値としてリストします
$smarty->register_object('foobar',$myobj,array('meth1','meth2','prop1'));
// 古いオブジェクトパラメータの形式を使いたい場合、booleanのfalseを渡します。
$smarty->register_object('foobar',$myobj,null,false);
// オブジェクトを割り当てる事が可能です(できれば参照渡しで)
$smarty->assign_by_ref('myobj', $myobj);
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
そして <filename>index.tpl</filename>
でオブジェクトにアクセスするには以下のようにします。
</para>
<programlisting>
<![CDATA[
{* 登録されたオブジェクトにアクセスします *}
{foobar->meth1 p1='foo' p2=$bar}
{* outputに割り当てる事が可能 *}
{foobar->meth1 p1='foo' p2=$bar assign='output'}
the output was {$output}
{* 割り当てたオブジェクトにアクセスします *}
{$myobj->meth1('foo',$bar)}
]]>
</programlisting>
</example>
<para>
<link linkend="api.register.object"><varname>register_object()</varname></link>
および
<link linkend="api.assign"><varname>assign()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="advanced.features.outputfilters">
<title>アウトプットフィルタ</title>
<para>
テンプレートが
<link linkend="api.display"><varname>display()</varname></link> 又は
<link linkend="api.fetch"><varname>fetch()</varname></link>
を経由して呼び出された時、出力は1つ又は複数のアウトプットフィルタを通して送られます。
これは <link linkend="advanced.features.postfilters">
<varname>ポストフィルタ</varname></link> とは異なります。
コンパイルされたテンプレートがポストフィルタによって、
テンプレートがディスクに保存される前に処理されるのに対し、
アウトプットフィルタはテンプレートが実行される時にその出力を処理します。
</para>
<para>
アウトプットフィルタは、
<link linkend="api.register.outputfilter">登録する</link>
か、あるいは <link linkend="api.load.filter"><varname>load_filter()</varname></link>
関数や <link linkend="variable.autoload.filters">
<parameter>$autoload_filters</parameter></link> 変数によって
<link linkend="variable.plugins.dir">プラグインディレクトリ</link> から読み込みます。
Smarty は内部でユーザ定義関数の第1パラメータにコンパイルされたテンプレートのソースコードを渡すので、
関数内で処理を行った後にその結果のソースコードを戻り値として返すようにします。
</para>
<example>
<title>アウトプットフィルタを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
// このユーザ定義関数をアプリケーションに加えます
function protect_email($tpl_output, &$smarty)
{
$tpl_output =
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
'$1%40$2', $tpl_output);
return $tpl_output;
}
// アウトプットフィルタを登録します
$smarty->register_outputfilter('protect_email');
$smarty->display('index.tpl');
// これによりテンプレート出力に含まれるいくつかのemailアドレスは
// スパムボットからシンプルな保護を受けるでしょう
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.register.outputfilter"><varname>register_outpurfilter()</varname></link>
<link linkend="api.load.filter"><varname>load_filter()</varname></link>
<link linkend="variable.autoload.filters"><parameter>$autoload_filters</parameter></link>
<link linkend="advanced.features.postfilters">ポストフィルタ</link> および
<link linkend="variable.plugins.dir"><parameter>$plugins_dir</parameter></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="advanced.features.postfilters">
<title>ポストフィルタ</title>
<para>
ポストフィルタは、テンプレートが
<emphasis>コンパイルされた後に</emphasis>
実行されるPHPユーザ定義関数です。ポストフィルタは、
<link linkend="api.register.postfilter">登録する</link>
か、あるいは <link linkend="api.load.filter"><varname>load_filter()</varname></link>
関数や <link linkend="variable.autoload.filters">
<parameter>$autoload_filters</parameter></link> 変数によって
<link linkend="variable.plugins.dir">プラグインディレクトリ</link> から読み込みます。
Smarty は内部でユーザ定義関数の第1パラメータにコンパイルされたテンプレートのソースコードを渡すので、
関数内で処理を行った後にその結果のソースコードを戻り値として返すようにします。
</para>
<example>
<title>ポストフィルタを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
// このユーザ定義関数をアプリケーションに加えます
function add_header_comment($tpl_source, &$smarty)
{
return "<?php echo \"<!-- Created by Smarty! -->\n\"; ?>\n".$tpl_source;
}
// ポストフィルタを登録します
$smarty->register_postfilter('add_header_comment');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
<para>
上のポストフィルタは、このようなコンパイル済みテンプレート
<filename>index.tpl</filename> を作成します。
</para>
<screen>
<![CDATA[
<!-- Created by Smarty! -->
{* 以下、残りのコンテンツ *}
]]>
</screen>
</example>
<para>
<link linkend="api.register.postfilter"><varname>register_postfilter()</varname></link>
<link linkend="advanced.features.prefilters">プリフィルタ</link>
および
<link linkend="api.load.filter"><varname>load_filter()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,73 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="advanced.features.prefilters">
<title>プリフィルタ</title>
<para>
プリフィルタは、テンプレートが<emphasis>コンパイルされる前に</emphasis>
実行されるPHPユーザ定義関数です。テンプレートに含まれた不必要なコメントを除いたり、
第三者にテンプレートの更新を任せている時に
テンプレート内にどのようなものが含まれているかを監視する等といった前処理を行います。
</para>
<para>
プリフィルタは、 <link linkend="api.register.prefilter">登録する</link>
か、あるいは <link linkend="api.load.filter"><varname>load_filter()</varname></link>
関数や <link linkend="variable.autoload.filters">
<parameter>$autoload_filters</parameter></link> 変数によって
<link linkend="variable.plugins.dir">プラグインディレクトリ</link> から読み込みます。
</para>
<para>
Smartyは内部でユーザ定義関数の第パラメータにテンプレートのソースコードを渡すので、
関数内で処理を行った後にその結果のソースコードを戻り値として返すようにします。
</para>
<example>
<title>プリフィルタを使用する</title>
<para>
これはテンプレートソース内の全てのコメントを取り除いてくれるでしょう。
</para>
<programlisting role="php">
<![CDATA[
<?php
// このユーザ定義関数をアプリケーションに加えます
function remove_dw_comments($tpl_source, &$smarty)
{
return preg_replace("/<!--#.*-->/U",'',$tpl_source);
}
// プリフィルタを登録します
$smarty->register_prefilter('remove_dw_comments');
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.register.prefilter"><varname>register_prefilter()</varname></link>
<link linkend="advanced.features.postfilters">ポストフィルタ</link>
および
<link linkend="api.load.filter"><varname>load_filter()</varname></link>
も参照してください。
</para>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,184 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="section.template.cache.handler.func">
<title>キャッシュハンドラ関数</title>
<para>
デフォルトのファイルベースのキャッシュメカニズムの代替として、
キャッシュファイルの読み書きや破棄を直接行うキャッシュハンドラ関数を指定できます。
</para>
<para>
まず、アプリケーション内にSmartyがキャッシュハンドラとして使用するための関数を定義します。
そしてその関数名を <link linkend="variable.cache.handler.func">
<parameter>$cache_handler_func</parameter></link>
クラス変数に指定します。Smarty は、これを使用してキャッシュされたデータを処理します。
</para>
<itemizedlist>
<listitem><para>
第1パラメータはキャッシュの動作を表す文字列で、これは
<literal>read</literal><literal>write</literal> および
<literal>clear</literal> のいずれかとなります。
</para></listitem>
<listitem><para>
第2パラメータは Smarty オブジェクトです。
</para></listitem>
<listitem><para>
第3パラメータはキャッシュの内容です。
<literal>write</literal> の場合はキャッシュされたコンテンツが渡され、
<literal>read</literal> の場合は参照を受け取ってそこにキャッシュされたコンテンツを書き込み、
<literal>clear</literal> の場合はこのパラメータの値を使用しないのでダミーの変数が渡されます。
</para></listitem>
<listitem><para>
第4パラメータはテンプレートファイル名です('read'又は'write'の場合に必要)。
</para></listitem>
<listitem><para>
任意の第5パラメータは <parameter>$cache_id</parameter> です。
</para></listitem>
<listitem><para>
任意の第6パラメータは <link linkend="variable.compile.id">
<parameter>$compile_id</parameter></link> です。
</para></listitem>
<listitem><para>
最後の第7パラメータ <parameter>$exp_time</parameter>
は Smarty-2.6.0 で追加されました。
</para></listitem>
</itemizedlist>
<example>
<title>キャッシュソースとしてMySQLを使用する例</title>
<programlisting role="php">
<![CDATA[
<?php
/**************************************************
example usage:
include('Smarty.class.php');
include('mysql_cache_handler.php');
$smarty = new Smarty;
$smarty->cache_handler_func = 'mysql_cache_handler';
$smarty->display('index.tpl');
MySQLデータベースのスキーマ定義
create database SMARTY_CACHE;
create table CACHE_PAGES(
CacheID char(32) PRIMARY KEY,
CacheContents MEDIUMTEXT NOT NULL
);
**************************************************/
function mysql_cache_handler($action, &$smarty_obj, &$cache_content, $tpl_file=null, $cache_id=null, $compile_id=null, $exp_time=null)
{
// ここでDBのホスト名・ユーザ名・パスワードを指定します
$db_host = 'localhost';
$db_user = 'myuser';
$db_pass = 'mypass';
$db_name = 'SMARTY_CACHE';
$use_gzip = false;
// ユニークなキャッシュIDを作成します
$CacheID = md5($tpl_file.$cache_id.$compile_id);
if(! $link = mysql_pconnect($db_host, $db_user, $db_pass)) {
$smarty_obj->_trigger_error_msg('cache_handler: could not connect to database');
return false;
}
mysql_select_db($db_name);
switch ($action) {
case 'read':
// キャッシュをデータベースから読み込みます
$results = mysql_query("select CacheContents from CACHE_PAGES where CacheID='$CacheID'");
if(!$results) {
$smarty_obj->_trigger_error_msg('cache_handler: query failed.');
}
$row = mysql_fetch_array($results,MYSQL_ASSOC);
if($use_gzip && function_exists('gzuncompress')) {
$cache_content = gzuncompress($row['CacheContents']);
} else {
$cache_content = $row['CacheContents'];
}
$return = $results;
break;
case 'write':
// キャッシュをデータベースに保存します
if($use_gzip && function_exists("gzcompress")) {
// 記憶効率のために内容を圧縮します
$contents = gzcompress($cache_content);
} else {
$contents = $cache_content;
}
$results = mysql_query("replace into CACHE_PAGES values(
'$CacheID',
'".addslashes($contents)."')
");
if(!$results) {
$smarty_obj->_trigger_error_msg('cache_handler: query failed.');
}
$return = $results;
break;
case 'clear':
// キャッシュ情報を破棄します
if(empty($cache_id) && empty($compile_id) && empty($tpl_file)) {
// 全てのキャッシュを破棄します
$results = mysql_query('delete from CACHE_PAGES');
} else {
$results = mysql_query("delete from CACHE_PAGES where CacheID='$CacheID'");
}
if(!$results) {
$smarty_obj->_trigger_error_msg('cache_handler: query failed.');
}
$return = $results;
break;
default:
// エラー・未知の動作
$smarty_obj->_trigger_error_msg("cache_handler: unknown action \"$action\"");
$return = false;
break;
}
mysql_close($link);
return $return;
}
?>
]]>
</programlisting>
</example>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,258 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<sect1 id="template.resources">
<title>テンプレートリソース</title>
<para>
テンプレートは様々なリソースから呼び出して使用できます。テンプレートを
<link linkend="api.display"><varname>display()</varname></link>
<link linkend="api.fetch"><varname>fetch()</varname></link>
したり別のテンプレートからインクルードしたりする際には、
リソースの種類に続けて適切なパスとテンプレート名を指定します。
リソースを明示的に指定しない場合は <link
linkend="variable.default.resource.type">
<parameter>$default_resource_type</parameter></link> の値であるとみなします。
</para>
<sect2 id="templates.from.template.dir">
<title>$template_dir からのテンプレート</title>
<para>
<link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link> からのテンプレートを使用する場合は、
テンプレートリソースの指定は必要ありません。しかし、一貫性を保つために
<literal>file:</literal> リソースを使用してもかまいません。使用したいテンプレートへのパスを、
<link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link>
のルートディレクトリからの相対パスで指定します。
</para>
<example>
<title>$template_dir のテンプレートを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display('index.tpl');
$smarty->display('admin/menu.tpl');
$smarty->display('file:admin/menu.tpl'); // 上と同じ
?>
]]>
</programlisting>
<para>Smarty のテンプレート</para>
<programlisting>
<![CDATA[
{include file='index.tpl'}
{* 以下は、上と同じです *}
{include file='file:index.tpl'}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="templates.from.any.dir">
<title>任意のディレクトリからのテンプレート</title>
<para>
<link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link>
の外に置かれたテンプレートを使うには、リソースの種類
<literal>file:</literal> を指定しなければなりません。
その後にテンプレートへの絶対パスを続けます。
</para>
<example>
<title>任意のディレクトリからのテンプレートを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display('file:/export/templates/index.tpl');
$smarty->display('file:/path/to/my/templates/menu.tpl');
?>
]]>
</programlisting>
<para>
Smarty のテンプレート
</para>
<programlisting>
<![CDATA[
{include file='file:/usr/local/share/templates/navigation.tpl'}
]]>
</programlisting>
</example>
<sect3 id="templates.windows.filepath">
<title>Windows のファイルパス</title>
<para>
通常、Windows 環境の場合はファイルパスの先頭にドライブレター (C:)
が含まれます。ネームスペースの衝突を回避して期待通りの結果を得るために、
必ず <literal>file:</literal> を使用して下さい。
</para>
<example>
<title>Windows ファイルパスからテンプレートを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
$smarty->display('file:C:/export/templates/index.tpl');
$smarty->display('file:F:/path/to/my/templates/menu.tpl');
?>
]]>
</programlisting>
<para>
Smarty テンプレート
</para>
<programlisting>
<![CDATA[
{include file='file:D:/usr/local/share/templates/navigation.tpl'}
]]>
</programlisting>
</example>
</sect3>
</sect2>
<sect2 id="templates.from.elsewhere">
<title>その他のリソース内のテンプレート</title>
<para>
データベース・ソケット・LDAP 等の
PHPによってアクセス可能なリソースからテンプレートを取得する事ができます。
そのためにはリソースプラグイン関数を記述し、それを登録する必要があります。
</para>
<para>
リソースプラグイン関数についての詳細な情報は
<link linkend="plugins.resources">リソースプラグイン</link>
の項を参照してください。
</para>
<note>
<para>
元から存在する <literal>file:</literal> リソースは上書きできないことに注意しましょう。
しかし、ファイルシステム上のテンプレートを別の方法で取得するテンプレートを作成することはできます。
それを別のリソース名で登録すればよいのです。
</para>
</note>
<example>
<title>カスタムリソースを使用する</title>
<programlisting role="php">
<![CDATA[
<?php
// これらの関数をアプリケーションに追加します
function db_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
// ここでデータベースを呼び出し、取得したテンプレートを
// $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 db_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
// $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 db_get_secure($tpl_name, &$smarty_obj)
{
// 全てのテンプレートがセキュアであると仮定します
return true;
}
function db_get_trusted($tpl_name, &$smarty_obj)
{
// テンプレートから使用しません
}
// テンプレートリソース名"db"を登録します
$smarty->register_resource("db", array("db_get_template",
"db_get_timestamp",
"db_get_secure",
"db_get_trusted"));
// phpスクリプトからテンプレートリソースを使用します
$smarty->display("db:index.tpl");
?>
]]>
</programlisting>
<para>
Smarty テンプレート
</para>
<programlisting>
<![CDATA[
{include file='db:/extras/navigation.tpl'}
]]>
</programlisting>
</example>
</sect2>
<sect2 id="default.template.handler.function">
<title>デフォルトのテンプレートハンドラ関数</title>
<para>
テンプレートリソースからテンプレートの取得に失敗した際に、
テンプレートのコンテンツを取り戻すために呼び出されるユーザ定義関数を指定します。
この関数の使用方法の1つとして、その場限りのテンプレートを作成する処理を行います。
</para>
<example>
<title>デフォルトのテンプレートハンドラ関数を使用する</title>
<programlisting role="php">
<![CDATA[
<?php
// アプリケーション内のどこかでこの関数を呼び出します
function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp,
&$smarty_obj)
{
if( $resource_type == 'file' ) {
if ( ! is_readable ( $resource_name )) {
// テンプレートファイルを生成し、コンテンツを返します
$template_source = "This is a new template.";
require_once SMARTY_CORE_DIR . 'core.write_file.php';
smarty_core_write_file( array( 'filename'=>$smarty_obj->template_dir . DIRECTORY_SEPARATOR . $resource_name, 'contents'=>$template_source ), $smarty_obj );
return true;
}
} else {
// ファイルではない場合
return false;
}
}
// デフォルトのハンドラをセット
$smarty->default_template_handler_func = 'make_template';
?>
]]>
</programlisting>
</example>
</sect2>
</sect1>
<!-- 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
-->

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.10 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<chapter id="api.functions">
<title>Smarty 繧ッ繝ゥ繧ケ繝。繧ス繝?ラ</title>
&programmers.api-functions.api-append;
&programmers.api-functions.api-append-by-ref;
&programmers.api-functions.api-assign;
&programmers.api-functions.api-assign-by-ref;
&programmers.api-functions.api-clear-all-assign;
&programmers.api-functions.api-clear-all-cache;
&programmers.api-functions.api-clear-assign;
&programmers.api-functions.api-clear-cache;
&programmers.api-functions.api-clear-compiled-tpl;
&programmers.api-functions.api-clear-config;
&programmers.api-functions.api-config-load;
&programmers.api-functions.api-display;
&programmers.api-functions.api-fetch;
&programmers.api-functions.api-get-config-vars;
&programmers.api-functions.api-get-registered-object;
&programmers.api-functions.api-get-template-vars;
&programmers.api-functions.api-is-cached;
&programmers.api-functions.api-load-filter;
&programmers.api-functions.api-register-block;
&programmers.api-functions.api-register-compiler-function;
&programmers.api-functions.api-register-function;
&programmers.api-functions.api-register-modifier;
&programmers.api-functions.api-register-object;
&programmers.api-functions.api-register-outputfilter;
&programmers.api-functions.api-register-postfilter;
&programmers.api-functions.api-register-prefilter;
&programmers.api-functions.api-register-resource;
&programmers.api-functions.api-trigger-error;
&programmers.api-functions.api-template-exists;
&programmers.api-functions.api-unregister-block;
&programmers.api-functions.api-unregister-compiler-function;
&programmers.api-functions.api-unregister-function;
&programmers.api-functions.api-unregister-modifier;
&programmers.api-functions.api-unregister-object;
&programmers.api-functions.api-unregister-outputfilter;
&programmers.api-functions.api-unregister-postfilter;
&programmers.api-functions.api-unregister-prefilter;
&programmers.api-functions.api-unregister-resource;
</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
-->

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.append.by.ref">
<refnamediv>
<refname>append_by_ref()</refname>
<refpurpose>参照として値を追加します。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>append_by_ref</methodname>
<methodparam><type>string</type><parameter>varname</parameter></methodparam>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>merge</parameter></methodparam>
</methodsynopsis>
<para>
これを使用して、テンプレートに参照として値を
<link linkend="api.append"><varname>追加</varname></link> します。
値を参照で追加すると、元の値が変更されると
追加した値も変更されます。
<link linkend="advanced.features.objects">オブジェクト</link> の場合は、
<varname>append_by_ref()</varname> を使用すると
追加されたオブジェクトをメモリ内でコピーすることを避けられます。
詳細は、PHP マニュアルのリファレンスの説明を参照して下さい。
任意の第3パラメータに &true; が渡された場合は、
値は現在のテンプレート配列に追加される代わりにマージされます。
</para>
&note.parameter.merge;
<example>
<title>append_by_ref</title>
<programlisting role="php">
<![CDATA[
<?php
// 名前/値 のペアを追加します
$smarty->append_by_ref('Name', $myname);
$smarty->append_by_ref('Address', $address);
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.append"><varname>append()</varname></link>
<link linkend="api.assign"><varname>assign()</varname></link>
および
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.append">
<refnamediv>
<refname>append()</refname>
<refpurpose>割り当てられたテンプレート配列に要素を追加します。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>append</methodname>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
</methodsynopsis>
<methodsynopsis>
<type>void</type><methodname>append</methodname>
<methodparam><type>string</type><parameter>varname</parameter></methodparam>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>merge</parameter></methodparam>
</methodsynopsis>
<para>
もし文字列を追加する場合は、 配列の値としてコンバートされた後に追加されます。
配列名/値のペアを明示的に指定するか、それらが格納された連想配列を指定します。
配列ではないテンプレート変数に対して追加した場合、
その変数を配列に変換した後で追加されます。 任意の第3パラメータに &true;
が渡された場合は、値は現在のテンプレート配列に追加される代わりにマージされます。
</para>
&note.parameter.merge;
<example>
<title>append</title>
<programlisting role="php">
<![CDATA[
<?php
// これは、事実上 assign() と同じです
$smarty->append('foo', 'Fred');
// これ以降、foo をテンプレート内で配列として使用することができます
$smarty->append('foo', 'Albert');
$array = array(1 => 'one', 2 => 'two');
$smarty->append('X', $array);
$array2 = array(3 => 'three', 4 => 'four');
// 配列 X に2番目の要素を追加します
$smarty->append('X', $array2);
// 連想配列を渡します
$smarty->append(array('city' => 'Lincoln', 'state' => 'Nebraska'));
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.append.by.ref"><varname>append_by_ref()</varname></link>
<link linkend="api.assign"><varname>assign()</varname></link>
および
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.6 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.assign.by.ref">
<refnamediv>
<refname>assign_by_ref()</refname>
<refpurpose>参照として値を割り当てます。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>assign_by_ref</methodname>
<methodparam><type>string</type><parameter>varname</parameter></methodparam>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
</methodsynopsis>
<para>
これを使用して、コピーを作ることなく参照として
テンプレートに変数を <link linkend="api.assign"><varname>割り当て</varname></link>
ます。詳細は、PHP マニュアルのリファレンスの説明を参照して下さい。
</para>
<note>
<title>テクニカルノート</title>
<para>
これは参照によってテンプレートに変数を追加するのに使用されます。
参照による値が追加された場合は、その値が変更されると追加された元の値も変更されます。
<link linkend="advanced.features.objects">objects</link>
についても、<varname>assign_by_ref()</varname>
は追加されたオブジェクトをメモリ内にコピーする事を避けます。詳細は、
PHP マニュアルのリファレンスの説明を参照して下さい。
</para>
</note>
<example>
<title>assign_by_ref()</title>
<programlisting role="php">
<![CDATA[
<?php
// 名前/値のペアを渡します
$smarty->assign_by_ref('Name', $myname);
$smarty->assign_by_ref('Address', $address);
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.assign"><varname>assign()</varname></link>
<link linkend="api.clear.all.assign"><varname>clear_all_assign()</varname></link>
<link linkend="api.append"><varname>append()</varname></link>
<link linkend="language.function.assign"><varname>{assign}</varname></link>
および
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.7 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.assign">
<refnamediv>
<refname>assign()</refname>
<refpurpose>テンプレートに値を割り当てます。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>assign</methodname>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
</methodsynopsis>
<methodsynopsis>
<type>void</type><methodname>assign</methodname>
<methodparam><type>string</type><parameter>varname</parameter></methodparam>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
</methodsynopsis>
<para>
テンプレート変数名/値のペアを明示的に指定するか、それらが格納された連想配列を指定します。
</para>
<example>
<title>assign()</title>
<programlisting role="php">
<![CDATA[
<?php
// 名前/値のペアを渡します
$smarty->assign('Name', 'Fred');
$smarty->assign('Address', $address);
// 連想配列を渡します
$smarty->assign(array('city' => 'Lincoln', 'state' => 'Nebraska'));
// 配列を渡します
$myArray = array('no' => 10, 'label' => 'Peanuts');
$smarty->assign('foo',$myArray);
// データベース (例: adodb) の行を渡します
$sql = 'select id, name, email from contacts where contact ='.$id;
$smarty->assign('contact', $db->getRow($sql));
?>
]]>
</programlisting>
<para>
テンプレートの内容
</para>
<programlisting>
<![CDATA[
{* 変数は、php と同様に大文字小文字を区別することに注意しましょう *}
{$Name}
{$Address}
{$city}
{$state}
{$foo.no}, {$foo.label}
{$contact.id}, {$contact.name},{$contact.email}
]]>
</programlisting>
</example>
<para>
より複雑な配列の割り当てに関しては、
<link linkend="language.function.foreach"><varname>{foreach}</varname></link>
および
<link linkend="language.function.section"><varname>{section}</varname></link>
を参照してください。
</para>
<para>
<link linkend="api.assign.by.ref"><varname>assign_by_ref()</varname></link>
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
<link linkend="api.clear.assign"><varname>clear_assign()</varname></link>
<link linkend="api.append"><varname>append()</varname></link>
および
<link linkend="language.function.assign"><varname>{assign}</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.clear.all.assign">
<refnamediv>
<refname>clear_all_assign()</refname>
<refpurpose>割り当てられた全てのテンプレート変数を破棄します。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>clear_all_assign</methodname>
<void />
</methodsynopsis>
<example>
<title>clear_all_assign()</title>
<programlisting role="php">
<![CDATA[
<?php
// 名前/値のペアを渡します
$smarty->assign('Name', 'Fred');
$smarty->assign('Address', $address);
// 上の内容を出力します
print_r( $smarty->get_template_vars() );
// 割り当てられた変数を破棄します
$smarty->clear_all_assign();
// 何も出力しません
print_r( $smarty->get_template_vars() );
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.clear.assign"><varname>clear_assign()</varname></link>
<link linkend="api.clear.config"><varname>clear_config()</varname></link>
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
<link linkend="api.assign"><varname>assign()</varname></link>
および <link linkend="api.append"><varname>append()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.clear.all.cache">
<refnamediv>
<refname>clear_all_cache()</refname>
<refpurpose>全てのテンプレートのキャッシュをクリアします。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>clear_all_cache</methodname>
<methodparam choice="opt"><type>int</type><parameter>expire_time</parameter></methodparam>
</methodsynopsis>
<para>
任意のパラメータとして、キャッシュファイルを削除する前にそのファイルが存在しなくてはならない
最低限の時間(秒)を与える事が出来ます。
</para>
<example>
<title>clear_all_cache</title>
<programlisting role="php">
<![CDATA[
<?php
// キャッシュ全体をクリアします
$smarty->clear_all_cache();
// 一時間以上経過しているファイルをすべてクリアします
$smarty->clear_all_cache(3600);
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.clear.cache"><varname>clear_cache()</varname></link>
<link linkend="api.is.cached"><varname>is_cached()</varname></link>
および
<link linkend="caching">キャッシュ</link> のページも参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.clear.assign">
<refnamediv>
<refname>clear_assign()</refname>
<refpurpose>割り当てられたテンプレート変数の値を破棄します。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>clear_assign</methodname>
<methodparam><type>mixed</type><parameter>var</parameter></methodparam>
</methodsynopsis>
<para>
パラメータには1つの変数又は変数名を格納した配列を渡します。
</para>
<example>
<title>clear_assign()</title>
<programlisting role="php">
<![CDATA[
<?php
// ひとつの変数をクリアします
$smarty->clear_assign('Name');
// 複数の変数をクリアします
$smarty->clear_assign(array('Name', 'Address', 'Zip'));
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.clear.all.assign"><varname>clear_all_assign()</varname></link>
<link linkend="api.clear.config"><varname>clear_config()</varname></link>
<link linkend="api.get.template.vars"><varname>get_template_vars()</varname></link>
<link linkend="api.assign"><varname>assign()</varname></link>
および <link linkend="api.append"><varname>append()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.clear.cache">
<refnamediv>
<refname>clear_cache()</refname>
<refpurpose>指定したテンプレートのキャッシュを破棄します。</refpurpose>
</refnamediv>
<refsect1>
<title>Description</title>
<methodsynopsis>
<type>void</type><methodname>clear_cache</methodname>
<methodparam><type>string</type><parameter>template</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>cache_id</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>compile_id</parameter>
</methodparam>
<methodparam choice="opt"><type>int</type><parameter>expire_time</parameter></methodparam>
</methodsynopsis>
<itemizedlist>
<listitem><para>
If you have <link linkend="caching.multiple.caches">multiple caches</link>
for a template, you can clear a specific
cache by supplying the <parameter>cache_id</parameter> as the second
parameter.
</para></listitem>
<listitem><para>
You can also pass a
<link linkend="variable.compile.id"><parameter>$compile_id</parameter></link>
as a third parameter.
You can <link linkend="caching.groups">group templates together</link>
so they can be removed as a group, see the
<link linkend="caching">caching section</link> for more
information.
</para></listitem>
<listitem><para>
As an optional fourth parameter, you can supply a
minimum age in seconds the cache file must be before it will
get cleared.
</para></listitem>
</itemizedlist>
<example>
<title>clear_cache()</title>
<programlisting role="php">
<![CDATA[
<?php
// clear the cache for a template
$smarty->clear_cache('index.tpl');
// clear the cache for a particular cache id in an multiple-cache template
$smarty->clear_cache('index.tpl', 'MY_CACHE_ID');
?>
]]>
</programlisting>
</example>
<para>
See also
<link linkend="api.clear.all.cache"><varname>clear_all_cache()</varname></link>
and
<link linkend="caching"><varname>caching</varname></link> section.
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.4 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.clear.compiled.tpl">
<refnamediv>
<refname>clear_compiled_tpl()</refname>
<refpurpose>指定したテンプレートのキャッシュを破棄します。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>clear_compiled_tpl</methodname>
<methodparam choice="opt"><type>string</type><parameter>tpl_file</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>compile_id</parameter>
</methodparam>
<methodparam choice="opt"><type>int</type><parameter>exp_time</parameter></methodparam>
</methodsynopsis>
<para>
指定したテンプレートリソースをコンパイルした内容を破棄します。
何も指定しなかった場合は、すべてのコンパイル済みテンプレートファイルを破棄します。
<link linkend="variable.compile.id"><parameter>$compile_id</parameter></link>
を渡すと、指定した
<link linkend="variable.compile.id"><parameter>$compile_id</parameter></link>
のテンプレートのみを破棄します。exp_time を指定すると、
<parameter>exp_time</parameter> 秒以上経過しているファイルのみが破棄されます。
デフォルトでは、経過時間にかかわらず全てのコンパイル済みテンプレートを破棄します。
この関数は上級者のみが使用するもので、通常は不要です。
</para>
<example>
<title>clear_compiled_tpl()</title>
<programlisting role="php">
<![CDATA[
<?php
// 指定したテンプレートリソースを破棄します
$smarty->clear_compiled_tpl('index.tpl');
// コンパイルディレクトリの内容を全て破棄します
$smarty->clear_compiled_tpl();
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.clear.cache"><varname>clear_cache()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,66 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.clear.config">
<refnamediv>
<refname>clear_config()</refname>
<refpurpose>割り当てられたすべての設定ファイルの変数をクリアします。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>clear_config</methodname>
<methodparam choice="opt"><type>string</type><parameter>var</parameter></methodparam>
</methodsynopsis>
<para>
割り当てられたすべての
<link linkend="language.config.variables">設定ファイルの変数</link>
をクリアします。変数名を指定すると、その変数のみをクリアします。
</para>
<example>
<title>clear_config()</title>
<programlisting role="php">
<![CDATA[
<?php
// 設定ファイルから割り当てた変数をすべてクリアします
$smarty->clear_config();
// ひとつの変数のみをクリアします
$smarty->clear_config('foobar');
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.get.config.vars"><varname>get_config_vars()</varname></link>
<link linkend="language.config.variables"><varname>config variables</varname></link>
<link linkend="config.files"><varname>config files</varname></link>
<link linkend="language.function.config.load"><varname>{config_load}</varname></link>
<link linkend="api.config.load"><varname>config_load()</varname></link>
および
<link linkend="api.clear.assign"><varname>clear_assign()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.config.load">
<refnamediv>
<refname>config_load()</refname>
<refpurpose>設定ファイルのデータを読み込み、テンプレートに割り当てます。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>config_load</methodname>
<methodparam><type>string</type><parameter>file</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>section</parameter></methodparam>
</methodsynopsis>
<para>
<link linkend="config.files">設定ファイル</link>
のデータを読み込み、テンプレートに割り当てます。
これは、テンプレート関数
<link linkend="language.function.config.load">
<varname>{config_load}</varname></link>
とまったく同じ働きをします。
</para>
<note>
<title>テクニカルノート</title>
<para>
Smarty 2.4.0以降では、割り当てられたテンプレート変数は
<link linkend="api.fetch"><varname>fetch()</varname></link>
および <link linkend="api.display"><varname>display()</varname></link>
の実行前後を通じて保持されます。
<varname>config_load()</varname> から読み込まれた設定ファイルの変数は、
常にグローバルスコープです。設定ファイルは
高速に実行するためにコンパイルされます。その際には
<link linkend="variable.force.compile">
<parameter>$force_compile</parameter></link>
<link linkend="variable.compile.check">
<parameter>$compile_check</parameter></link> の設定を尊重します。
</para>
</note>
<example>
<title>config_load()</title>
<programlisting role="php">
<![CDATA[
<?php
// 設定ファイルの変数を読み込み、割り当てます
$smarty->config_load('my.conf');
// セクションを読み込みます
$smarty->config_load('my.conf', 'foobar');
?>
]]>
</programlisting>
</example>
<para>
<link linkend="language.function.config.load"><varname>{config_load}</varname></link>
<link linkend="api.get.config.vars"><varname>get_config_vars()</varname></link>
<link linkend="api.clear.config"><varname>clear_config()</varname></link>
および
<link linkend="language.config.variables"><varname>設定ファイルの変数</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

View File

@@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 1.8 Maintainer: takagi Status: ready -->
<!-- CREDITS: mat-sh,daichi,joe -->
<refentry id="api.display">
<refnamediv>
<refname>display()</refname>
<refpurpose>テンプレートを表示します。</refpurpose>
</refnamediv>
<refsect1>
<title>説明</title>
<methodsynopsis>
<type>void</type><methodname>display</methodname>
<methodparam><type>string</type><parameter>template</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>cache_id</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>compile_id</parameter>
</methodparam>
</methodsynopsis>
<para>
テンプレートを表示します
(<link linkend="api.fetch"><varname>fetch()</varname></link> と違い出力を行います)。
第1パラメータには、有効な <link
linkend="template.resources">テンプレートリソース</link>
の種類を含むパスを指定する事ができます。任意の第2パラメータには
<parameter>キャッシュID</parameter> を渡す事ができます。
詳細は <link linkend="caching">キャッシュの項</link> を参照してください。
</para>
&parameter.compileid;
<example>
<title>display()</title>
<programlisting role="php">
<![CDATA[
<?php
include(SMARTY_DIR.'Smarty.class.php');
$smarty = new Smarty();
$smarty->caching = true;
// キャッシュが存在しない場合はデータベースを呼び出します
if(!$smarty->is_cached('index.tpl')) {
// ダミーデータ
$address = '245 N 50th';
$db_data = array(
'City' => 'Lincoln',
'State' => 'Nebraska',
'Zip' => '68502'
);
$smarty->assign('Name', 'Fred');
$smarty->assign('Address', $address);
$smarty->assign('data', $db_data);
}
// 出力を表示します
$smarty->display('index.tpl');
?>
]]>
</programlisting>
</example>
<example>
<title>display() 関数にテンプレートリソースを指定した例</title>
<para>
<link linkend="variable.template.dir">
<parameter>$template_dir</parameter></link> ディレクトリ外のファイルを表示するためには、
<link linkend="template.resources">テンプレートリソース</link>
を指定します。
</para>
<programlisting role="php">
<![CDATA[
<?php
// ファイルの絶対パス
$smarty->display('/usr/local/include/templates/header.tpl');
// ファイルの絶対パス (上と同じ)
$smarty->display('file:/usr/local/include/templates/header.tpl');
// windows環境の絶対パス (接頭辞に"file:"を使う必要があります)
$smarty->display('file:C:/www/pub/templates/header.tpl');
// "db"と名付けられたテンプレートリソースからインクルードします
$smarty->display('db:header.tpl');
?>
]]>
</programlisting>
</example>
<para>
<link linkend="api.fetch"><varname>fetch()</varname></link> および
<link linkend="api.template.exists"><varname>template_exists()</varname></link>
も参照してください。
</para>
</refsect1>
</refentry>
<!-- 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
-->

Some files were not shown because too many files have changed in this diff Show More