指定の文字数で文字列を切り捨てる(truncate)
「truncate」は文字列を指定の文字数で切り捨てます。書式は次の通りです。
{$変数名|truncate}
デフォルトでは80文字で切捨てを行います。1番目のパラメータで切り捨てる文字数を指定できます。
{$変数名|truncate[:文字数]}
文字数はバイト単位の文字数です。日本語などのマルチバイト文字の場合、指定した文字数によっては文字の中間で切捨てが行われ文字化けが発生する場合がありますので注意して下さい。
文字が切り捨てられると、切り捨てられた文字列の最後にデフォルトで「...」と言う文字列が付加されます。2番目のパラメータに「...」の代わりに付加する文字列を指定することが出来ます。
{$変数名|truncate[:文字数[:付加する文字列]]}
デフォルトでは指定した文字数に関わらず単語が途中で切れないように単語単位で切捨てが行われます。単語単位では無く指定した文字数で切捨てを行うには3番目のパラメータに「true」を指定して下さい。デフォルトは「false」です。
{$変数名|truncate[:文字数[:付加する文字列[:文字数で切り捨て]]]}
デフォルトでは先頭から指定した文字数のところで切捨てが行われますが、先頭と最後を残し中間部分を切り捨てる事も可能です。中間部分を切り捨てるには4番目のパラメータに「true」を指定して下さい。デフォルトは「false」です。(4番目のパラメータを「true」にすると3番目のパラメータの値によらず文字数だけで切捨てが行われます)。
{$変数名|truncate[:文字数[:付加する文字列[:文字数で切り捨て[:中間で切り捨て]]]]}
具体的には次のように記述します。
{$msg|truncate} {$msg|truncate:10} {$msg|truncate:10:'(省略)'} {$msg|truncate:10:'(省略)':true} {$msg|truncate:10:'(省略)':true:true}
サンプルプログラム
では簡単なサンプルプログラムを作成して試してみます。
<?php require_once('Smarty.class.php'); $smarty = new Smarty(); $smarty->template_dir = 'd:/smartysample/modifier/templates/'; $smarty->compile_dir = 'd:/smartysample/modifier/templates_c/'; $smarty->config_dir = 'd:/smartysample/modifier/configs/'; $smarty->cache_dir = 'd:/smartysample/modifier/cache/'; $smarty->assign('title', '修飾子のテスト'); $smarty->assign('msg', "Smarty is a template engine for PHP"); $smarty->assign('msgjp', "日本語 でも 可能です"); $smarty->display('index10-1.tpl'); ?>
上記を「sample10-1.php」の名前で「(Apacheドキュメントルート)¥smarty¥modifier」に保存します。
{* Smarty modifier/sample10-1.tpl *} <html> <head> <title>Smarty Test</title> </head> <body> <h1>{$title}</h1> <p>{$msg}</p> <p>{$msg|truncate}</p> <p>{$msg|truncate:18}</p> <p>{$msg|truncate:18:'(省略)':true}</p> <p>{$msg|truncate:18:'...':true:true}</p> <p>{$msgjp}</p> <p>{$msgjp|truncate:19}</p> <p>{$msgjp|truncate:19:'...'}</p> <p>{$msgjp|truncate:19:'...':true}</p> </body> </html>
上記を「sample10-1.tpl」の名前で「D:¥smartysample¥modifier¥templates」に保存します。
そしてブラウザから「http://localhost/smarty/modifier/sample10-1.php」へアクセスして下さい。
日本語でも空白などで区切られている場合は単語が途切れない位置での切り捨てが可能です。
( Written by Tatsuo Ikura )