トリミング・ファイナル

閲覧数: 75(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日】
カテゴリー公開タグ, ,
新年早々の非互換対応

昨年から先送りしていた「mediawiki」のマイナーバージョンアップ(2020/12/18リリース  続きを読む

Elasticsearch 5.6.5
blank

少し古い記事の「検索に悩む」で紹介した「Elasticsearch」ですがWordPressやMed  続きを読む

非互換対応その後
blank

年初からずっと取り組んで来た「非互換」対応のその後です。MediaWiki 1.35以降で非推奨とな  続きを読む

HHVMの振る舞い
blank

と言うか「HHVMとPHP」で書いたようにWordPressの実行環境をHHVMからPHPへ戻してみ  続きを読む

検索エンジンを分離
blank

何度か紹介しているのでご存知の方もいると思うが、ここの環境は、AWS上のEC2最少インスタンス(t2  続きを読む

閃きは大事だw
blank

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

スポンサーリンク

コメントを残す

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