記事の一覧表示するときに長い文章があると長くなってしまいます。よくある表示数制限の語尾に点々をつけるという表示方法をしたい。

HTMLとCSSでする場合は枠を超える部分はoverflowをhiddenで消去し、CSSのafterでcontentに”…”を設定したり、PHPのmb_substr関数で切り取ったりと方法はいくつかありますが、cakePHPには便利な機能がありました。

$this->Text->truncate($text, 100, array(
  'ellipsis' => '...',
  'exact' => true,
  'html' => true,
))

truncateの第一引数は対象となる文字列、第二は表示する文字数だそう。allipsisは語尾につける文字列、exactは英語を単語ごとに文字を確認、htmlはタグも文字数に含めるかだそう。これはとても便利!

ただ、自分は念は念を入れ、htmlタグも前もって取り除いた上でこの機能を利用しようと考えた結果、以下のようになりました。

$text = $this->Text->truncate(strip_tags( $str ), 100, array(
  'ellipsis' => '...',
  'exact' => true,
  'html' => true));

echo $text

strip_tagsでHTMLタグを削除します。この関数の第二引数には削除しないHTMLタグを指定できるんだそう。例えば改行と段落のタグを削除しない場合は以下のようにコンマを挟み指定します。

strip_tags( $str, "<br>,<p>" );