文字列を短くする、具体例としては「10文字を超えたら【...】を表示する」みたいなことをやる場合、マニュアルを見ると「character_limiter()」を使うと記載されておりんす。
▼マニュアル
テキストヘルパ : CodeIgniter ユーザガイド 日本語版
ところが文章の最後には、以下のように記載されておりんす。
訳注:英語のように単語の間がスペースで区切られている言語でだけ有効です。日本語では通常、正常に動作しません。
え!日本語対応してない…のか…。
でも絶対この機能は必要になる…。
実際に、このヘルパーに日本語を入れて使ってみますたが、確かにマニュアルに記載されているように対応していないようですた(;´Д`)
んー、どうしようかと思った時、Smartyの「truncate」も日本語対応させるために改造してた方がいたのを思い出すますた。
もしかして、そのソースってこういうフレームワークに入れて使えるんじゃないか?と思い、やってみますた。
以下にやったことをメモ。
- Smartyのtruncate日本語対応版ソースを準備する。
- メソッド名は「character_limiter_j」に。
※「character_limiter」に「_j」を付けただけ。 - 「system/application/helpers/My_text_helper.php」として保存。
※頭に「My」を付けたのは、自分で準備したヘルパーなのかデフォルトで入ってたヘルパーなのかを区別するため。 - コントローラーで呼ぶ。
「$this->load->helper(array('form','url','My_text'));」 - ビューで使う。
例:「<?=character_limiter_j('日本語のテストです。日本語のテストです。',40);?>」
表示:「日本語のテストです。日本...」 - 第3引数に入れた文字列がおしりにくっつく。
例:「<?=character_limiter_j('日本語のテストです。日本語のテストです。',40,'・・・');?>」
表示:「日本語のテストです。・・・」
第3引数に入れる文字列によって、表示する文字数が変わっちゃうみたいでつが、これで何とかなりそうでつ。
とりあえず安心。ヽ(´ー`)ノ