会員サイトでログイン中のユーザの日本語姓名を表示する際に、もし姓名の文字数が極端に長いユーザであってもレイアウトの崩れを起こさないように、姓名が8文字を超える場合には姓だけを表示するようにしたい、といった要望あり。
ASCII文字数なら count_characters 修飾子で得られるけど、日本語文字数はどうやってカウントできるんだろ?と調べてみたら以下の記事がヒット。
【Smarty】文字数カウント | enjoyブログ♪
http://enjoy-pcworks.com/infotech/php/286
文字数が10文字以上だったらclassを付ける例:
{if $str|mb_strlen:’UTF-8′ >=10} class=”hoo”{/if}
この例ではSmartyの修飾子にmb_strlen関数を使っている。念のためSmartyのマニュアルを読み直してみたら、「すべての PHP 関数は、暗黙的に修飾子として使用できる」と明示されていた。
Chapter 5. 変数の修飾子 | Smarty
https://www.smarty.net/docs/ja/language.modifiers.tpl
以上を参考に以下コーディング。
1 2 3 4 5 6 |
{assign var="fullname" value="`$lastname`$firstname`"} {if $fullname|mb_strlen:'UTF-8' >8} <!-- 姓のみ表示 --> {else} <!-- フルネーム表示 --> {/if} |