トリミング・ファイナル

閲覧数: 74(0)

ただでさえちょっとしか更新しないのに、そのちょっともしなくなるとあっという間に時間が過ぎて、面倒になって、ますます更新しなくなる。悪循環ってやつ?

毎日ブログ更新していますって人もいるだろうけど、どうやらそんな几帳面なことは出来そうもないw

トリミングでは、DPL(Dynamic Page List)を使った抜粋で、Mediawikiのリンクである、”[[“か”]]”が、抜粋文字の末尾に来たらずらす、という対応でリンク崩れを回避するとしたが、実際には、”[[“や”]]”がちょうど末尾に来ることは少なくて、起きる事象としては、”[[“だけが抜粋側に残って、後ろの”]]”が切り捨てられて、本文中に”[[“が表示されてしまうという美しくない状況の方が可能性としては高い。

ずっと前から気になってはいたけど、なかなかいい回避方法が見つからなかったので、起きてしまった時には、本文を書き換えて、リンクが崩れないように対応して回避していたw

でも、せっかく選り抜き記事や新しい記事は、カテゴリ設定で自動的に選択し、抜粋を一覧表示するようにしているのに、肝心の抜粋でリンクが崩れるのはかなり残念な状況ではある。そこで、ない知恵を絞って、トリミングに再挑戦し、なんとか解決策を見つけたので、これで最後にするという意味で、タイトルはファイナルとしたw

DPL自身には、シングルバイトの文字列なら、リンク切れや文字区切りの規則対応などが実装されているが、日本語には正しく対応できていない。ここに手を入れると大掛かりになるのと、万が一DPLのバージョンアップがあった時に対応しきれないので、前回と同様、抜粋の部分でのみ対応することにした。

方針としては、選り抜き記事(300文字切り抜き)や新しい記事(200文字切り抜き)で抜粋した一覧表示するとき、抜粋した範囲内にリンク崩れが起きないこと。回避のためには多少文字数が増えることは許容することとした。

PHPの文字列関数である、strrpos()のマルチバイト対応版である、mb_strrpos()を使い、対象文字列の中に指定された文字列が最後に現れる位置を取得する。”[[“と”]]”の対応関係は、前者が必ず後者より前に位置するはずなので、最後に現れた”[[“と”]]”の位置を比較し、”[[“が”]]”より後ろに位置する時に、リンクが崩れていると判定し、”[[“の位置から、mb_strpos()を使い、崩れたリンクの場所から見て、最初に現れる、”]]”の位置を取得し、抜粋位置をそこまで延長することで、リンク崩れを回避することにした。この方法であれば、ほとんどのケースに対応できるはずなので、これでトリミング対応は最後にできればと思っている。

変更した場所は、DPL.phpの399行目付近で、多少の知識がないと読み解けないと思う。


if( $this->mIncMaxLen > 0 && (strlen($text) > $this->mIncMaxLen) ) {
  $textx = DPLInclude::limitTranscludedText($text, $this->mIncMaxLen,"");
  $posx = mb_strrpos($textx, "[[");
  $posy = mb_strrpos($textx, "]]");
  if ($posx) {
    if ($posx > $posy) {
      $chgpos = mb_strpos($text, "]]", $posx);
      $this->mIncMaxLen = $chgpos * 2 + 2;
    }
  }
$text = DPLInclude::limitTranscludedText($text, $this->mIncMaxLen, ' [['.$title.'|...more>>]]');

もう一箇所修正する場所があるので以下のように修正します。場所は399行目付近です。

//                      $cut = substr( $text, 0, $n0 + 1 );
                        $cut = mb_strimwidth( $text, 0, $n0 + 1 );

以上です。

【最終更新日: 2017年11月16日】
カテゴリー公開タグ,
ページナビのテキスト

記事ページの下部に前後の記事(投稿)へのリンクが表示される仕様なのだが、「カテゴリーに制限」をかけて  続きを読む

タイトルを抜粋する
blank

関連記事プラグインを使って、記事本文の下に「関連記事」を表示している。情報としては、タイトル、画像、  続きを読む

閲覧数まとめ
blank

閃きついでに総合計と週合計をフラグで制御する方式に変更してみた。これまではベタに関数をまるまるコピー  続きを読む

閃きは大事だw
blank

このサイトは、あくまでもCMSであるWordPressの構築やクラウドであるAWSの運用ノウハウ取得  続きを読む

緊急事態宣言で外出自粛になり...
blank

せっかくのゴールデンウィークなのに、2年連続で緊急事態宣言下となり、外出自粛中。暇なので小ネタで遊ぶ  続きを読む

Zabbix 5.0を導入する
blank

もうね、完全にネタ切れw、ITネタで突っ走るしかない。今回は久しぶりのZABBIXネタと、それが稼働  続きを読む

スポンサーリンク

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください