Skip to end of metadata
Go to start of metadata

中文标题【写用户宏】

如果你想创建自定义的宏的话,用户宏能够帮你完成这个任务。这个可以在你系统中应用特定的操作,比如说应用自定义格式等。

用户用是在 Confluence 创建和和管理的,你需要有一定的编码基础才可以。

你需要具有系统管理员权限来创建和应用用户自定义宏。

本页中的内容:

相关页面:

创建一个用户宏

希望创建一个新的用户宏:

  1. 进入  > 基本配置(General Configuration) > 用户宏(User Macros
  2. 选择 创建一个用户宏(Create a User Macro
  3. 输入宏的一些详细信息(请查看下面列表)
  4. 单击 添加(Add)
宏详细信息字段描述
宏名称(Macro name宏的名字,将会出现在代码中。

可见(Visibility

这个选项控制谁可以在宏浏览器中查看这个宏或者自动完成功能。选项有:

  • 所有用户可见(Visible to all users)
  • 仅系统管理员可见(Visible only to system administrators)

请注意,如果你选择仅系统管理员可见的话,用户任然可以看到用在页面中输出的结果,宏的占位符也还是在编辑页面中出现的,这个仅仅在宏浏览器和自动完成的时候隐藏了。

所有宏的信息都是可以找到的,包括宏的标题,描述,参数名称和其他元数据。尽管宏只能被系统管理员查看到,也请不要在用户宏中定义任何敏感信和保密信息。

宏标题(Macro Title在宏浏览器和自动完成功能中出现的宏标题。
描述(Description这个描述信息将会出现在宏浏览器中。宏浏览器的查找将会对查找字段在宏标题和描述中的文字进行匹配。
分类(Categories为你的宏在宏浏览器中选择一个或多个分类。
图标 URL(Icon URL如果你希望宏浏览器为你的宏显示图标的话,输入绝对地址(例如 http://mysite.com/mypath/status.png)或相对于 Confluence base URL 的相对地址(例如:/images/icons/macrobrowser/status.png) 。
文档 URL(Documentation URL如果你的宏有文档的话,请在这里输入文档的 URL。
宏内容处理(Macro Body Processing

指定 Confluence 应该如何处理你的宏的内容。

宏的内容中包含了在 Confluence 页面中如何处理的信息。如果你的宏有一个内容,所有宏的内容将会在 $body 变量字段中可用。

处理宏内容字段选项包括有:

  • No macro body
    选择这个选项,如果你的宏没有任何内容的话。
  • Escaped 
    Confluence 将会添加在 HTML 标记中添加转义字符。如果你希望显示 HTML 标记在生产的页面中的时候,你可以使用转义字符。例如:如果内容为 <b>Hello World</b> 那么将会在生成页面中显示   <b>Hello World</b>。
  • Unrendered 
    内容中的 HTML 将会在模板输出之前进行处理。请确定模板中的 HTML 是非再生的。
  • Rendered 
    Confluence 将会对 HTML 宏内容的部分进行让浏览器进行解析。例如宏内容为 <b>Hello World</b> 这个内容将会显示 Hello World。

模板(Template

这里是你写的代码去确定宏应该是什么样子的。

  • 在宏模板中使用 HTML 和 Confluence 自定义 XML 元素。
  • 你可以使用  Velocity 模板语言。这里是有关 Velocity project 项目的相关信息。
  • 如果你的宏有 body 内容,你的宏可以将 body 的文本引用为 '$body'。
  • 每个参数变量必须有一个与之对应的元数据定义。在你的宏参数中使用 @param 来定义元数据。
  • 当使用参数传递信息,请参考 $paramXXX 在 'XXX' 的参数,是你定义 @param 元数据后来引用的参数。
  • 如果你的宏不能接受参数,请使用 @noparams

请查看 Writing User Macros 要么获得更多的信息和示例。

希望使用插件完成编辑?

如果你希望将你的自定义宏按照插件进行分发的话,请参考  User Macro plugin module 页面中的内容。如果你希望使用更加复杂,更加程序化的宏的话,你需要写成 Macro plugin 宏。

编辑一个用户宏

希望对一个用户宏进行编辑:

  1. 进入  > 基本配置(General Configuration) > 用户宏(User Macros
  2. 在相关的宏的边上,单击 编辑(Edit)
  3. 更新宏的详细信息
  4. 单击 保存(Save)

删除一个用户宏

希望删除一个用户宏:

  1. 进入  > 基本配置(General Configuration) > 用户宏(User Macros
  2. 当前系统中定义的用户宏将会完全显示出来
  3. 在相关的用户宏上,单击 删除(Delete

在删除一个用户宏之前,你应该查找使用了这个用户宏的所有页面和博客页面。如果你删除的用户宏还在页面中被引用了的话,你的用户将会在页面中看到 'unknown macro' 错误信息。

最佳实践

这个页面为你在创建用户宏的最佳实践中包含了一些小技巧和建议。

为你的宏添加一个简短的描述

我们鼓励你为你的宏在 模板(Template )添加一个备注的描述,可以参考下面的显示的内容:

## Macro title: My macro name
## Macro has a body: Y or N
## Body processing: Selected body processing option
## Output: Selected output option
##
## Developed by: My Name
## Date created: dd/mm/yyyy
## Confluence version: Version it was developed for
## Installed by: My Name

## Short description of what the macro does

在宏浏览器中展示你的参数

宏浏览器是为你用户使用配置你的宏的最简单的方式。你可以指定你的宏的分类,图标的连接定义在宏浏览器中为用户展示的信息的参数等。

为宏参数提供默认值

一般来说你不能保证用户能够完整的提供用户的参数,一个让宏进行校验是否收到了正确的参数的话,你可以在你的宏中指定参数并在后面使用。

请参考下面的示例,在这个宏中有 3 个参数,当用户不提供参数的时候,这些参数的默认值将会被使用。

#set($spacekey= $paramspacekey)
#set($numthreads= $paramnumthreads)
#set($numchars= $paramnumchars)

## Check for valid space key, otherwise use current
#if (!$spacekey)
  #set ($spacekey=$space.key)
#end

## Check for valid number of threads, otherwise use default of 5
#if (!$numthreads)
  #set ($numthreads=5)
#end

## Check for valid excerpt size, otherwise use default of 35
#if (!$numchars)
  #set ($numchars=35)
#end

考虑安全提示

我们建议你为你定义的宏进行一些权限方面的测试。例如,限制页面和空间权限来避免没有权限的用户可能的不经意间的显示。请查看 Writing User Macros 页面中的内容。

用户宏示例

 Hello World

下面示例显示了如何创建一个用户宏,在这个用户宏中显示文本 'Hello World!' 和任何用户在宏内容中输入的内容。

FieldValue
Macro namehelloworld
VisibilityVisible to all users in the Macro Browser
Macro TitleHello World
DescriptionDisplays "Hello World" and the macro body.
CategoriesConfluence Content
Icon URL可以设置为空
Documentation URL可以设置为空
Macro body processingRendered
Template

在模板字段中输入下面的内容 - 这个示例将会直接在页面中进行输出:

## @noparams
Hello World!
$body

如果你希望文本显示在相对的 AUI message class 的话,如下所示:

## @noparams
<div class="aui-message closeable">
Hello World!
$body
</div>

在页面中使用 'Hello World' 宏

现在你可以使用 Confluence 宏浏览器将这个宏添加到页面中了。或者在页面编辑器中输入 {hello 然后在宏建议列表中选择。


页面显示的结果是

 NoPrint

这个示例演示了如何创建一个用户宏,这个宏包括了在查看页面中显示的内容,但是不被打印。

FieldValue
Macro namenoprint
VisibilityVisible to all users in the Macro Browser
Macro TitleNo Print
DescriptionHides text from printed output.
CategoriesConfluence Content
Icon URL可以设置为空
Documentation URL可以设置为空
Macro body processingRendered
Template

在下面的模板字段中输入下面的代码

## @noparams
<div class="noprint">$body</div>

在界面中使用 'NoPrint' 宏

现在你可以在你的 Confluence 页面中添加 NoPrint 宏了。使用宏浏览器进行查找后使用,在宏中输入的文本将不会被打印,在网站上查看的页面如下。


让 PDF 导出能够识别 NoPrint 宏

请查看页面 Advanced PDF Export Customizations


 Color and Size

这个示例定义了如何向你宏中传递参数。我们将会创建一个字体样式宏,在这个宏中有 2 个参数,允许用户在这 2 个参数中指定宏中包含的字体的颜色大小。

FieldValue
Macro namestylish
VisibilityVisible to all users in the Macro Browser
Macro TitleStylish
DescriptionApplies colour and size to text.
CategoriesConfluence Content
Icon URL可以设置为空
Documentation URL可以设置为空
Macro body processingRendered
Template

在模板字段中输入下面的代码。如果你的宏要求一个或者多个参数的话,你可以使用变量 $param0 到 $param9 来调用它们。

## @param 0:title=colour|type=string
## @param 1:title=size|type=string
<span style="color: $param0; font-size: $param1">$body</span>

可选的,你也可以在你的宏中明确定义参数名。这些参数将会在$param<x> 中调用,其中 <x> 是你参数的名字。

## @param Colour:title=colour|type=string
## @param Size:title=size|type=string
<span style="color: $paramColour; font-size: $paramSize">$body</span>
 Formatted Panel

下面的用演示了如果还写一个用户宏,并在这个宏中创建一个格式化的面板,并且指定颜色。将会创建下面的面板:

(Title)


注意:这个面板的标题为空,如果你没有给这个面板标题参数的话。

FieldValue
Macro nameformpanel
VisibilityVisible to all users in the Macro Browser
Macro TitleFormatted Panel
DescriptionCreates a panel preformatted with specific colors
CategoriesFormatting
Icon URL可以设置为空
Documentation URL可以设置为空
Macro body processingEscaped
Template

在下面的模板字段中输入代码。请查看下面获得更多有关细节的解释。

## @param Title:title=Title|type=string|desc=Title
<ac:structured-macro ac:name="panel">
        <ac:parameter ac:name="titleBGColor">#ccc</ac:parameter>
        <ac:parameter ac:name="borderStyle">solid</ac:parameter>
        <ac:parameter ac:name="borderColor">#6699CC</ac:parameter>
        <ac:parameter ac:name="borderWidth">2</ac:parameter>
        <ac:parameter ac:name="titleColor">#000000</ac:parameter>
    <ac:parameter ac:name="title">$!paramTitle</ac:parameter>
    <ac:rich-text-body>$body</ac:rich-text-body>
</ac:structured-macro>

有关宏模板代码中的细节解释

下面为使用宏模板代码的的一些细节说明。

项目描述
## @param Title:title=Title|type=string|desc=Title

@param 为你的宏参数定义了元数据。

@param Title

这个参数被称为 "Title"。

title=Title

定义了参数标题,这个标题将会在宏浏览器中显示为 "Title"。

type=string

为参数文本字段定义了字段类型。

desc=Title

为宏浏览器定义了描述的参数。

<ac:structured-macro ac:name="panel">

这个被称为 Confluence Panel Macro 宏。

最容易找到 Confluence 宏名称的的方法是通过查看在页面中包含有宏的存储格式。你将会需要 Confluence 管理员权限来查看存储的格式。

<ac:parameter ac:name="titleBGColor">#ccc</ac:parameter>
<ac:parameter ac:name="borderStyle">solid</ac:parameter>
<ac:parameter ac:name="borderColor">#6699CC</ac:parameter>
<ac:parameter ac:name="borderWidth">2</ac:parameter>
<ac:parameter ac:name="titleColor">#000000</ac:parameter>

为这个宏设置参数:背景颜色,边界样式,边界颜色,边界宽度和标题颜色。

希望在 Confluence 宏发现擦书的名称,请查看上面描述的中存储的格式。

<ac:parameter ac:name="title">$!paramTitle</ac:parameter>

输入存储在 'Title' 参数中变量,这个部分将会显示为宏的标题。

! 标记告诉宏这部分显示为空,当 "Title" 参数中没有数据的话。

<ac:rich-text-body>$body</ac:rich-text-body>

用户可以输入保存在宏内容中的数据。这行将会启用宏方法存储在内容中的数据。

</ac:structured-macro>

这个标记标记宏的结束。


  • No labels