非互換対応その後

閲覧数: 46(1)

年初からずっと取り組んで来た「非互換」対応のその後です。MediaWiki 1.35以降で非推奨となった内部機能を使用していた「DynamicPageList」を騙し騙しここまで使って来ましたが、MediaWiki本体の更なるバージョンアップ(1.37)に伴い、完全に非互換となってしまいました。DynamicPageList(DPL)にはMediawiki本家バージョンと3rd Partyと呼ばれる外部バージョンがあります。これまで使用してきたのは3rd Partの方で、その後継は、同じチームが開発した「DynamicPageList3」(以下、DPL3)と呼ばれるExtensionです。”完全”下位互換を謳っていながら、過去の設定のままなのに同じ表示にならないという、下位互換が”自称”なだけと言う「ITあるある」状態です。

例によってコードを見ていきます。ディレクトリの構造やファイル名が大きく変わっていますが、内部のコードは完全刷新とまでは行かないようで、所々に見たことのある構造があり、助けられます。DPL3の非互換で一番大きなものが、本文の抜粋機能が働かない、というものです。いつものようにわかってしまえば原因は至って単純で、単なる記述ミス。。。確認とかテストとかしないのが最近の流行りなので致し方無し。

public function __construct( Parameters $parameters, Parser $parser ) {
...
//    $this->setIncludePageMaxLength( $parameters->getParameter( 'includemaxlen' ) );
    $this->setIncludePageMaxLength( $parameters->getParameter( 'includemaxlength' ) );
...
}

mediawikiのテンプレート等で記述されたパラメータを取り込む際に使われれるDPLのパラメータですが、取得して設定する際にパラメータ名を間違えてしまっています。「includemaxlength」とすべきところを「includemaxlen」としてしまったという初歩的過ぎて誰も気が付かない。本来はこのパラメータで抜粋文字数(200文字なら”200″とか)を指定するのですが、それがパラメータ名が違うため取り込めず、コードに反映されないため、全文が表示されてしまっていました。ここを修正することで、抜粋は機能するようになりましたが、いつものように日本語、正確にはマルチバイトを全く考慮していないコーディングとなっているので、従来通りの修正を加えます。

public static function limitTranscludedText( $text, $limit, $link = '' ) {
...
//    $cut = substr( $text, 0, $n0 + 1 );
    $cut = mb_strimwidth( $text, 0, $n0 + 1 );
...

次に、厳密に指定文字数(200文字等)で抜粋すると、リンク([[]]で囲われた文字)が含まれていると、リンクが壊れてしまうので、その対策をします。

if ( $this->includePageMaxLength > 0 && ( strlen( $text ) > $this->includePageMaxLength ) ) {
//    $text = LST::limitTranscludedText( $text, $this->includePageMaxLength, ' [[' . $title . '|..→]]' );

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

後半はいつもの修正なので、パラメータ名が変更されている点などに注意すればOKです。これで晴れてDPL3が使用可能となったので、本体を1.37.0へバージョンアップいたしました。

カテゴリーIT閑話, 公開タグ, , ,
閲覧数まとめ

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

タイトルを抜粋する
blank

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

非互換対応再び
blank

サイトのお守りというのは、言い換えれば「それらを構成するソフトウェア群とそれらが稼働するハードウェア  続きを読む

ページナビのテキスト
blank

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

閃きは大事だw
blank

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

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

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

スポンサーリンク

コメントを残す

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