ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 4399


Ignore:
Timestamp:
Oct 16, 2007, 4:55:27 PM (14 years ago)
Author:
ogawa
Message:

#1236:t_truncateの複数行対応

File:
1 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/branches/stable-2.10.x/webapp/lib/smarty_plugins/modifier.t_truncate.php

    r4398 r4399  
    1111 * @param int    $width
    1212 * @param string $etc
     13 * @param int    $rows
    1314 * @return string
    1415 */
    15 function smarty_modifier_t_truncate($string, $width = 80, $etc = '...')
     16function smarty_modifier_t_truncate($string, $width = 80, $etc = '', $rows = 1)
    1617{
     18    $rows = (int)$rows;
     19    if (!($rows > 0)) {
     20        $rows = 1;
     21    }
     22
    1723    // 特殊文字を変換
    1824    $trans = array(
     
    3238    $string = strtr($string, $trans);
    3339
     40    // 複数行対応
     41    $result = array();
     42    $p_string = $string;
     43    for ($i = 1; $i <= $rows; $i++) {
     44        // 最終行のみ $etc を反映
     45        if ($i === $rows) {
     46            $p_etc = $etc;
     47        } else {
     48            $p_etc = '';
     49        }
     50
     51        if ($i > 0) {
     52            // 前行の分を切り取り
     53            $p_string = substr($p_string, strlen($result[$i - 1]));
     54            if (!$p_string) {
     55                break;
     56            }
     57        }
     58
     59        $result[$i] .= smarty_modifier_t_truncate_callback($p_string, $width, $p_etc);
     60    }
     61    $string = implode("\n", $result);
     62
     63    return nl2br(htmlspecialchars($string, ENT_QUOTES, 'UTF-8'));
     64}
     65
     66function smarty_modifier_t_truncate_callback($string, $width, $etc = '')
     67{
    3468    // 入力文字列の幅が大きい場合は切り取り
    3569    if (mb_strwidth($string) > $width) {
     
    4377            $emoji_len = strlen($emoji_str);
    4478            $emoji_width = $emoji_len; // ASCIIなのでstrlenでOK
    45            
     79
     80            // 絵文字直前までの文字列の幅
    4681            $substr_width = mb_strwidth(substr($string, 0, $emoji_pos));
    47            
     82
    4883            // 絵文字がwidth位置より後ろ
    4984            if ($substr_width >= $width) {
     
    71106    }
    72107
    73     return htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
     108    return $string;
    74109}
    75110
Note: See TracChangeset for help on using the changeset viewer.