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

Changeset 10509


Ignore:
Timestamp:
Jan 27, 2009, 3:53:50 PM (11 years ago)
Author:
ebihara
Message:

added support for truncate bodies when a current page is list page to opDiaryPlugin

Location:
OpenPNE3/plugins/opDiaryPlugin/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE3/plugins/opDiaryPlugin/trunk/apps/pc_frontend/modules/diary/templates/listSuccess.php

    r10454 r10509  
    1414<th><?php echo __('Title') ?></th><td><?php echo $diary->getTitleAndCount() ?><?php if ($diary->hasImages()) : ?> <?php echo image_tag('icon_camera.gif', array('alt' => 'photo')) ?><?php endif; ?></td>
    1515</tr><tr>
    16 <th><?php echo __('Body') ?></th><td><?php echo $diary->getBody() ?></td>
     16<th><?php echo __('Body') ?></th><td><?php echo op_diary_truncate($diary->getBody(), 36, '', 3) ?></td>
    1717</tr><tr class="operation">
    1818<th><?php echo __('Created at') ?></th><td><span class="text"><?php echo op_format_date($diary->getCreatedAt(), 'XDateTimeJa') ?></span> <span class="moreInfo"><?php echo link_to(__('View this diary'), 'diary_show', $diary) ?></span></td>
  • OpenPNE3/plugins/opDiaryPlugin/trunk/lib/helper/opDiaryHelper.php

    r10454 r10509  
    2727  return content_tag('a', $marker, $options);
    2828}
     29
     30/**
     31 * truncates a string
     32 *
     33 * @param string $string
     34 * @param int    $width
     35 * @param string $etc
     36 * @param int    $rows
     37 * @param bool   $is_html
     38 * @return string
     39 */
     40function op_diary_truncate($string, $width = 80, $etc = '', $rows = 1, $is_html = true)
     41{
     42  $rows = (int)$rows;
     43  if (!($rows > 0))
     44  {
     45    $rows = 1;
     46  }
     47
     48  // converts special chars
     49  $trans = array(
     50    "\r\n" => ' ',
     51    "\r"   => ' ',
     52    "\n"   => ' ',
     53  );
     54
     55  // converts special chars (for HTML)
     56  if ($is_html)
     57  {
     58    $trans += array(
     59      // for htmlspecialchars
     60      '&amp;'  => '&',
     61      '&lt;'   => '<',
     62      '&gt;'   => '>',
     63      '&quot;' => '"',
     64      '&#039;' => "'",
     65      // for IE's bug
     66      ' '     => ' ',
     67    );
     68  }
     69  $string = strtr($string, $trans);
     70
     71  $result = array();
     72  $p_string = $string;
     73  for ($i = 1; $i <= $rows; $i++)
     74  {
     75    if ($i === $rows)
     76    {
     77      $p_etc = $etc;
     78    }
     79    else
     80    {
     81      $p_etc = '';
     82    }
     83
     84    if ($i > 0)
     85    {
     86      // strips the string of pre-line
     87      if (isset($result[$i - 1]))
     88      {
     89        $p_string = substr($p_string, strlen($result[$i - 1]));
     90      }
     91      if (!$p_string)
     92      {
     93        break;
     94      }
     95    }
     96
     97    $result[$i] = smarty_modifier_t_truncate_callback($p_string, $width, $p_etc);
     98  }
     99  $string = implode("\n", $result);
     100
     101  if ($is_html)
     102  {
     103    $string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
     104  }
     105
     106  return nl2br($string);
     107}
     108
     109function smarty_modifier_t_truncate_callback($string, $width, $etc = '')
     110{
     111  if (mb_strwidth($string) > $width)
     112  {
     113    $width = $width - mb_strwidth($etc);
     114
     115    // for Emoji
     116    $offset = 0;
     117    $tmp_string = $string;
     118    while (preg_match('/\[[ies]:[0-9]{1,3}\]/', $tmp_string, $matches, PREG_OFFSET_CAPTURE))
     119    {
     120      $emoji_str = $matches[0][0];
     121      $emoji_pos = $matches[0][1] + $offset;
     122      $emoji_len = strlen($emoji_str);
     123      $emoji_width = $emoji_len;
     124
     125      // a width by Emoji
     126      $substr_width = mb_strwidth(substr($string, 0, $emoji_pos));
     127
     128      if ($substr_width >= $width)  // Emoji position is after a width
     129      {
     130        break;
     131      }
     132
     133      if ($substr_width + 2 == $width)  // substr_width + Emoji width is equal to a width
     134      {
     135        $width = $substr_width + $emoji_width;
     136        break;
     137      }
     138
     139      if ($substr_width + 2 > $width)  // substr_width + Emoji width is rather than a width
     140      {
     141        $width = $substr_width;
     142        break;
     143      }
     144
     145      // less than a width
     146      $offset = $emoji_pos + $emoji_len;
     147      $width = $width + $emoji_width - 2;
     148
     149      $tmp_string = substr($string, $offset);
     150    }
     151
     152    $string = mb_strimwidth($string, 0, $width, $etc, 'UTF-8');
     153  }
     154
     155  return $string;
     156}
Note: See TracChangeset for help on using the changeset viewer.