在MediaWiki网站上批量编辑页面

时间:2014-03-24 18:51:42

标签: mediawiki

我有一个运行挂钩的扩展代码 $wgHooks['ParserFirstCallInit'][] = 'AdsSetup'; $wgHooks['EditPage::showEditForm:initial'][] = 'CheckHasTag'; 当您点击页面上的修改时,它会使用javascript检查某个文字的页面,如果它没有添加<Tag>

然后保存页面,标签就在那里。 我的网站上有 1,000页。我不想在每个页面上点击编辑来运行扩展程序。有没有办法批量编辑页面来运行扩展?

我只想在namespace = 'main'的网页上运行它,我想排除一些网页。

这是我的扩展程序代码:

<?php

  $wgHooks['ParserFirstCallInit'][] = 'AdsSetup';
  $wgHooks['EditPage::showEditForm:initial'][] = 'CheckHasTag';

function AdsSetup( &$parser ) {
    $parser->setHook( 'ads', 'AdsRender' );   return true;}

function AdsRender( $input, $args, $parser, $frame ) {

$output = '<div id="googlead"><script type="text/javascript">
google_ad_client = "xxx";
google_ad_width = 300;  google_ad_height = 250;
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>';
return array( $output, "markerType" => 'nowiki' );
  }
  // check if content has <googleAds1> tag
  function CheckHasTag($editPage){
global $wgOut;
$wgOut->addScript('<script type="text/javascript">
var editTextboxText = document.getElementById("wpTextbox1").value;
                var searchFor = "googleAds1";
                var searchResult = editTextboxText.search(searchFor);
        console.log("Testing console12");       
                if(searchResult == -1){
                var a = editTextboxText;
                var b = "\n<ads media=googleAds1 />\n";
                var findP = "\n"; 
                var p = editTextboxText.search(findP);
                var position = p;
    document.getElementById("wpTextbox1").value = a.substring(0, position) + b +  a.substring(position);
  } </script>');    return true; }

如何在不必单独编辑每个页面的情况下运行扩展程序?

1 个答案:

答案 0 :(得分:2)

你看过Replace Text extension了吗?这是在某个命名空间中进行全局搜索和替换的简单方法。需要注意的是,它会搜索字符串或正则表达式的存在,而不是缺席。

您的描述中没有足够详细信息可以知道是否可以使用正则表达式测试字符串的缺失,但您可以执行类似添加{{{{ 1}}到所有页面,然后搜索包含<Tag>和目标字符串的网页,并从这些网页中删除<Tag>