2012-10-21 89 views
2

嗨,我的問題是,我不能加載一些JavaScript文件@我的特殊頁面擴展名。 我嘗試過用addscript和其他一些方法,但唯一發生的事情是javascript被取消導致了mediawiki軟件的no-js。Mediawiki擴展在標題中添加Javascript

在我的擴展名的文件夾中是一個new.js文件,我只想訪問我的特殊頁面。

這是一些代碼(大部分是特殊頁面的例子)。

MyExentions.php

<?php 
if (!defined('MEDIAWIKI')) { 
    echo <<<EOT 
To install my extension, put the following line in LocalSettings.php: 
require_once("$IP/extensions/MyExtension/MyExtension.php"); 
EOT; 
    exit(1); 
} 

$wgExtensionCredits['specialpage'][] = array(
    'path' => __FILE__, 
    'name' => '-', 
    'author' => 'Thomas Döring', 
    'descriptionmsg' => '-', 
    'version' => '0.0.1', 
); 

$dir = dirname(__FILE__) . '/'; 
$wgAutoloadClasses['SpecialMyExtension'] = $dir . 'SpecialMyExtension.php'; 
$wgExtensionMessagesFiles['MyExtension'] = $dir . 'MyExtension.i18n.php'; 
$wgExtensionMessagesFiles['MyExtensionAlias'] = $dir . 'MyExtension.alias.php'; 
$wgSpecialPages['MyExtension'] = 'SpecialMyExtension'; 

SpecialMyExtension.php

<?php 
class SpecialMyExtension extends SpecialPage { 
    function __construct() { 
      parent::__construct('MyExtension'); 
    } 

    function execute($par) { 
      $request = $this->getRequest(); 
      $output = $this->getOutput(); 
      $this->setHeaders(); 

      # Get request data from, e.g. 
      $param = $request->getText('param'); 

      # Do stuff 
      # ... 

      if(file_exists("extensions/TimeLine/TimeLine/data.xml")) 
      { 
        $data = simplexml_load_file("extensions/TimeLine/TimeLine/data.xml"); 

        foreach($data->event as $event) 
        { 
         $html.="<tr><td>".$event['title']."</td><td>".$event['start']."</td></tr>"; 
        } 
        $html.="</table>"; 

        $html.="<a href=\"javascript:hello()\">klick</a>"; 

        $output->addHTML($html); 

       } 
       else 
       { 
        $wikitext = 'Datei nicht gefunden!'; 
        $output->addWikiText($wikitext); 
       } 

    } 


} 
?> 

我希望你能幫助我。

+0

在哪裏你的代碼是否包含任何添加JS的方法? – Bergi

+0

你知道[RessourceLoader](http://www.mediawiki.org/wiki/ResourceLoader/Developing_with_ResourceLoader)? – Bergi

回答

2

addScript在版本1.16和之前版本中工作。在1.17以後,你應該使用addHeadItem:

$wgHooks['ParserBeforeTidy'][] = 'wgAddJquery'; 

function wgAddJquery(&$parser, &$text) { 

    global $addJqueryScripts; 
    if ($addJqueryScripts === true) return true; 

    $parser->mOutput->addHeadItem(
    '<script language="JavaScript" src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>' 
); 

    $addJqueryScripts = true; 

    return true; 

} 
+0

你把這個AddHeadItem放在哪裏?在皮膚中? –

+0

in LocalSettings.php – hlcs

+0

只是一個附錄:根據較新的插件約定,你可以在MyExtention.hooks中將鉤子註冊放置在MyExtention.php中,像這樣:$ wgHooks ['ParserBeforeTidy'] [] ='MyExtention :: wgAddJquery';'和函數'wgAddJQuery()'作爲靜態方法。 php'。這適用於我,我沒有改變'LocalSettings.php',也沒有綁定到特定的皮膚。 –

0

我補充它在皮膚文件中,在函數功能setupSkinUserCss $ OUT-> addHeadItem( 'maketree.js',」

<script type='text/javascript' src='/js/mktree.js'></script>");