トリミング・ファイナル

閲覧数: 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日】
カテゴリー公開タグ,
ElasticPress 3.5
2020年10月22日

Elasticsearch用のプラグインであるElasticPressがメジャーバージョンアップ(3  続きを読む

アクセシビリティ対策
2019年6月23日

テーマカスタマイズの一環で、トップページに一覧表示されている「写真を左右交互に表示する」ようにした際  続きを読む

dockerとproxy
2019年6月18日

dockerやdocker-composeをプロキシ環境下で使うのに苦労したので忘れないようにメモし  続きを読む

関連記事の大原則
2019年6月16日

ググったりしてあるページにたどり着いた閲覧者に対して、それに関連する記事を提示して少しでもサイトの滞  続きを読む

dockerとiptables
2019年6月13日

クラウドサーバーを利用する場合、ファイアウォール(Firewalld/iptables)の設定に失敗  続きを読む

コンテナとFirewall
2019年6月12日

三日連続のdockerネタです。前回の「コンテナの自動起動」でサーバーを再起動した時にコンテナ(ph  続きを読む

コメントを残す

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