3

我希望能够在我的MediaWiki安装上自动将链接更改为附属链接。如果将来需要更改代码,这将有助于减少管理链接的时间。

这是我的 GOG.com 会员计划的设置:我需要将此密钥附加到每个 GOG.com 链接的末尾:?pp=708a77db476d737e54b8bf4663fc79b346d696d2

gog.com/en/gamecard/baldurs_gate_the_original_saga/?pp=708a77db476d737e54b8bf4663fc79b346d696d2

一段代码,如 Javascript,是否有可能拦截所有链接(如http://www.gog.com/en/gamecard/baldurs_gate_the_original_saga/)并在末尾附加附属代码,如上例所示?

我知道这段名为Amazon Associate Link Localiser的 Javascript 代码做了类似的事情。但是,它仅适用于亚马逊链接,并且它还本地化链接,这是我不想要的功能。

4

3 回答 3

1

正确的方法是使用这样的LinkerMakeExternalLink mediawiki 钩子(您可以将它放在 LocalSettings.php 的底部:

$wgHooks['LinkerMakeExternalLink'][] = 'ExampleExtension::exampleLinkerMakeExternalLink';

class ExampleExtension {
    public static function exampleLinkerMakeExternalLink( &$url, &$text, &$link, &$attribs, $linktype ) {
        if( strpos( $url, 'gog.com') !== false ) {
            $url .= '?pp=708a77db476d737e54b8bf4663fc79b346d696d2';
        }
        return false;
    }
}
于 2016-07-05T20:27:28.467 回答
0

所以你也可以使用jquery来绑定任何链接点击。这样您就可以即时进行链接评估。这个 jsfiddle 是我认为你想要完成的事情的粗略介绍。这些警报只是为了您的利益,应该被删除。

$("a").click(function() {
    addAffiliate(this);
});

myCode = "?pp=708a77db476d737e54b8bf4663fc79b346d696d2";
myAmazonCode = "?tag=shihac-20"
    function addAffiliate(link) {
        alert("enterting script: " + link.href);
        if ((link.href).indexOf("gog.com") > -1 && (link.href).indexOf(myCode) < 0) {
                link.href = link.href + myCode;
        }else if((link.href).indexOf("amazon.com") > -1 && (link.href).indexOf(myAmazonCode) < 0){
                link.href = link.href + myAmazonCode;   
        }
            alert(link.href);
            return true;
        }​

http://jsfiddle.net/du47b/23/

更新:添加代码和完全限定路径

更新:为其他代码添加了“else if”块。使用“else if”而不是另一个 if 块有望减少不必要的处理。

于 2012-08-03T15:57:15.007 回答
0

不确定数百个链接的性能有多好。

// Plain Javascript

var links = document.getElementsByTagName('a');

for (var i = 0, max = links.length; i < max; i++) {
    var _href = links[i].href;

    if (_href.indexOf('gog.com') !== -1) {
        links[i].href = _href + '?pp=708a77db476d737e54b8bf4663fc79b346d696d2';   
    }
}

演示

于 2012-08-03T15:21:08.790 回答