内联 Confluence 用户宏

6
如何创建具有生成内联输出的正文的 Confluence 宏?以下是宏示例:
## @noparams
<font color="red">$body</font>

应用于该文本
Before macro [macro starts here]macro body[macro ends here] after macro.

将创建此HTML代码:

<p>Before macro </p>
<font color="red">macro body</font>
<p>after macro.</p>

如何删除 <p></p> 标记?
1个回答

3

这是Confluence的一个问题。为了避免这种情况,您需要使用HTML输出。如果您的宏正文或内容包含维基标记,则您必须手动渲染它们。以下是我的解决方法:

## Use this macro to avoid new lines:
#macro(doNothing)#end
##
## (Do stuff with body in wiki format, if appropriate)
##
## Convert to html and remove paragraph tags:
#set($renderedhtml = "")
#if ($body && ($body.length()>0))
  #set($globalHelper = $action.getHelper())
  #set($renderedhtml = $globalHelper.renderConfluenceMacro("$body").replaceAll("</?[pP]>",""))
#end
##
## (Do stuff with body in html format, if appropriate)
##
## Output text:
$renderedhtml#doNothing()

编辑:如果您的宏中有要保留的 p 标签,则需要修改正则表达式。上面代码中的正则表达式将删除所有 p 标签。


2
感谢您的回复。不幸的是,我的问题似乎不是由我的宏生成的代码中的新段落引起的,而是Confluence在我的宏之前插入</p>,之后插入<p>,将前面和后面的文本嵌入新段落中。我能取消这些标签吗? - MrTJ
这正是上面模板所做的。试试看吧。 - boileau
1
请问您能否解释一下如何“手动渲染”? - mrtsherman
1
我最终基于你的代码创建了一些东西。#set($body = "[link|doc:mypage]")。显然,这将覆盖原有的body,但是宏本来就不应该有body。 - mrtsherman
通过手动渲染,我只是指的是在脚本中所做的事情。实际上,想法是你可以将body设置为任何你想要呈现的维基格式,在“(Do stuff with body in wiki format, if appropriate)”处进行渲染,因此你的使用方式完全符合我的意图。 - boileau
这是新的Confluence编辑器在放弃wiki标记后出现的几个问题之一,但已在Confluence 5.4中得到解决 - Underverse

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接