在MediaWiki

时间:2016-02-05 16:59:38

标签: php mediawiki categories

我正在尝试在MediaWiki皮肤中显示网页的类别,而不使用以下默认代码:

<?php if ( $this->data['catlinks'] ) { $this->html( 'catlinks' ); } ?>      

这增加了一堆我不想要的不必要的HTML。

<div id='catlinks' class='catlinks'>
    <div id="mw-normal-catlinks" class="mw-normal-catlinks">
        <a href="/wiki/Special:Categories" title="Special:Categories">Category</a>: 
        <ul><li><a href="/w/index.php?title=Category:Player_Character&amp;action=edit&amp;redlink=1" class="new" title="Category:Player Character (page does not exist)">Player Character</a></li></ul>
    </div>
</div>

理想情况下,我只是将类别名称视为纯文本或数组,但我不想从上面代码返回的HTML中推断它们。

如何将MediaWiki页面的类别作为纯文本回显?

更新

我正在使用此代码为我的Wiki生成类别面包屑。从最顶级的类别开始,然后开始工作。 (未经过过度测试)。请注意,这可能非常hacky,作为扩展会更好。

    // Get the current page's Title
    $wiki_title = $this->data['skin']->getTitle();
    // Get the categories
    $parenttree = $wiki_title->getParentCategoryTree();

    // Skin object passed by reference cause it can not be
    // accessed under the method subfunction drawCategoryBrowser
    $tempout = explode( "\n", $this->data['skin']->drawCategoryBrowser( $parenttree ) );
    // Convert data to usable array
    $wiki_category_breadcrumbs = explode( "&gt;", $tempout[1]);

    // Returns every category as URL with <li> tags wrapped around it
    foreach( $wiki_category_breadcrumbs as $value ) {           
        echo "<li>". $value ."</li>";
    }

1 个答案:

答案 0 :(得分:1)

类别仅作为html提供的事实是MediaWiki skinning的一个更怪异的部分。但是仍然可以将它们作为数组提取。根据您的皮肤代码中的位置(您不会告诉我们$this指的是什么),这些(未经测试的)片段应该可以完成这项工作:

来自execute() - 函数:

$title = $this->data['skin']->getTitle();
$categories = $title->getParentCategories();

来自initPage() - 函数:

$title = $this->getTitle();
$categories = $title->getParentCategories();