Smarty3

Smarty3で何が新しくなったのか?

Examples:

{$x+$y}                           will output the sum of x and y.
{$foo = strlen($bar)}             function in assignment
{assign var=foo value= $x+$y}     in attributes 
{$foo = myfunct( ($x+$y)*3 )}     as function parameter 
{$foo[$x+3]}

こんな書き方がおkになりました。

配列の扱いが簡単に。
Examples:

{assign var=foo value=[1,2,3]}
{assign var=foo value=['y'=>'yellow','b'=>'blue']}
Arrays can be nested.
{assign var=foo value=[1,[9,8],3]

{function}…{/function}ブロック関数が登場

Template file:
{function name=menu level=0}
  <ul class="level{$level}">
  {foreach $data as $entry}
    {if is_array($entry)}
      <li>{$entry@key}</li>
       {call name=menu data=$entry level=$level+1}
    {else}
      <li>{$entry}</li>
    {/if}
  {/foreach}
  </ul>
{/function}
 
{$menu = ['item1','item2','item3' => ['item3-1','item3-2','item3-3' =>
  ['item3-3-1','item3-3-2']],'item4']}
 
{call name=menu data=$menu}
Generated output:
    * item1
    * item2
    * item3
          o item3-1
          o item3-2
          o item3-3
                + item3-3-1
                + item3-3-2
    * item4

テンプレート継承

parent.tpl:
<html>
  <head>
    <title>{block name='title'}My site name{/block}</title>
  </head>
  <body>
    <h1>{block name='page-title'}Default page title{/block}</h1>
    <div id="content">
      {block name='content'}
        Default content
      {/block}
    </div>
  </body>
</html>
 
child.tpl:
{extends file='parent.tpl'} 
{block name='title'}
Child title
{/block}
 
grandchild.tpl:
{extends file='child.tpl'} 
{block name='title'}Home - {$smarty.block.parent}{/block} 
{block name='page-title'}My home{/block}
{block name='content'}
  {foreach $images as $img}
    <img src="{$img.url}" alt="{$img.description}" />
  {/foreach}
{/block}

{$ smarty.block.parent}が使われタイトルブロックを再定義してます。
これは挿入してその場所に親テンプレートから、デフォルトのコンテンツをSmartyを指示します。
コンテンツブロックを表示すると、継承され上書きされたページタイトルが表示されます。

If we render grandchild.tpl we will get this:

<html>
  <head>
    <title>Home - Child title</title>
  </head>
  <body>
    <h1>My home</h1>
    <div id="content">
      <img src="/example.jpg" alt="image" />
      <img src="/example2.jpg" alt="image" />
      <img src="/example3.jpg" alt="image" />
    </div>
  </body>
</html>

以下公式サイトより引用
ところどころ、補足を追加していきます。

I. はじめに

Chapter 1. Smarty とは?

Smarty は PHP のためのテンプレートエンジンです。
具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。
これは、プログラマーとテンプレートデザイナーの役割が異なり、 これらの役割を違う人間が受け持っている場合に最適だと言えます。

Chapter 2. インストール

必要条件:PHP 5.2 以降が動作しているウェブサーバを必要とします。

II. テンプレートデザイナのための Smarty

3. 基本構文
4. 変数
5. 変数の修飾子
6. 修飾子の連結
7. 組み込み関数

Smarty にはいくつかの組み込み関数があります。 これらはテンプレートエンジンにとって必要不可欠なものです。 組み込み関数はコンパイル時に PHP のコードに展開され、 最大のパフォーマンスを発揮します。

これらと同じ名前の カスタム関数 を作成したり、組み込み関数を修正したりする事はできません。

これらの関数の一部は assign 属性を持っており、 結果を出力せずにここで指定した名前のテンプレート変数に格納します。これは {assign} 関数と似ています。

コメントを残す