久々にマトモなNucluesのエントリです(汗)
NP_Mobileを使用すると、携帯からの閲覧に適したページを出力してくれるようになるのですが、内部では指定したバイト数に区切って表示するように処理を行っています。
通常はそれでも全く問題ないのですが、時折タグの途中で切られてしまい、ちょっとだけ不恰好になったり、文章が途中で切られてしまうので、少しだけ読みにくかったりします。
なので、行単位で区切って表示してあげれば、少しは見やすくなったり、タグの途中で切られてしまうこともなくなるのではないかなと考えました。
具体的な実装は以下のとおりです。(NP_Mobile 0.23をベースにしています)
元のソースコードの35行目、// ■ページ分割 と書かれたところから、48行目の閉じ中括弧}(一番最初に閉じ中括弧が出てくる箇所)の前の行までを、以下のように書き換えます。
$ipage = getVar(‘page’);
if ($ipage < 1) $ipage = 1;
$itemid = $item -> itemid;
$plk = “<a href=?itemid=$itemid&page=”;
// <br>タグで分割したページデータを$maxLength以内に
// 収まるように計算して、$pageへ格納
$disppage = “”; // 表示するページの文字列
$page = “”; // 現在処理中のページの文字列
$pproc = 1; // 現在処理中のページ数
foreach (preg_split(“/<br>/is”, $data) as $line) {
$page .= $line .”<br>”;
// 足して$maxLengthを超えた場合
if ( (mb_strlen($page) + mb_strlen($line)) > $maxLength ) {
// 表示したいページであれば、それを$disppageへ代入
if ($pproc == $ipage) { $disppage = $page; }
// 次のページへ
$page = “”;
$pproc ++;
}
}
// ループを抜けたとき、$pageが空の場合は$pprocを-1しておく
if (trim($page) == “”) { $pproc –; }
// 最大ページ数を代入
$max = $pproc;
// 最後のページの場合はループを抜けたときに$disppageへ代入
if ($max == $ipage) { $disppage = $page; }
// ページ作成
$psh = $disppage;
$psh .= ($ipage == $max) ? “<br>[End]<hr>” : “</a><hr>”;
$psh .= ($ipage != 1) ? $plk.($ipage – 1).”>前</a>” : “前”;
$psh .= “[P.$ipage/$max]”;
$psh .= ($ipage != $max) ? $plk.($ipage + 1).”>次</a>” : “次”;
echo $psh;
あまり深く考えずに作成したコードなので、ちょっと回りくどいことをしているかもしれませんけれども(汗)動作テスト込みで30分かかってないので、この辺はNucleusとPHPの良いところですね。
気になっていた方の手助けになればと思います。
“NP_Mobileの表示するページをちょっとだけ読みやすくする” に対するコメントはありません。