2014-09-18 23 views
6

Voglio aggiungere uno script esterno alla sezione principale per tutte le pagine in mediawiki.Come aggiungere la sezione esterna <script> a <head> per tutte le pagine mediawiki?

Funzione onBeforePageDisplay richiamata da BeforePageDisplay gancio:

//LocalSettings.php 
... 
# Assign my functions to hook 

$wgHooks['BeforePageDisplay'][] ='onBeforePageDisplay'; 

function onBeforePageDisplay(OutputPage &$out, Skin &$skin) 
{ 
    mw.loader.load('http://static.wowhead.com/widgets/power.js', 'text/javascript'); 
    $out->addModules('mw.loader'); 
    return true; 
}; 

In questa funzione voglio aggiungere

<script type="text/javascript" src="http://static.wowhead.com/widgets/power.js"></script> 
<script>var wowhead_tooltips = { "colorlinks": true, "iconizelinks": true, "renamelinks": true }</script> 

per <head> sezione per tutte le pagine di wiki.

Per vecchie versioni di mediawiki utilizzato addScript metodo OutputPage dell'oggetto:

$out->addScript($html) 
// Add a JS file. $html is a full script tag: '<script type="text/javascript" src="..."></script>' 

ma ora

Per MediaWiki 1,17 e sopra, utilizzare moduli ResourceLoader.

$ out-> addModules (array (/ moduli /));

Non riuscivo a farlo funzionare e non trovo alcun esempio di questo.

ResourceLoader description

Default_modules description

Forse devo utilizzare il modulo mw.loader.load, ma non ho idea di come farlo. Aiutami, per favore, e scusami per il mio inglese.

P.s this soluzione di lavoro, ma non è giusto. Hai bisogno di una soluzione con ResourseLoader usato. (C) IMHO

+0

Non esiste alcun modo in cui è possibile caricare script esterno da ResourseLoader. Ho scritto la mia estensione per farlo. Migliore soluzione d'uso dalla mia risposta. И у тебя в коде яваскрипт вставлен в пхп. :) – hlcs

risposta

6

soluzione era semplice (sembra 2nd soluzione):

//LocalSettings.php 
... 
# Assign my functions to hook 

$wgHooks['BeforePageDisplay'][] ='onBeforePageDisplay'; 

function onBeforePageDisplay(OutputPage &$out, Skin &$skin) 
{ 
    $script = '<script type="text/javascript" src="http://static.wowhead.com/widgets/power.js"></script><script>var wowhead_tooltips = { "colorlinks": true, "iconizelinks": true, "renamelinks": true }</script>'; 
    $out->addHeadItem("wowhead script", $script); 
    return true; 
}; 

In questo modo guardare meglio allora this, perché lavorare con OutputPage direttamente (dopo l'analisi).

+0

Ciò si traduce in scarse prestazioni. Dovresti usare [ResourceLoader] (https://www.mediawiki.org/wiki/ResourceLoader/Developing_with_ResourceLoader). – Tgr

+0

Ha funzionato alla grande. Nessun impatto notevole sulle prestazioni. Grazie! –