【问题标题】:Mediawiki: Server Side processed DataTables with parser extensionMediawiki:带有解析器扩展的服务器端处理的数据表
【发布时间】:2015-11-10 00:42:38
【问题描述】:

我正在尝试创建一个 MediaWiki 解析器扩展,它将创建一个表,并且解析的参数将用于 dataTables 脚本的 ajax URL。

$wgHooks['ParserFirstCallInit'][] = 'AllQuesttableFunction';
$wgExtensionMessagesFiles['AllQuestTable'] = __DIR__ . '/_questtable.i18n.php';
function AllQuesttableFunction( &$parser ) {
   $parser->setFunctionHook( 'questtable', 'AllQuestTableParserFunction' );
   return true;
}


function AllQuestTableParserFunction( &$parser, $arg1='', $arg2='', $arg3='' ) {

$tableend = '<br><div class="hbody"><table class="lists list_basicitem width_100p" id="serverTable"><thead><tr><th>Area</th><th>Quest Name</th><th>Min<br>Level</th><th style="width:200px !important">Rewards</th></tr></thead></table><div class="cl"></div></div>';

return array( $tableend, 'noparse' => true, 'isHTML' => true );
}



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

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


  global $addJqueryScripts, $wgLang;
   $code = $wgLang->getCode();
  if ($addJqueryScripts === true) return true;

  $parser->mOutput->addHeadItem(
    '   <script type="text/javascript" language="javascript" src="http://mywiki.com/wiki/extensions/DataTables/DataTables-1.10.0/media/js/jquery.js"></script>
        <script type="text/javascript" language="javascript" src="http://mywiki.com/wiki/extensions/DataTables/DataTables-1.10.0/media/js/jquery.dataTables.js"></script>
        <script type="text/javascript" language="javascript" >
            $(document).ready(function() {
                var dataTable = $("#serverTable").DataTable( {
                    "columnDefs": [
                                {
                                targets: 0,
                                className: \'al\'
                                },
                                {
                                targets: 1,
                                className: \'al\',
                                type: "num-html"
                                },
                                {
                                targets: 2,
                                className: \'ar\'
                                },
                                {
                                targets: 3,
                                className: \'al\'
                                },
                                { targets: \'no-sorting\', orderable: false }
                                ],
                    "processing": true,
                    "language": {
                    "processing": "<img src=\'2.gif\'>"
                    },
                    "serverSide": true,
                    "order": [[ 2, "desc" ]],
                    "ajax":{
                        url :"http://mywiki.com/wiki/extensions/quest_tables/_questtables_ajax.php?lowerlevel=' . $arg1 . '&higherlevel=' . $arg2 . '&race=' . $arg3 . '&lang=en",
                        type: "post",
                    }
                } );
            } );
        </script>'
  );

  $addJqueryScripts = true;

  return true;

}

我使用了此处提供的代码 Mediawiki Extension add Javascript in Header

用于将脚本添加到标题但 首先,它将它添加到每一页,我只希望它出现在带有魔法词的页面上。 第二,它似乎在 AllQuestTableParserFunction 之前推动 wgAddJquery 方式,这意味着我不能在 dataTables 脚本中使用解析的参数。

tl;博士 有一个带有 {{#magicword:arg1|arg2|arg3}} 的页面。所有 3 个参数都被解析为一个扩展,其中一个函数创建一个表,第二个函数将一个脚本添加到标题中,其中这 3 个参数作为 ajax 的 url 的一部分并且仅在那个页面上。我在其他任何地方都不需要这些脚本。

有什么建议吗?或者这根本不可能?

【问题讨论】:

    标签: javascript php datatables mediawiki


    【解决方案1】:

    您可能应该使用$parser-&gt;getOutput()-&gt;addModules(...),但这不是重点吗?

    为什么需要 ParserBeforeTidy 钩子?如果只想在遇到解析器函数时添加脚本,为什么不从解析器函数处理程序方法开始呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 2018-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多