【问题标题】:Add tab and open in new window/tab添加标签并在新窗口/标签中打开
【发布时间】:2013-04-09 07:32:06
【问题描述】:

我已经搜索了在页面和讨论旁边添加标签的可能性,并在下面找到。 Link to the post with the below code

$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

【问题讨论】:

  • 有人知道吗?
  • 我找到了一个 Hook,它可能会满足我的要求,但我不知道如何实现它。 $wgHooks['LinkerMakeExternalLink']。谁能帮帮我?
  • 没有人可以帮助我吗?

标签: php tabs customization mediawiki


【解决方案1】:

如果不修改您正在使用的皮肤的 PHP 代码(例如,skins/Vector.php 用于 Vector 皮肤),我认为这是不可能的。如果您确实想这样做,那么令人惊讶的是,呈现导航选项卡的代码在 renderNavigation() 方法中。或者您可以在execute() 中设置标签后修改key 字符串(通常用于将titleaccesskey 属性注入链接)。

如果您不喜欢破解皮肤的想法,更简单的解决方案可能是使用 JavaScript。 site JavaScript 中的以下代码(将 name_of_tab 替换为您的自定义选项卡的名称)应该这样做:

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

当然,这对禁用 JavaScript 的用户毫无用处。还有一个小窗口,可以在链接加载后但在 JavaScript 有机会运行之前单击链接。

原则上,可以通过使用 CSS 隐藏选项卡直到 JS 代码运行来避免最后一个问题。然而,确保标签 always 一开始是隐藏的,但如果启用了 JS,不会破解皮肤,无论 MediaWiki 是否被配置为执行异步脚本加载,变得......非常棘手。事实上,我放弃了试图弄清楚。也许编写一个自定义 ResourceLoader 模块可能会做到这一点,但我已经在这方面花费了太多时间。

【讨论】:

    猜你喜欢
    • 2014-11-05
    • 2017-04-07
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多