非互換対応再び

閲覧数: 36(0)

サイトのお守りというのは、言い換えれば「それらを構成するソフトウェア群とそれらが稼働するハードウェア環境の相互関係上の非互換」をいかに回避するか、に尽きると言える。ハードウェアはソフトウェアの命令で動くが、命令の記述が許容されない場合にはエラーを返す、ソフトウェアはソフトウェアにも命令する、それらが一体となって人間が目にする機能が実現されている、やっている側からすれば奇跡に近いが、使う側は知ってか知らずか、常に完璧を求めがちになる。

ウキペディアの元になっているMediawikiのバージョンが1.36へメジャーアップしました。2020年9月のメジャーアップから約8ヶ月、前々回からは少し長かった感じ。今回は、1.35までと言われていた非互換機能が予告通りバッサリ切られたので、多少の改修が必要となりました。

一番影響を受けたのが「HitCounters」という拡張機能で、これは元々はMediawiki本体に含まれていて、各ページがどのぐらい閲覧されたのかをカウントしていたものが、バージョン1.25から本体では削除されてしまい、その時に同じ機能を復元するために登場した拡張機能です。ページの左下に閲覧数を表示するものですが、その際に利用していた「SkinTemplateOutputPageBeforeExec」が削除されてしまったため、対応バージョン (0.3.2.3)が用意されたのですが、1.36対応ではさらに改修が必要でした。

オリジナルのソースを見てみると、コンテンツの言語を取得する部分($wgContLang)が「Fatal Error」を起こしているようです。1.36では「$this->getContentLanguage()」とする必要があるようです。

        $link = Linker::linkKnown(
            $title,
            $wgContLang->convert( htmlspecialchars( $title->getPrefixedText() ) )
        );

正しい取得方法へ変更します。「$wgContLangから$this->getContentLanguage()へ」

        $link = Linker::linkKnown(
            $title,
            $this->getContentLanguage()->convert( htmlspecialchars( $title->getPrefixedText() ) )
        );

この変更を行なった「HitCounters」を使えば、Mediawiki 1.36で閲覧数を左下に表示することが可能です。ややこしいのは正式な1.36対応版は「閲覧数表示」には非対応で、「閲覧数表示対応版 (0.3.2.3)」を1.36対応へ改修したということです。もちろん自己責任となります。同じく「SkinTemplateOutputPageBeforeExec」関連で言えば、フッターに「お問い合わせ」を(Googleの規約で)表示していますが、これも変更が必要でした。

$wgHooks['SkinTemplateOutputPageBeforeExec'][] = function( &$skin, &$tpl ) {
    $contactusLink = Html::rawelement( 'a', [ 'href' => 'mailto:webmaster@setakinoko.es' ], 'お問い合せ' );
    $tpl->set( 'contact', $contactusLink );
    $tpl->data['footerlinks']['places'][] = 'contact';
    return true;
};

なんとなく似てるけど、ちょっと書き方が変わっていて少し悩んだ(笑)

$wgHooks['SkinAddFooterLinks'][] = function( &$skin, &$key, &$footerlinks ) {
    if ( $key === 'places' ) {
        $footerlinks['contact'] = Html::rawelement( 'a', [ 'href' => 'mailto:webmaster@setakinoko.es' ], 'お問い合せ' );
        return true;
    }
};

頻繁な変更が面倒なら、長期サポート版を使う手もあるけれど、長い間今回のようなメンテナンス(非互換対応)をしないでいると、目利きが鈍るというか、技量を保つことが出来なくなる恐れもあり、この程度の頻度なら、その時は多少面倒だなと思っても、非互換対応を続ける方が得策かなぁなんて思いながらコンソールに向かっておりました。

カテゴリー公開, 閑話(IT)タグ, ,
究極のt2.nanoインスタ...

EC2の中で最小インスタンスタイプである「t2.nano」はCPUが1コアでメモリは512MBです。  続きを読む

dockerとiptables
blank

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

テスト系
blank

AWSで稼動している本番系の環境は、Amazon Linuxという専用のOSです。一番近いディストリ  続きを読む

Mediawikiプレビュー機能
blank

Wikipediaで実装されていいなぁと思っていた「プレビュー機能」記事中でリンクされた文字列にマウ  続きを読む

時刻同期
blank

VMware Fusion上のゲストOSであるCentOS6がCentOS7(今回訳あってダウングレ  続きを読む

小ネタひとつまみ
blank

なんかねパソコンでこのサイトを見ると横幅があり過ぎて読みにくいって指摘がありまして、そもそもWind  続きを読む

スポンサーリンク

コメントを残す

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