2012-08-03 99 views
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/)并在最后添加附属代码,如上例所示?

我知道这段JavaScript代码叫做Amazon Associate Link Localiser,它做了类似的事情。但是,它只适用于亚马逊链接,并且它也定位了我不想要的功能的链接。

回答

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'; 
    } 
} 

DEMO

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/

UPDATE:添加的代码和完全合格的路径

UPDATE:添加 '否则如果' 块为其它代码。如果块有希望减少不必要的处理,使用'else if'而不是另一个。

+0

太感谢了,这看起来像一个很好的解决方案,我不是很大的。你能告诉我什么是添加附加代码的最佳方式吗?例如,我希望我的amazon.com链接追加?tag = shihac-20到最后。我只是复制了 myCodeAmazon =“ (link.href).indexOf(“amazon.com”)> -1 &&(link.href).indexOf(myCode)<0){ link.href = link .href + myAmazoncom; – Andytizer 2012-08-13 15:33:15

+0

如果链接已包含标签,则此代码不起作用 – Camille 2014-07-11 14:22:28

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; 
    } 
}