非互換対応その後

閲覧数: 62(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)タグ, , ,
Nessus: Vulnerabilit...

このサイトは商用のブログサービスを利用せず自前のサーバー(AWS上のEC2インスタンス)にWordp  続きを読む

SWIPERでSLIDER
blank

無料テーマを独自に改善する活動の一環として、前回は「おすすめ記事」を表示する部分について書きました。  続きを読む

ElasticPress 3.0
blank

ここのところElasitcsearch関連の話が多いなと思っていたら「ElasticPress」がバ  続きを読む

検索精度を高める
blank

検索ネタを連発するのはElasticsearchやElasticPressがバージョンアップした時の  続きを読む

mediawiki 1.30.0
blank

意外と早くメジャーバージョンアップが来た。例によって非互換があるのでテスト系でバージョンアップの確認  続きを読む

ラズパイでVPN
blank

今さらですがラズパイでのVPN(SoftEtherVPN)導入の話です。以前のバージョンではARMア  続きを読む

スポンサーリンク

コメントを残す

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