2009年2月5日 星期四

如何啟動 TWiki Debug 模式

這篇的另一個標題是「TWiki Plugin 讀取和設定 Preference 的方法」,因為要成功地啟動 TWiki Debug 模式,得弄清楚 Preference 設值和讀值的方式才行。

我想這樣的標題就和有人寫了篇《The Amazon.com Customer Service Phone Number》一樣蠢,但實情就是如此糟。一位網友完全道出我摸索這過程的心聲:

TWIKI is SO DAMN CONFUSING on how to debug. It has taken me 4 hours of reading everything and all the docs and I still don’t understand how to turn on debugging. I set DEBUG = 1 in twiki/bin/view/TWiki/ExcelImportExportPlugin, like described in another place (that took me hours to find) http://twiki.org/cgi-bin/view/Support/HeadLinePluginDebugLog

So, the plugin does not work. Twiki documentation assumes you have a PHD in Twiki configuration in order to debug. Seriously it is so confusing. Please someone point out where the docs clearly state where you turn on/off plugin configurations? I have seen docs that say “you do it in configuration” FALSE, you only turn on or off plugins there (and that took me 2 hours to find after installing the plugin and wondering why it did not work)

Will someone please take the to write some documentation that makes sense?

JeffEller - 30 Nov 2007

問題原因在於 TWiki plugin 的變數設法和取法有兩種,得先弄清楚 plugin 作者是用那個方式取變數值,才有可能把值傳到 plugin 裡。

TWiki 設變數方式很簡單,在任何一頁裡寫如下的 wiki code 即可,存檔後立即生效(注意 * 前有三個空白,後有一個空白):

1
   * Set VAR = VALUE

當這行 wiki code 寫在 TWiki.TWikiPreference 時,就是全站都讀得到,TWiki script 可透過如下的方式取得值並存在 $preferenceVar 裡:

1
$preferenceVar = TWiki::Func::getPreferencesValue('VAR');

然而,Plugin 有另一個讀值的方法,Plugin 可以用如下的 code 取值:

1
2
$preferenceVar = TWiki::Func::getPluginPreferencesValue('VAR');  
$preferenceVar = TWiki::Func::getPreferencesValue('PLUGINNAME_VAR'); # 效果同上行

用 getPluginPreferencesValue 讀到的變數名稱,實際上是對應到 PLUGINNAME_VAR,比方說在 EditTablePlugin 裡執行上面這行 code,讀到的是 EDITTABLEPLUGIN_VAR,所以得在 TWiki.TWikiPreference 寫成:

1
   * Set EDITTABLEPLUGIN_VAR = VALUE

或是在 TWiki.EditTablePluginTopic 寫成:

1
   * Set VAR = VALUE

總而言之,最保險的作法是稍微 trace plugin code,確定它怎麼輸出除錯訊息,得設那個變數名稱才能啟動它,以及它用那個函數取得 preference variable。設對的話會立即生效,也就是將除錯訊息寫入 twiki/data/debug.txt 裡。Code 的改變也是立即在下次讀網頁時生效。

附帶一提,我改 code 時犯了兩個小錯,結果一直沒有效果(也沒看到錯誤訊息)。其一是行末忘了打分號(寫 Python 的習慣...);其二是我在 variable name 後面不小心多加了一個空白,即「getPluginPreferencesValue(’VAR ‘);」,結果就沒取到 ‘VAR’ 的值,浪費了我不少時間啊。

備註

Foswiki ReleasePlan 上指出,本季會出 1.1 版,提高 Foswiki 的品質,我想等那之後再轉用 Foswiki 吧。新版 WYSIWYG 修了一些 bug,而且 NatSkin 很帥,超想用的啦。

沒有留言:

張貼留言