1

我们创建了一个自定义用户宏,它创建了一个子页面表,该表还填充了上次更新、版本、更新者等信息。

导出页面时,表格被填充,但是当您导出空间时,表格为空。

代码如下

## Macro title: Page Data
## Macro has a body: N
## Body processing: n/a
## Output: HTML
##
## Developed by: Brian Mitchell
## Date created: 06/27/2013
## @noparams

#set ($PageTitle = $content.displayTitle)
#set ($PageVersion = $content.version)
#set ($PageDate = $action.dateFormatter.formatGivenString("dd MMM yyyy",    $content.lastModificationDate))
#set ($PageAuthor = $content.lastModifierName)
#set ($pageListArray = [])
#set ($currentPage = $action.page)
#set ($spaceHome = $space.getHomePage())

#macro ( process $rp )
 #set ($pagelist = $rp.getSortedChildren() )  ## returns List<Page>
   #foreach( $child in $pagelist )
     #set($p = $pageListArray.add( $child ) )
       #if( $child.hasChildren() )
          #process ( $child )
    #end
 #end
#end

    #process ($currentPage)


    <h1> Confluence Page Versions </h1>
    <table class="confluenceTable">
    <tbody>
   <tr>
    <th class="confluenceTh">Page Title</th>
    <th class="confluenceTh">Page Version</th>
     <th class="confluenceTh">Date</th>
     <th class="confluenceTh">Changed By</th>
    </tr>

    <tr>
    <td>$PageTitle</td>
     <td><a href=http://confluence.mango.local/pages/viewpreviousversions.action?pageId=$content.getIdAsString()>$PageVersion</a></td>
      <td>$PageDate</td>
     <td>$PageAuthor</td>
     </tr>


      #foreach( $child in $pageListArray)   ## child is of type Page
        <tr>
      <td class="confluenceTd">$child.getTitle()</td>
        <td class="confluenceTd"><a href=http://confluence.mango.local/pages/viewpreviousversions.action?pageId=$child.getIdAsString()>$child.getVersion()</a> </td>
        <td class="confluenceTd">$action.dateFormatter.formatGivenString("dd MMM yyyy", $child.getLastModificationDate())</td>
          <td class="confluenceTd">$child.getLastModifierName()</td>
  </tr>
            #end

         </tbody>
        </table>

当我编辑代码以将空间的全部内容放入数组中时,如何在导出时填充表格

所以我用#process ($spaceHome) 替换 #process (
$currentPage )

所以我认为问题出在空间导出以下命令不起作用
#set ($currentPage = $action.page)

有人对我可以使用什么有任何想法吗?

4

1 回答 1

0

$actionVelocity 变量是指当前正在执行的操作。在您执行空间导出的情况下,$action指的是导出空间操作而不是导出页面操作,并且由于导出空间操作没有page可从操作对象获得的变量,因此您$action.page不会返回任何内容。

但是,您很幸运:导出空间功能确实传递了正在导出的当前页面的上下文,并且您已经在使用它了!$content指的是要导出的 ContentEntityObject,这实际上与您尝试从中获取的内容相同$action.page

要修复您的示例,只需调整对#process宏的调用以使用$content. 在 Confluence 5.5 上导出整个空间时,以下内容适用于我:

## Macro title: Page Data
## Macro has a body: N
## Body processing: n/a
## Output: HTML
##
## Developed by: Brian Mitchell
## Date created: 06/27/2013
## @noparams

#set ($PageTitle = $content.displayTitle)
#set ($PageVersion = $content.version)
#set ($PageDate = $action.dateFormatter.formatGivenString("dd MMM yyyy",    $content.lastModificationDate))
#set ($PageAuthor = $content.lastModifierName)
#set ($pageListArray = [])
## #set ($currentPage = $action.page)
#set ($spaceHome = $space.getHomePage())

#macro ( process $rp )
 #set ($pagelist = $rp.getSortedChildren() )  ## returns List<Page>
   #foreach( $child in $pagelist )
     #set($p = $pageListArray.add( $child ) )
       #if( $child.hasChildren() )
          #process ( $child )
    #end
 #end
#end

    #process ($content)


    <h1> Confluence Page Versions </h1>
    <table class="confluenceTable">
    <tbody>
   <tr>
    <th class="confluenceTh">Page Title</th>
    <th class="confluenceTh">Page Version</th>
     <th class="confluenceTh">Date</th>
     <th class="confluenceTh">Changed By</th>
    </tr>

    <tr>
    <td>$PageTitle</td>
     <td><a href=http://confluence.mango.local/pages/viewpreviousversions.action?pageId=$content.getIdAsString()>$PageVersion</a></td>
      <td>$PageDate</td>
     <td>$PageAuthor</td>
     </tr>


      #foreach( $child in $pageListArray)   ## child is of type Page
        <tr>
      <td class="confluenceTd">$child.getTitle()</td>
        <td class="confluenceTd"><a href=http://confluence.mango.local/pages/viewpreviousversions.action?pageId=$child.getIdAsString()>$child.getVersion()</a> </td>
        <td class="confluenceTd">$action.dateFormatter.formatGivenString("dd MMM yyyy", $child.getLastModificationDate())</td>
          <td class="confluenceTd">$child.getLastModifierName()</td>
  </tr>
            #end

         </tbody>
        </table>
于 2014-05-01T15:20:07.577 回答