:::

DSpace擴增文件編輯功能

6月 01, 2009 0 Comments Edit Post

DSpace遞交文件與編輯文件不同的緣由

image image

每個用過DSpace的人都會有個疑惑:「DSpace的遞交文件相當地好用,但為什麼編輯文件這麼難用?」上方左圖是原本的遞交文件時的介面,我們可以把欄位分頁顯示,也可以依照input-type的設定顯示出「onebox」、「textarea」等多種樣式的欄位。反觀上圖右邊的編輯文件頁面,完全沒有遞交文件時的功能,而只有乏味的DC名稱、單調的欄位,甚至連說明都沒有。

為什麼會這樣設計呢?這就要提到DSpace的item-mapper功能。item-mapper可以允許一個item出現在多個collection,以減少重複建置item的浪費。然而遞交文件時設定的呈現格式是依照collection在跑的,因此當一份item重複在多個不同的collection出現時,多種不同的遞交文件設定會造成混亂,所以到最後乾脆簡單地以欄位統一呈現就好。

系統設計者這麼想,但是使用者可不是這麼想的啊。到頭來,還是要由程式設計師去解決這個問題。

image image

左邊圖片是改進原本顯示文件display-item.jsp所增加的「編輯」按鈕,按下去之後會直接進入右邊圖片的編輯文件edit-item-form.jsp。實際上,編輯文件已經跟遞交文件的畫面差別無幾,既能保留編輯文件原有的功能欄位,又能夠納入遞交文件時表單的好處。

這一份文件便是說明如何修改原本的DSpace,達到擴增編輯文件的功能。


安裝檔案

請將以下檔案下載,並放到指定的資料夾當中:

  • webapp.zip
    [dspace-source]/dspace/modules/jspui/src/main/webapp當中
    ※裡面有extension跟tools兩個資料夾喔!因為exntension很多功能都更新過,所以請覆蓋掉原本的檔案吧。
  • input-forms.dtd 
    [dspace]/config/input-forms.dtd
    ※幫page多加了「label」跟「hint」兩種屬性
  • SubmissionUtil.java
    ItemEditButton.java
    [dspace-source]/dspace-jspui-api/src/main/java/org/dspace/app/webui/util/SubmissionUtil.java
    [dspace-source]/dspace-jspui-api/src/main/java/org/dspace/app/webui/util/ItemEditButton.java

新增語系檔

請加入以下語系檔設定:

jsp.extension.xmlmetadata.required-tip = \u5fc5\u9808\u586b\u5beb
jsp.extension.xmlmetadata.check-required = \u60a8\u6709\u8868\u55ae\u5c1a\u672a\u586b\u5beb\u5b8c\u6210\uff0c\u662f\u5426\u8981\u7e7c\u7e8c\uff1f
jsp.extension.xmlmetadata.date-picker = \u8acb\u9ede\u6b64\u9078\u64c7\u65e5\u671f
jsp.extension.xmlmetadata.date-picker = \u8acb\u9ede\u6b64\u9078\u64c7\u65e5\u671f
jsp.extension.xmlmetadata.delete-confirm = \u78ba\u5b9a\u8981\u522a\u9664\uff1f
jsp.extension.xmlmetadata.delete-confirm = \u8868\u793a\u5fc5\u9808\u586b\u5beb
jsp.extension.xmlmetadata.not-has-multiple-files = \u5fc5\u9808\u70ba\u300c\u6587\u4ef6\u7531\u4e00\u500b\u4ee5\u4e0a\u7684 \u6a94\u6848\u6240\u7d44\u6210\u300d\uff01

