如何在合流宏中呈现页面的所有子内容
How to render all of a page's children's content in a confluence macro
我正在尝试构建一个简单的 confluence 宏来呈现当前父页面的所有子页面。本质上是现有宏之间的交叉:子显示和包含页面。我确实查看了那些宏的 source code,但由于这是我第一次在 confluence 中进行开发,所以它比帮助更令人困惑。
现在我正在处理 execute 方法,因为我是 confluence 开发的新手,所以我 100% 不确定到底需要去那里做什么。
我已经读完了Atlassian's Guide to Making a new Confluence Macro
但他们似乎只是使用 html 来包装现有宏的属性列表。
所以我决定看看 API, specifically Page
我能够非常接近,问题是,当我复制页面的主体时,我没有得到页面中的儿童宏和样式。
@Override
public String execute(Map<String, String> parameters, String body,
ConversionContext context) throws MacroExecutionException {
//loop through each child page and get its content
StringBuilder sb = new StringBuilder();
ContentEntityObject ceo = context.getPageContext().getEntity();
Page parent =(Page) ceo ;
List<Page> children = parent.getChildren();
for(Page child:children)
{
sb.append(child.getBodyAsString());
}
return sb.toString();
}
我如何获得所有内容而不只是文本?
我还用 java 标记了它,因为插件就是这样写的。
好了,我想通了。
我需要将其从存储格式转换为视图格式,以便它也能呈现宏。
{
String converted = xhtmlUtils.convertStorageToView(child.getBodyAsString(), context);
sb.append(converted);
}
如果您遵循教程
,xhtmlUtils 已在构造函数中初始化
private final XhtmlContent xhtmlUtils;
public ExampleMacro(XhtmlContent xhtmlUtils)
{
this.xhtmlUtils = xhtmlUtils;
}
我还根据 Atlassian answers
中的建议添加了注释
@RequiresFormat(Format.Storage)
public String execute(Map<String, String> params, String body, ConversionContext conversionContext) throws MacroExecutionException {
其中 Format 和 RequiresFormat 是这些 classes/annotations
import com.atlassian.confluence.content.render.xhtml.macro.annotation.Format;
import com.atlassian.confluence.content.render.xhtml.macro.annotation.RequiresFormat
我正在尝试构建一个简单的 confluence 宏来呈现当前父页面的所有子页面。本质上是现有宏之间的交叉:子显示和包含页面。我确实查看了那些宏的 source code,但由于这是我第一次在 confluence 中进行开发,所以它比帮助更令人困惑。
现在我正在处理 execute 方法,因为我是 confluence 开发的新手,所以我 100% 不确定到底需要去那里做什么。
我已经读完了Atlassian's Guide to Making a new Confluence Macro 但他们似乎只是使用 html 来包装现有宏的属性列表。
所以我决定看看 API, specifically Page 我能够非常接近,问题是,当我复制页面的主体时,我没有得到页面中的儿童宏和样式。
@Override
public String execute(Map<String, String> parameters, String body,
ConversionContext context) throws MacroExecutionException {
//loop through each child page and get its content
StringBuilder sb = new StringBuilder();
ContentEntityObject ceo = context.getPageContext().getEntity();
Page parent =(Page) ceo ;
List<Page> children = parent.getChildren();
for(Page child:children)
{
sb.append(child.getBodyAsString());
}
return sb.toString();
}
我如何获得所有内容而不只是文本?
我还用 java 标记了它,因为插件就是这样写的。
好了,我想通了。
我需要将其从存储格式转换为视图格式,以便它也能呈现宏。
{
String converted = xhtmlUtils.convertStorageToView(child.getBodyAsString(), context);
sb.append(converted);
}
如果您遵循教程
,xhtmlUtils 已在构造函数中初始化private final XhtmlContent xhtmlUtils;
public ExampleMacro(XhtmlContent xhtmlUtils)
{
this.xhtmlUtils = xhtmlUtils;
}
我还根据 Atlassian answers
中的建议添加了注释@RequiresFormat(Format.Storage)
public String execute(Map<String, String> params, String body, ConversionContext conversionContext) throws MacroExecutionException {
其中 Format 和 RequiresFormat 是这些 classes/annotations
import com.atlassian.confluence.content.render.xhtml.macro.annotation.Format;
import com.atlassian.confluence.content.render.xhtml.macro.annotation.RequiresFormat