【问题标题】:Get list of current page's categories in MediaWiki获取 MediaWiki 中当前页面的类别列表
【发布时间】:2016-02-05 16:59:37
【问题描述】:

我正在尝试在我的 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>";
    }

【问题讨论】:

  • 您对输出的期望是什么?
  • 我打算将类别存储在一个变量中,然后我将使用它来生成面包屑并将特定于类别的类添加到某些元素。所以它可以是从纯文本到数组的任何东西。
  • 什么是$this?最后我检查了有几种不同的方法来构建皮肤;能否提供更多细节?
  • 我不完全确定 $this 指的是什么。 (可能是我很难抓取数据的原因。)您可以在此页面上的皮肤中看到它在什么上下文中使用:mediawiki.org/wiki/Manual:Skinning/Archive#Initialization

标签: php mediawiki categories


【解决方案1】:

类别仅以 html 形式提供的事实是 MediaWiki 换肤的奇怪部分之一。不过,应该仍然可以将它们作为数组获取。根据你在皮肤代码中的位置(你没有告诉我们$this 指的是什么),这些(未经测试的)sn-ps 应该可以完成这项工作:

来自execute()-函数:

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

来自initPage()-函数:

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

【讨论】:

  • 第一个例子对我有用。使用一些自定义代码,我现在可以获取数据(例如类别)并在我的皮肤中使用它,但是我想要。完成后,我将用我的代码更新我的问题。非常感谢!
猜你喜欢
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-05-10
相关资源
最近更新 更多