jsp.tools.edit-item-form.now-editing-form-name1 = \u60a8\u73fe\u5728\u6b63\u5728\u7de8\u8f2f
jsp.tools.edit-item-form.now-editing-form-name2 = \u905e\u4ea4\u7a0b\u5e8f
jsp.tools.edit-item-form.index = \u6587\u4ef6\u8aaa\u660e
jsp.tools.edit-item-form.edit-metadata-title = \u7de8\u8f2f\u6587\u4ef6
jsp.tools.edit-item-form.edit-bitstream-title = \u7de8\u8f2f\u6a94\u6848
jsp.tools.edit-item-form.preview = \u7522\u751f\u9810\u89bd\u6a94\u6848
jsp.tools.edit-item-form.update-and-back = \u66f4\u65b0\u4e26\u56de\u5230\u6587\u4ef6
jsp.tools.edit-item-form.add-confirm = \u4e4b\u524d\u8a72\u6b04\u4f4d\u4e26\u6c92\u6709\u503c\uff0c\u8acb\u554f\u662f\u5426\u8981\u65b0\u589e\u6b64\u6b04\u4f4d\uff1f

加入「編輯」按鈕

這個動作主要是要修改ItemTag.java,這個修改的版本是繼我之前撰寫的「DSpace擴增MediaFilter格式」,如果你已經作過之前版本的動作,那麼可以下載我撰寫好的ItemTag.java

  • ItemTag.java
    [dspace-source]/dspace-jspui-api/src/main/java/org/dspace/app/webui/jsptag/ItemTag.java

如果不是的話,那麼請看以下修改步驟,一一你需要修改的地方。

因為「編輯」按鈕依附著Item物件,所以通常會加入在display-item.jsp或ItemTag.java當中。以下舉例是以ItemTag.java為例子。

第一步:引用「ItemEditButton.java」

請在開頭輸入引用語法,Java的引用語法如下:

import org.dspace.app.webui.util.ItemEditButton;

JSP的引用語法如下:

<%@ page import="org.dspace.app.webui.util.ItemEditButton" %>
第二部:使用getJavaScript()插入JavaScript

getJavaScript()已經被我寫成靜態方法(static)了,使用方式如下:

out.println(ItemEditButton.getJavaScript());

只能夠插入一次,插入第二次的話JavaScrip會出錯。因為懶得另外撰寫JavaScript檔案,所以用這種偷懶方法。

第三步:使用getString()來插入按鈕

以下是getString的說明:

getButton()
public static String getButton(PageContext pageContext, String innerTEXT, String schema, String element, String qualifier)
回傳「編輯」按鈕的HTML程式碼字串。
參數:
pageContext - 系統要從中查詢request的admin_button屬性,看是否包含了允許顯示管理標籤的資訊,如果沒有權限,則不會顯示按鈕
innerTEXT - 顯示在按鈕上的標籤,推薦使用語系檔的「jsp.general.edit.button」
schema - 該欄位的schema
element - 該欄位的element
qualifier – 該欄位的qualifier,沒有的話填入null
回傳:
按鈕的HTML程式碼字串 - 按鈕當中包含了JavaScript的事件器。如果沒有權限,則會回傳空字串。

用法舉例:

                	out.println(ItemEditButton.getButton(pageContext
                		, LocaleSupport.getLocalizedMessage(pageContext, "jsp.general.edit.button")
                		, values[i].schema
                		, values[i].element
                		, values[i].qualifier
                	));

利用getButton()方法,你可以自訂插入「編輯」按鈕的位置囉!

幫遞交程序的每一頁加上標題

image

 

請注意到上圖中的ProgressBar,原本只有「描述」的頁面名稱,現在可以自訂為任意你要的名稱了。連帶的下面也可以增加每一頁特定的敘述。

設定方法很簡單,請修改[dspace]/config/input-forms.xml。幫page加上兩種屬性:

  • label:顯示在ProgressBar上的名稱,字數建議不要超過五字。
  • hint:顯示在下面的指示,如果你要在裡面使用HTML,就要用脫逸字元「&lt;」取代「<」、用「&gt;」取代「>」、用 「&quot;」取代「'”」

舉例來說,你可以這樣設定:

<page number="1" label="第一頁標題" hint="這是我們可以自己加進去的&lt;strong style=&quot;color:red&quot;&gt;提示&lt;/strong&gt;喔!">

其他頁碼的設定,也可以如法炮製。

重新編譯DSpace

方法不再贅述。可以參考之前的DSpace相關文件


終於作完了,這功能做了一個月有吧,邊帶人一邊作,非常累。繼續趕工下一個功能。

<-- Post Catalog -->

0 意見:

留言工具: