2012-04-24 11 views
6

¿Cómo crear una macro de confluencia con un cuerpo que produce una salida en línea? La siguiente macro:Macro de usuario de confluencia en línea

## @noparams 
<font color="red">$body</font> 

aplicar a este texto

Before macro [macro starts here]macro body[macro ends here] after macro. 

creará este código HTML:

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

Cómo quitar las etiquetas <p></p>?

Respuesta

3

Este es un problema con Confluence. Para evitar esto, debe usar la salida html. Si el cuerpo o su macro contienen marcado wiki, entonces tendrá que renderizarlo a mano. Mi solución es la siguiente:

## 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() 

EDIT: Usted tendrá que modificar la expresión regular si hay etiquetas p en la macro que desea mantener. La expresión regular en el código anterior eliminará TODAS las etiquetas p.

+2

Gracias por su respuesta. Desafortunadamente, mi problema aparentemente no son los nuevos párrafos en el código generado _por mi macro_, pero esa confluencia inserta '

' _antes_ y '

' _after_ my macro, incrustando el texto anterior y el siguiente en nuevos párrafos. ¿Puedo cancelar también estas etiquetas? – MrTJ

+0

Eso es exactamente lo que hace la plantilla de arriba. Intentalo. – boileau

+0

¿Puedes explicar cómo "renderizar a mano"? – mrtsherman

Cuestiones relacionadas