坑爹的 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}}
<form action="" method="post"> 
這篇文章的分類?<br /><br /> 
<label><input name="Fruit" type="radio" value="測試" />測試</label> 
<label><input name="Fruit" type="radio" value="開發" />開發</label> 
<label><input name="Fruit" type="radio" value="產品" />產品</label> 
<label><input name="Fruit" type="radio" value="解決方案" />解決方案</label> 
<label><input name="Fruit" type="radio" value="其它" />其它 </label> 
<input type="submit" value="Submit">
</form>

{{/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}}




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com