XWiki AppWithinMinutes 在显示中添加自定义速度脚本

XWiki AppWithinMinutes add custom velocity script on display

我是 XWiki 的新手,不是 Java 开发人员。我想为具有 OS、环境等属性的服务器列表开发一个简单的 AppWithinMinutes 应用程序(让我们称之为 ServerCatalog)。这都是可行的。我可以从 AppWithinMinites UI.
开发它 我还开发了一个按标签列出所有页面的宏。

例如,当有人在我的 ServerCatalog 中创建一个条目时,说 SERVERD56 其中 D 代表开发环境。
当我们显示该条目时,我还想执行我开发的宏,以便它可以列出与标签 SERVERX56.
匹配的所有页面 请注意,我将 D 替换为 X 因此在执行宏之前,我想操作该页面标题并删除环境前缀(在本例中为 D 用于开发环境)和 X.

我希望清楚我想要完成的事情。如有不明之处请告知。

如果有人可以帮助我,我将不胜感激。

编辑:
正如 Eduard Moraru 所建议的那样,我尝试了以下操作:

我创建了一个名为“PageListByTag”的自定义宏。 由于 python 对字符串操作有更多的控制权,我在 ServerCatalogSheet

的末尾添加了以下内容
.
.
.
.
{{/html}}
{{/velocity}}


{{python}}
title = document.getTitle()
newTitle = title[:6] + "X" + title[6+1:]
print(newTitle)
{{/python}}

它有几个问题..

  1. 我的 html 标签已经结束。我不能再向其中注入任何新内容了
  2. 我无法在 velocity 标签内添加 python 代码,因为 XWiki 不允许嵌套脚本
  3. 如果我想使用 python
  4. ,我仍然不知道如何在 python 代码中调用我的宏

如果我可以使用速度替换字符串中的第 6 个字符,那么一切正常。我可以在速度脚本中使用宏,因为它在 html 边界内。

据我了解,您想自定义显示应用程序条目时使用的应用程序的“sheet”。

如果您查看文档中关于自定义的部分,您会得到很多关于您应该查看的地方的起点:

https://extensions.xwiki.org/xwiki/bin/view/Extension/App%20Within%20Minutes%20Application#HCustomization

这一行会很有趣(还有上面关于 XWiki 应用程序如何工作的链接):

The sheet, which is used to display and edit application entries (e.g. HolidaySheet)

在您的情况下,要自定义的文档(在 wiki 语法模式下编辑)应该是 ServerCatalog.Code.ServerCatalogSheet

在该文档中,您有 AWM 自动生成的代码,您可以向其中添加对宏的调用。

## AWM generated code...
...

## Customization:
{{displayAssociatedPages /}}

然后,在这个宏中(在本例中称为 displayAssociatedPages),您可以执行如下操作:

{{velocity}}
#set ($title = $doc.title)
## OR #set ($title = $doc.name), depending if your pages have titles

#if ($title.startsWith('SERVERD'))
  #set ($tag = $title.replaceFirst('SERVERD', 'SERVERX'))
  ##
  ## We can reuse and customize this snippet: https://snippets.xwiki.org/xwiki/bin/view/Extension/Display%20pages%20with%20a%20specific%20tag/
  ##
  #set ($references = $xwiki.tag.getDocumentsWithTag($tag))
  #foreach($reference in $references)
    #set ($document = $xwiki.getDocument($reference))
    #set ($label = $document.getTitle())
    [[$label>>$reference]]
  #end 
#end
{{/velocity}}

API 文档和更多信息位于 https://www.xwiki.org/xwiki/bin/view/Documentation/DevGuide/API/

此外,您应该明白,一旦您自定义了 AWM 应用程序,您在使用 AWM 本身编辑它时应该小心。例如,如果您添加一个新字段 AFAIK,您可能会冒着对 sheet 进行自定义的风险,如上例所示,被覆盖,因此您应该从文档历史记录中恢复它们并 re-apply 它们。