指定の文字数で文字列をワードラップ(wordwrap)

広告

「wordwrap」は文字列を指定の文字数でワードラップします。ワードラップとは行末で単語を途中で切らずに次の行へ改行することです。書式は次の通りです。

{$変数名|wordwrap}

デフォルトでは80文字でワードラップを行います。1番目のパラメータでワードラップする文字数を指定できます。

{$変数名|wordwrap[:文字数]}

文字数はバイト単位の文字数です。日本語などのマルチバイト文字の場合、指定した文字数によっては文字の中間でワードラップが行われ文字化けが発生する場合がありますので注意して下さい。

ワードラップが行われた行の末尾にはデフォルトでは「¥n」が付加されます。2番目のパラメータに「¥n」の代わりに付加する文字列を指定することが出来ます。

{$変数名|wordwrap[:文字数[:付加する文字列]]}

デフォルトでは指定した文字数に関わらず単語が途中で切れないように単語単位で切捨てが行われます。単語単位では無く指定した文字数で切捨てを行うには3番目のパラメータに「true」を指定して下さい。デフォルトは「false」です。

{$変数名|wordwrap[:文字数[:付加する文字列[:文字数で切り捨て]]]}

※ただし3番目のパラメータに実際に「true」を設定してみましたが反映されませんでした。原因が分かりましたらまた書き直します。

具体的には次のように記述します。

{$msg|wordwrap}
{$msg|wordwrap:10}
{$msg|wordwrap:10:'<br />'}
{$msg|wordwrap:10:'<br />:true'}

サンプルプログラム

では簡単なサンプルプログラムを作成して試してみます。

sample11-1.php

<?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->display('sample11-1.tpl');

?>

上記を「sample11-1.php」の名前で「(Apacheドキュメントルート)¥smarty¥modifier」に保存します。

sample11-1.tpl

{* Smarty modifier/sample11-1.tpl *}
<html>
<head>
<title>Smarty Test</title>
</head>
<body>

<h1>{$title}</h1>
<p>{$msg}</p>
<p>{$msg|wordwrap:18}</p>
<p>{$msg|wordwrap:18:'<br />'}</p>
<p>{$msg|wordwrap:18:"<br />¥n":true}</p>

</body>
</html>

上記を「sample11-1.tpl」の名前で「D:¥smartysample¥modifier¥templates」に保存します。

そしてブラウザから「http://localhost/smarty/modifier/sample11-1.php」へアクセスして下さい。

指定の文字数で文字列をワードラップ(wordwrap)

デフォルトの「¥n」を付加した場合には表示されたページでは変化が無いように見えますがソースを確認すると付加されて(改行されて)いることが分かります。

指定の文字数で文字列をワードラップ(wordwrap)

( Written by Tatsuo Ikura )