What is Smarty?
Why use it?
Use Cases and Work Flow
Syntax Comparison
Template Inheritance
Best Practices
Crash Course
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Table of Contents
変数の修飾子は、
変数 や
カスタム関数
や文字列を修飾して出力することができます。修飾子を適用するには、
変数名の後に |
(パイプ) と修飾子の名前を指定します。
また、修飾子はその動作に影響を及ぼす追加のパラメータを受け入れる場合もあります。
そのパラメータは修飾子の後に続き、:
(コロン) によって区切られます。
また、すべての PHP 関数は、暗黙的に修飾子として使用でき
(あとで説明します)、修飾子は 組み合わせる
こともできます。
Example 5.1. 修飾子の例
{* 変数に修飾子を適用 *} {$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>
配列に対して修飾子を用いた場合は、その配列に格納された全ての値に影響を及ぼします。
配列全体を1つの値として作用させるには修飾子の先頭に @
記号をつける必要があります。
{$articleTitle|@count}
- これは、
配列 $articleTitle
の要素数を、php の
count()
関数を修飾子として用いて出力します。
修飾子は $plugins_dir
から自動的に読み込むか、明示的に register_modifier()
関数で登録します。2つ目の方法は、PHP スクリプトと Smarty テンプレートで
関数を共有する場合などに有用です。
先ほどの例で示したように、全ての PHP 関数は暗黙で修飾子として使用する事ができます。 しかし、修飾子としてPHP関数を使うには2つの小さな落とし穴があります。
第1に、 たまに関数のパラメータの順序が望ましいものではなくります。
$foo
を
{"%2.f"|sprintf:$foo}
でフォーマットすることはできますが、
Smarty が提供する方式である {$foo|string_format:"%2.f"}
のほうがより直感的です。
第2に、
$security
が有効な場合、
修飾子として使用される全ての PHP 関数は
$security_settings
配列の
MODIFIER_FUNCS
要素で
信頼できるものとして定義される必要があります。
register_modifier()
、
修飾子の連結
および
プラグインによる Smarty の拡張
も参照してください。
変数内の全ての単語の先頭を大文字で開始します。
PHP の
ucwords()
関数と似ています。
パラメータの位置 | 型 | 必須 | デフォルト | 概要 |
---|---|---|---|---|
1 | boolean | No | FALSE |
数字とセットの単語を大文字にするかどうか |
Example 5.2. capitalize
<?php $smarty->assign('articleTitle', 'next x-men film, x3, delayed.'); ?>
テンプレート
{$articleTitle} {$articleTitle|capitalize} {$articleTitle|capitalize:true}
出力
next x-men film, x3, delayed. Next X-Men Film, x3, Delayed. Next X-Men Film, X3, Delayed.