我们有一个MediaWiki维基。我希望能够报告正在进行多少协作,并且我想到了以下图表:每页的作者数量。所以数据将是这样的:
#Pages #Authors
20 1
10 2
25 3
等。这表明20页只有1位作者,10位有2位,25位有3位,......
有没有人知道获取此信息的方法?
这些信息也需要随时间显示 - 所以如果有人知道如何做到这一点,我将不胜感激。 (例如,上个月25%的页面有2位或更多作者,本月为30%)。
答案 0 :(得分:2)
这不完全是你想要的,但它可能是一个好的开始。这是一个简单的特殊页面,其唯一目的是显示页面名称和作者数量。
$wgAutoloadClasses['SpecialPagesAuthors'] = $IP . '/additions.php';
$wgSpecialPages['PagesAuthors'] = 'SpecialPagesAuthors';
class SpecialPagesAuthors extends SpecialPage {
function __construct() {
parent::__construct( 'PagesAuthors' );
}
这基本上只是注册页面。
function execute( $par ) {
global $wgOut;
$dbr = wfGetDB( DB_SLAVE );
$output = <<<WIKITEXT
{| class="wikitable"
! Page !! Authors
WIKITEXT;
我们把所有东西放在一张漂亮的桌子里。
$query_result = $dbr->select(
array( 'revision', 'page' ),
array( 'rev_page', 'page_id', 'page_namespace', 'page_title',
'COUNT(DISTINCT(rev_user_text)) AS unique_authors' ),
null,
__METHOD__,
array( 'GROUP BY' => 'rev_page', 'ORDER BY' => 'unique_authors DESC' ),
array( 'page' => array( 'LEFT JOIN', 'page_id=rev_page' ) )
);
这里我们查询数据库中的页面和作者数量(基本上是编辑页面的唯一用户名和IP的数量)。
foreach( $query_result as $row ) {
$title = Title::newFromRow( $row );
$page_title = $title->getPrefixedText();
$output .= <<<WIKITEXT
|-
| {$page_title} || {$row->unique_authors}
WIKITEXT;
}
$dbr->freeResult( $query_result );
这里我们输出页面名称和作者数量,并释放数据库查询结果。
$output .= "|}";
$this->setHeaders();
$wgOut->addWikiText( $output );
}
}