2013-09-04 7 views
1

Мы создали макрос пользовательского пользователя, который создает таблицу дочерних страниц, эта таблица также заполняется информацией, такие как последнего обновления, версия, актуализация и т.д.Confluence Проблема с экспортом

При экспорте страницы за столом заполняется, однако при экспорте пространства таблица пуста.

Код ниже

## 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 ($ CurrentPage)
с
#process ($ spaceHome)

поэтому я думаю, что проблема в пространстве экспорта следующая команда не работает
#set ($ CurrentPage = $ action.page)

Кто-нибудь есть какие-либо идеи о том, что я мог бы использовать вместо этого?

+0

Да проблема должна быть, что $ CurrentPage вар не определяются для макроса, пока страница не просматриваются. На сколько страниц вы используете макрос? Это не отличное решение, но вы можете создать уникальный макрос для каждой страницы, на которой он будет использоваться, и определить страницу более конкретно. – MNRSullivan

+0

Это будет использоваться в нескольких местах в слиянии, поэтому я не думаю, что это будет подходящее решение. –

+0

Я не могу придумать, как правильно определить переменную $ currentPage, если загруженная страница не была загружена. Удачи! – MNRSullivan

ответ

0

$action Величина скорости относится к текущему действию. В ситуации, когда вы выполняете экспорт пространства, $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>