You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XWiki中展示与指定标签关联的页面列表

解决XWiki动态展示指定标签页面列表的问题

我明白你想要的是只展示关联指定标签的页面列表,而不是带头部侧边栏的完整页面,也不是标签云。之前的iframe、Display/Include宏都没满足需求,下面给你两个靠谱的方案,都是XWiki原生支持的:

方案一:用Livtable实现动态可交互的页面列表

Livtable是XWiki自带的动态表格组件,完美适配你的需求——它能动态过滤、排序页面,而且只展示你需要的内容,没有多余的页面框架。

操作步骤:

  1. 打开你要展示列表的页面,进入编辑模式
  2. 插入「Livtable」宏(在宏列表里搜“Livtable”就能找到)
  3. 在宏配置里设置以下关键参数:
    • 数据源:选择 documents(表示查询所有页面)
    • 要显示的列:比如勾选 Title(页面标题)、Creator(创建者)、Date(修改日期),按需选择
    • 过滤条件:点击「添加过滤器」,选择 Tags 字段,过滤规则选 contains,值填你要关联的标签名称(比如技术文档)
  4. 保存页面,就能看到一个动态的表格,里面只显示带指定标签的页面,还能点击列头排序、搜索过滤

如果需要更定制化的样式,还可以在Livtable的「自定义CSS」里调整表格外观。

方案二:用Velocity脚本自定义页面列表(更灵活)

如果你想要完全自定义列表的展示样式(比如做成卡片、无序列表),用Velocity脚本直接查询页面是更好的选择,而且不会加载任何多余的页面元素。

代码示例:

在页面中插入「Velocity」宏,然后粘贴以下代码(把你的标签名称替换成你要关联的标签):

#set($targetTag = "你的标签名称")
#set($query = "doc.object(XWiki.TagClass).tags contains '$targetTag'")
#set($matchingPages = $xwiki.searchDocuments($query))

#if($matchingPages.size() > 0)
  <h3>带标签「$targetTag」的页面</h3>
  <ul class="tag-page-list">
    #foreach($pageFullName in $matchingPages)
      #set($pageDoc = $xwiki.getDocument($pageFullName))
      #if($pageDoc.isViewable())
        <li>
          <a href="$pageDoc.getURL()">$pageDoc.getDisplayTitle()</a>
          <span class="page-meta">(修改于 $date.format('yyyy-MM-dd', $pageDoc.getDate()))</span>
        </li>
      #end
    #end
  </ul>
#else
  <p>暂无带标签「$targetTag」的页面</p>
#end

代码说明:

  • $xwiki.searchDocuments():通过HQL查询所有包含指定标签的页面
  • $pageDoc.isViewable():确保只展示当前用户有权限查看的页面
  • 你可以修改HTML结构,把<ul>改成卡片布局,或者添加更多页面信息(比如摘要)

为什么之前的方法没效果?

  • HTML+iframe:iframe会加载完整的XWiki页面,所以必然带头部、侧边栏,适合嵌入整个页面但不适合只展示列表
  • Display/Include宏:这两个宏的设计目标是展示标签云(比如display tagcloud),而不是查询带标签的页面,所以不符合你的需求
  • 你之前尝试的无效果代码片段:大概率是API调用错误或者查询条件不对,比如没有正确引用标签类,或者权限不足导致查询不到页面

内容的提问来源于stack exchange,提问作者Mayot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:25:57