坑爹的 xwiki 二次开发

boss提出一个需求,要对xwiki进行二次开发,建立一系列的模板来满足不同团队的文档需求。

其中,需要在页面上实现一级tag的选择,然后根据一级tag去display二级tag,并且在将相应的tag加到tag云中。

为了这件事情,我调研了2天,其中各种文档缺失 -- xwiki的document就是一坨乱七八糟,杂乱无章,除了不停的search,没有任何办法。

调研结果:

能不能做呢 - 肯定是可以的,好不好做,当然是不好做的:(

基本思路如下-

1. 要为每个团队建立一个space,该space有其特定的dataType,并生成class

该dataType能指定properties - String,Txtbox,Data,email,可以生成特定的documentSheet,并将Sheet生成Template,在Administrator页面可以将Template发布出来,

用户就可以根据指定的template来建立page。

2. 需要做以上的事情有没有可以参考的文档呢 - 幸运的事, 有一个从流程上知道你一步步如何建立dataType到最后发布的tutorial,不幸的事情,该文档充满了陷阱,还有一个大错误。。。

http://platform.xwiki.org/xwiki/bin/view/DevGuide/FAQTutorialManual

陷阱1 - 为啥我的Properties显示不到template?

在create the Authring Template这节,我用的 xwiki5.1,完全不能自动生成template,而且,据说应该把doucument加入到template的语句

在create the Authring Template这节,{{include document="FAQ.FAQClassSheet"/}},就是个错误的语句, 之前我们创建的Sheet不叫 FAQ.FAQClassSheet,而是 FAQ.FAQSheet。

所以你需要手工的将这个code加入template {{include document="FAQ.FAQSheet"/}}

陷阱2- Object Edit Mode

嘛叫ObjectEditMode??为毛我看不见,只能找到Edit,好吧,又是陷阱吧。原来在User Preference里面你需要选择Edit的类型为Advanced,这个时候你才能看到这个Object Edit Mode.

陷阱3- Script的学习文档咋这简单

好吧,建立好了模板,咋处理上面的各个属性呢。。到了脚本出马的时候了。。。。但是脚本怎么写,有没有学习资料啊??

好不容易找到了Velocity的Macro文档

http://extensions.xwiki.org/xwiki/bin/view/Extension/Velocity+Macro

坑爹t又出来了。。一个语言才2个例子,你叫我咋学习??咋学习?咋学习???

陷阱4- 为毛例子Code不work??

好吧,各安天命吧,大家能做,我也能,xwiki有个Extension的库,我一个个的去看吧。总是有人才在里面贴了不少代码,我就抄吧~

好不容易找到一篇 Rename Tag,好像和我要做的事情类似 - http://extensions.xwiki.org/xwiki/bin/view/Extension/Rename+Tags,

看人家说的 - 多简单,建一个wiki page,把代码一贴,嘿嘿,submit一下,我也看看啥效果。。

Follow these steps:

  • Create a new wiki page
  • Edit it and save it with the present code
  • Insert the name of the tag you want to change
  • Insert the new name
  • Submit

!!!!为毛代码在我这里不work? 贴一遍,再贴一遍,好吧,统统不work。好吧,你确定这不是来耍我来玩的么??调研来,调研去,发现问题是- 人家代码是对的,贴到xwiki把代码给转码了所有的 {{}}都被去掉,还将#变成了number。。。 我彻底的服气了。。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

以上吐槽结束,还是把我自己调好的draft代码pia上吧,挺弱的,但算是完成了boss需要的功能的一小半 -下一步就是html的活,吧radio下面加入selection box。。胜利可期了。。


code:

{{velocity}}

#if ("$!request.Fruit" != "")
#set($value= $request.getParameterValues('Fruit'))
*$request.Fruit
#end

{{html}}

 
这篇文章的分类?

 
 
 
 
 
 

{{/html}}

#set ($newTag = "")
#if($request.Fruit)
#set ($newTag = $request.Fruit)
#end
#set ($taglist = $doc.getObject("XWiki.TagClass").get("tags"))

$doc.getObject("XWiki.TagClass").set("tags",$newTag);
#set ($discard = $doc.save())
#set ($taglist = $doc.getObject("XWiki.TagClass").get("tags"))

#set($class = $doc.getObject('FAQ.FAQClass').xWikiClass)
#foreach($prop in $class.properties)
; $prop.prettyName
: $doc.display($prop.getName())
#end

{{/velocity}}



你可能感兴趣的:(xwiki)