PHPプログラムに関する各種メモ書き

テンプレートエンジン『Twig』と『Smarty』比較表

● テンプレートの読み込みとディレクトリのセット(PHPファイルに記述)

※ Smarty

require_once('Smarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = './templates/';
$smarty->compile_dir = './templates_c/';

※ Twig

require_once('Twig/Autoloader.php');
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem("./templates/");
$twig = new Twig_Environment($loader, array(
	'cache' => 'cache_twig',
	 'debug' => false ,
));

● 変数のアサイン(PHPファイルに記述)

※ Smarty

$smarty->assign( array("mydata" => $hoge) );

※ Twig

$twig->addGlobal( "mydata", $hoge );

● テンプレートの表示(PHPファイルに記述)

※ Smarty

$template_file = 'myfile.html';
$smarty->display( $template_file );

※ Twig

$hash = array(
'id' => 999 ,
'name' => 'hoge' ,
);
$template_file = 'myfile.html'
echo $twig->render($template_file, $hash);

● ループ処理(for 文)(HTMLファイル内に記述)

※ Smarty

{section name=i start=0 loop=10}
  {$smarty.section.i.index}回目
{/section}

※ Twig

{% for i in 0..10 %}
  {{ i }}回目
{% endfor %}

● ループ処理(foreach 文)(HTMLファイル内に記述)

※ Smarty

{ foreach from=$my_loop key="k" item="v" }
{$v.user_name}
{ /foreach }

※ Twig

{% for k,v in my_loop %}
  <h1>{{ loop.index }}番目</h1>
  {% if loop.first %}最初の要素です。
  {% elseif loop.last %}最後の要素です。
  {% else %}{{ v.user_name }}
  {% endif %}   
{% endfor %}

loop.index1 から始まります。

● ファイルのインクルード(HTMLファイル内に記述)

※ Smarty

{include file="inc/header.html"}

※ Twig

{% include 'inc/header.html' %}

● if文(HTMLファイル内に記述)

※ Smarty

{if $flag==1 and hoge == 'myname'}
     hogehoge
{else}
    fugafuga
{/if}

※ Twig

{% if flag == 1 and hoge == 'myname' %}
     hogehoge
{% else %}
    fugafuga
{% endif %}

● コメントアウト(HTMLファイル内に記述)

※ Smarty

{*
ここの間に記述したものはコメントアウトされ表示されません
*}

※ Twig

{#
ここの間に記述したものはコメントアウトされ表示されません
#}

● 文字列のエスケープ(HTMLファイル内に記述)

※ Smarty(エスケープオプションは : html, htmlall, url, urlpathinfo, quotes, hex, hexentity, javascript, mail )

<a href="{$data|escape:'url'}">クリック</a>

※ Twig(エスケープオプションは : html, js, css, url, html_attr )

<a href="{{data|escape('url') }}">クリック</a>
<a href="{{data|e('url') }}">クリック</a> {# 【e】 だけでも OK #}

● 日付の表示(HTMLファイル内に記述)

※ Smarty

{* 2015-07-30 13:04:58 みたいな表示 *}
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}

※ Twig

{# 2015-07-30 13:04:58 みたいな表示 #}
{{ "now"|date("Y-m-d H:i:s") }}
{# TIMEZONE を指定することもできます #}
{{ "now"|date('d/m/Y H:i', timezone="Europe/Paris") }}

Twig の dateフィルタの 注意
データベースなどから持ってきた日付けを整形する場合はデータが存在するかどうかチェックしてから表示しないと、 データが存在しない場合現在の日付が表示されてしまいます

{{ "" | date("Y年m月d日") }} // 現在の日付が表示されます
{% if v.added_date != "" %}{{ v.added_date | date("Y/m/d H:i") }}{% endif %}

● ホワイトスペースと改行をなくして1行で出力する(HTMLファイル内に記述)

※ Smarty

{strip}
<table>
 <tr>
  <td>
   test
  </td>
 </tr>
</table>
{/strip}

※ Twig

{% spaceless %}
<table>
 <tr>
  <td>
   test
  </td>
 </tr>
</table>
{% endspaceless %}

● テンプレートファイル内で変数をセットする(HTMLファイル内に記述)

※ Smarty

{assign var="aaa" value="999" }

※ Twig

{% set aaa = '999' %}

※ Twig(ヒアドキュメント的)

{% set aaa %}
    <div id="pagination">
        ...
    </div>
{% endset %}

● テンプレートファイル内で配列の長さを知る(HTMLファイル内に記述)

※ Smarty

{$test_loop|@count}

※ Twig

{{ test_loop |length }}

● 長い文字列を切り詰める(truncate)(HTMLファイル内に記述)

※ Smarty

{"abcdefghijklmnopqrstuvwxyz"|truncate:10}

※ Twig

Twigで truncate を使うには `Twig-extensionsをインストールします https://github.com/twigphp/Twig-extensions からダウンロードしてExtensionsディレクトリを Twigディレクトリの下にアップロードし PHPで$twig->addExtension( new Twig_Extensions_Extension_Text() );` とします。

{{"abcdefghijklmnopqrstuvwxyz"| truncate(20)}}

Twig_Extensions_Extension_Text : http://bit.ly/2jfkzXw

● 文字列の分割(explode, split)(HTMLファイル内に記述)

※ Smarty

{assign var="new_array" value=","|explode:$str_hoge} 

※ Twig

{% set new_array = "one,two,three"|split(',') %}

● 文字列の置換(replace)(HTMLファイル内に記述)

※ Twig

{{ "my name is hogehoge" | replace({hoge':'fuga'}) }}

● 文字列を逆にする(HTMLファイル内に記述)

※ Twig

{{ '1234'|reverse }}
{# outputs 4321 #}

● 文字列を切り出す(HTMLファイル内に記述)

※ Twig

{{ 123456 | slice(0, 2) }}

● 文字列の連結(HTMLファイル内に記述)

※ Smarty

{ 'sugoude'|cat:'DJ'|cat:'Master Key'}

※ Twig

{{ 'sugoude' ~ 'DJ' ~ 'Master Key' }}

● printf(プリントフォーマット)(HTMLファイル内に記述)

※ Smarty

{ $value | string_format:"%02d" }

 Twig リファレンス : http://git.io/vneJa 

関連エントリー

No.954
09/19 16:12

edit

Twig
Smarty