Memo/PHP/Smarty

https://dexlab.net:443/pukiwiki/index.php?Memo/PHP/Smarty
 

Memo/PHP

Smarty

プラグイン


Tips

年月のセレクトボックスを表示

  • YYYY-MMのセレクトボックスの表示。年は10年前から表示。
    {if $smarty.request.dateYear != ''}
        {assign var="selected_date" value=$smarty.request.dateYear|cat:"-"|cat:$smarty.request.dateMonth|cat:"-01"}
    {/if}
    {html_select_date prefix="date" display_days=false month_format="%m" field_order="YMD" start_year="-10" reverse_years=true time=$selected_date}
    

Smartyのコンパイル済みテンプレートファイル名が衝突した場合の解決法について

compile_dir が一つで、複数のtemplate_dirがある場合に、テンプレートファイル名が重複する場合がある。その場合は、同じキャッシュ済みテンプレートファイルが読み込まれるため表示がおかしくなる。

  • 解決方法。compile_idを指定する
    $smarty->compile_id = '異なる値';

全てのPHP関数を「暗黙の」修飾子として利用できます

  • 1関数のみのプラグインは作らなくて良い事になります。
    {$value|substr:3:4}
    {$value|number_format}
  • http://monolog.spanstyle.com/archives/2005/0822_1350.html
    Smartyは、全てのPHP関数を「暗黙の」修飾子として利用できます。number_formatも
    
    {$value|number_format}
    
    と書けば修飾子扱いされるので、プラグインを作らずとも簡単にカンマ区切りができますよ。誰もツッコまないみたいなので参考までにコメントさせていただきました。
    
    以前、個人的にSmartyの講師をやった際のPDFがありますので、もしよろしかったらどうぞ。(かなり初心者向けの内容ですが)
    

URLにリンクを張るプラグイン

テンプレート内で変数を割り当てるには

<!--{assign var="名前" value=変数名または定数}-->

指定回数のループを行いたい

例えば、0〜6までループしたい場合は

{section name="myLoop" start=0 loop=6}
index={$smarty.section.myLoop.index}
{/section}

テンプレート実行が遅い場合

sectionを使わずに、foreachが使えるか検討する。

遅い書き方

<!--{section name=loop loop=$DATA->obj1[0]->obj2[1]->obj3}-->
   <!--{$DATA->obj1[0]->obj2[1]->obj3[loop]}--> 
<!--{/section}-->

速い書き方

<!--{foreach key=key item=item from=$DATA->obj1[0]->obj2[1]->obj3}-->
   <!--{$item}--> 
<!--{/foreach 

複雑な変数をassignしている場合、sectionでは添え字しか取得できないため、 添え字による参照しか行えず、複雑になるほど速度が悪化する。
foreachでは直接値がコピーされるため、添え字参照による速度低下を押さえられる。
 これは、コンパイル後のテンプレートを見てみるとよく分かる。

Smartyとは?

PHP用テンプレートエンジンらしい
本家からDLできる
一度テンプレートをコンパイルし、それをキャッシュするため早い

いいところ

  • プラグイン構造でテンプレート関数を簡単に自作できる。
  • フィルターを作成できる。
  • 最終的にできあがるHTML自体をキャッシュできる。
  • OOPでわかりやすく、簡単。
  • レンタルサーバーでも何でもダウンロードするだけで使える

インストール

  1. ダウンロード 公式のダウンロードからソースを入手します。
    現時点では2.6.3でした。
    http://smarty.php.net/do_download.php?download_file=Smarty-2.6.3.tar.gz
  2. 展開
    tar.gz形式なので、それを展開できるソフトを用意します。(Lhaplusなど)
    任意のディレクトリに展開します。
    C:\user\www\htdocs\lib\Smarty
       +---demo
       |   +---configs
       |   \---templates
       +---libs
       |   +---core
       |   \---plugins
       \---misc
  3. テスト
    Smartyは4つのディレクトリを必要とするのであらかじめ作成します。
    cache         <- キャッシュ
    configs       <- Smarty用の設定ファイル
    templates     <- テンプレートを格納(拡張子はtpl)
    templates_c   <- コンパイル済みテンプレートが自動作成される

位置

C:\user\www\htdocs\php\sample\smarty_demo
|   index.php       <- プログラム本体
+---cache
+---configs
+---templates
|       index.tpl   <- テンプレート
\---templates_c

index.php

	<?
	define('SMARTY_DIR','C:/user/www/htdocs/lib/Smarty/libs/');
	define('ROOT_DIR','C:/user/www/htdocs/smarty');
	require(SMARTY_DIR.'Smarty.class.php');
	$smarty = new Smarty;
	$smarty->template_dir = ROOT_DIR . '/templates/';
	$smarty->compile_dir = ROOT_DIR . '/templates_c/';
	$smarty->config_dir = ROOT_DIR . '/configs/';
	$smarty->cache_dir = ROOT_DIR . '/cache/';
	$smarty->assign('name','Ned');
	$smarty->display('index.tpl');
	?>

index.tpl

	{* Smarty *}
	Hello, {$name}!

ブラウザから、index.phpをアクセスしてみます。
{$name}! が 「Ned」に置き換えられ、 「Hello, Ned!」と表示されれば成功です。

リンク


添付ファイル: filemodifier.url_link.php 1981件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-09-15 (土) 07:31:38 (9d)