如何在XWiki中展示与指定标签关联的页面列表
解决XWiki动态展示指定标签页面列表的问题
我明白你想要的是只展示关联指定标签的页面列表,而不是带头部侧边栏的完整页面,也不是标签云。之前的iframe、Display/Include宏都没满足需求,下面给你两个靠谱的方案,都是XWiki原生支持的:
方案一:用Livtable实现动态可交互的页面列表
Livtable是XWiki自带的动态表格组件,完美适配你的需求——它能动态过滤、排序页面,而且只展示你需要的内容,没有多余的页面框架。
操作步骤:
- 打开你要展示列表的页面,进入编辑模式
- 插入「Livtable」宏(在宏列表里搜“Livtable”就能找到)
- 在宏配置里设置以下关键参数:
- 数据源:选择
documents(表示查询所有页面) - 要显示的列:比如勾选
Title(页面标题)、Creator(创建者)、Date(修改日期),按需选择 - 过滤条件:点击「添加过滤器」,选择
Tags字段,过滤规则选contains,值填你要关联的标签名称(比如技术文档)
- 数据源:选择
- 保存页面,就能看到一个动态的表格,里面只显示带指定标签的页面,还能点击列头排序、搜索过滤
如果需要更定制化的样式,还可以在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
相关产品推荐
相关产品推荐

