1

ページとディスカッションの横にタブを追加する可能性を探したところ、以下が見つかりました。 以下のコードを含む投稿へのリンク

$wgHooks['SkinTemplateNavigation'][] = 'replaceTabs';
function replaceTabs( $skin, &$links) {  
    $links['namespaces']['name_of_tab'] = array(
            'class' => false or 'selected', // if the tab should be highlighted
            'text' => 'text_of_tab', // what the tab says
            'href' => 'url_to_point_to', // where it links to
            'context' => 'main',
    );
    return true;
}

それはうまく機能しますが、ウィンドウは同じウィンドウで開かれます。を追加しました$wgExternalLinkTarget = '_blank';が、これらのリンクでは機能しないようです (現在、私の wiki にある他の外部リンクでは機能します)。

タブ リンクを強制的に新しいウィンドウまたはタブで開く方法はありますか?

使用しています:
MediaWiki バージョン: 1.19.1
PHP: 5.3.6 (apache2handler)
MySQL: 5.5.16

4

1 に答える 1

0

skins/Vector.php使用しているスキン ( Vector スキンなど)の PHP コードを変更しない限り、これは不可能だと思います。そうしたい場合は、ナビゲーション タブをレンダリングするためのコードは、驚くべきことに、renderNavigation()メソッド内にあれば十分です。keyまたは、 でタブを設定した後、タブの文字列 (通常はリンクに挿入titleして属性を指定するために使用) を変更することもできます。accesskeyexecute()

スキンをハッキングするのが気に入らない場合は、JavaScript を使用する方が簡単な解決策かもしれません。サイトの JavaScriptの次のコードのようなもの (name_of_tabカスタム タブの名前に置き換えたもの) を使用する必要があります。

jQuery( function ( $ ) {
    // run this code after page has loaded:
    $( '#ca-name_of_tab a' ).attr( 'target', '_blank' );
} );

もちろん、これは JavaScript が無効になっているユーザーには何もしません。リンクがロードされた後、JavaScript が実行される前に誰かがリンクをクリックできる小さなウィンドウもあります。

原則として、JS コードが実行されるまで CSS でタブを非表示にすることにより、最後の問題を回避することができます。ただし、MediaWiki が非同期スクリプト読み込みを行うように構成されているかどうかに関係なく、スキンをハッキングせずに、JS が有効になっている場合にのみ、タブが常に最初は非表示で始まることを確認すると、驚くほどトリッキーになります。実際、私はそれを理解しようとすることをあきらめました。カスタム ResourceLoader モジュールを作成することで解決できるかもしれませんが、私はすでにこれに多くの時間を費やしてきました。

于 2013-04-30T18:01:01.767 に答える