functions.inc

2007-09-17 01:59

投稿者: サイト管理者

geeklog/plugins/forum/functions.inc

523行
            $subject = wordwrap($A['subject'],40,"<br>");

            $subject = forum_mb_wordwrap($A['subject'],$CONF_FORUM['linkinfo_width'],"<br />");
センターエリアのツールチップ表示の横幅。せっかく設定できるようになっているのに、こんなところで決め撃ちされちゃって、あらまぁ。ついでにwordwrapがマルチバイトだと動いてくれないのが発覚して、ムカついたから勢いでforum_mb_wordwrapという独自関数を追加してマルチバイト文字でも改行してくれるようにした。下の関数とセットで織り込まないと動かない。

1017行
        $post_limit = $CONF_FORUM['sideblock_numposts'];
追加。サイドブロックの「最近の投稿  件」と空白になっていたのはこれのせい。

1279行あたり

                $lastpostinfo = wordwrap(strip_tags(substr($A['comment'],0,$CONF_FORUM['contentinfo_numchars'])),$CONF_FORUM['linkinfo_width'],"<br />n");
                $lastpostinfotmp = strip_tags(mb_substr($A['comment'],0,$CONF_FORUM['contentinfo_numchars']));
                if(strlen ($A['comment']) > $CONF_FORUM['contentinfo_numchars']){
                  $lastpostinfotmp .= "...";
                }
                $lastpostinfo = mb_ereg_replace("rn","<br />",forum_mb_wordwrap($lastpostinfotmp,$CONF_FORUM['linkinfo_width'],"n"));

1289行
                $lastpostinfo = wordwrap(strip_tags(substr($lastcomment,0,$CONF_FORUM['contentinfo_numchars'])),$CONF_FORUM['linkinfo_width'],"<br />n");
                $lastpostinfotmp = strip_tags(mb_substr($lastcomment,0,$CONF_FORUM['contentinfo_numchars']));
                if(strlen ($lastcomment) > $CONF_FORUM['contentinfo_numchars']){
                  $lastpostinfotmp .= "...";
                }
                $lastpostinfo = mb_ereg_replace("rn","<br />",forum_mb_wordwrap($lastpostinfotmp,$CONF_FORUM['linkinfo_width'],"n"));

たしかツールチップの本文のほうの表示部分だったはず。こちらもちゃんと表示されるように修正。ついでに文字数は指定よりも多くなるが長い文章の場合には「...」を付けるようにした。中にマルチバイトじゃないコードが紛れているような気がするが、広い心で見てほしいw preg_replaceのが高速だったはずだけどどうしても使い方が思い出せなくてmb_ereg_replaceになったのは秘密。

1482行(最後)
function forum_mb_wordwrap($string, $width, $break) {  $return = "";
  $list = preg_split("/n/", $string);#改行で分解

  $n = $width; # 改行させる文字数
  foreach($list as $line){ #foreachで一行ずつ処理させる
    $len = 0;#以下元の部分のまま
    for($i = 0; $i < mb_strlen($line); $i += $len){
      for($j = 1; $j<=$n; $j++){
        $wk = mb_substr($line, $i, $j);
        if(mb_strlen($wk) >= $n) break;
      }
      $len = mb_strlen($wk);
      $return .= $wk. "<br />";
    }
  }
  return $return;
}

丸々追加マルチバイト文字でwordwrapするためのコード。日本語以外でどうなるかは知らん(笑 予約語みたいな変数ばっかり使ってるけどご愛嬌。


Geeklog実験室
http://geeklogtest.maryn.jp/article.php/20070917015935203