2012-08-03 97 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; 
    } 
}