2016-11-28 131 views
0

我有我需要以這樣的方式是,只要用戶在它應該在以下方式工作覆蓋Liferay的默認搜索功能的要求:Liferay的搜索Portlet定製

已經有一些第三方RESTful服務是可用的,它返回任何搜索關鍵字的結果,假設搜索關鍵的工作是「測試」,如果我們將「測試」傳遞給第三方服務,它將以json的形式返回結果,我們需要在其中顯示搜索結果頁面。

我打算通過以下方式實現此目的,但想知道你們是否正在做正確的方式。

步驟1:我將創建一個鉤項目,我將覆蓋main_search_result_form.jsp格式化結果頁。

第2步:我將創建一個Indexer,我將實現並使用search關鍵字調用restful服務,然後返回結果的json對象。

步驟3:我將得到JSON在main_search_result_form.jsp,我將基於該JSON輸出

像格式化頁面知道我的做法是否正確

+0

請指定您正在使用的Liferay版本,並且您想要使用您的自定義版本完全替換Liferay的搜索功能,或者您想同時擁有這兩個版本(部分網站將其中一個和另一個部分分開)? –

+0

@MilenDyankov我正在使用'Liferay6.2GA6版本' –

+0

@MilenDyankov我想用我自定義的一個完全替代Liferay的搜索功能 –

回答

1

我的建議是創建一個新的portlet,並且由於以下原因不掛鉤現有的搜索portlet:

- Liferay搜索portlet的力量是使用Apache Lucene搜索引擎來搜索和索引門戶內容,e實體...因爲你不想從門戶網站搜索結果,它將無用的鉤住它。

- 搜索portlet jsp的編碼時使用了某種渲染邏輯,可能會與您的邏輯有所不同(特別是json結果),所以我認爲您必須對這些jsp進行大的修改,這將是一項開銷。

- 您的需求相對簡單(使用搜索詞參數調用Web服務獲取結果並渲染它們)。

所以我認爲一個簡單的Liferay MVC portlet將會是您更好的選擇。

與你定製搜索portlet更換主題默認搜索

不,你並不需要一個鉤子。 您可以通過編輯您的portal_normal文件如下更換主題搜索字段:

更換

$theme.journalContentSearch() 

通過

## Set the portlet preferences if you need ## 
#set ($VOID = $velocityPortletPreferences.setValue('display-style', '1')) 
#set ($VOID = $velocityPortletPreferences.setValue('portlet-setup-show-borders', 'false')) 

#set ($instanceId = 'A2R4') 
#set ($portletId = 'YOUR_CUSTOM_SEARCH_PORTLET_ID') 
#set ($myPortlet = "${portletId}_INSTANCE_${instanceId}") 

$theme.runtime($myPortlet, '', $velocityPortletPreferences.toString()) 

#set ($VOID = $velocityPortletPreferences.reset()) 
+0

感謝您的回覆..........可以說我創建了一個自定義portlet,包含一個serach框和它的實現,但是我們如何用主題搜索框替換,我們是否需要編寫一個鉤子來讓它在主題中用我們的定製portlet取代 –

3

Lifray使用了很多其他的事情不是搜索(實際指數)只是搜索portlet。如果只替換它的一小部分,可能會停止工作。

好消息是Liferay具有可插拔搜索功能。在默認情況下,它使用嵌入式Lucene,但可以用Solr替換它。例如,您可以查看solr-web插件,以瞭解它是如何實現的。特別是看到豆在solr-spring.xml

這表示,與搜索配置有線,我想你有幾個選項才達到你想要什麼:

  • 全面落實基於可自定義的服務索引的新搜索插件並搜索Liferay預計將被索引的每個實體。
  • 實現一個新的搜索插件,將「您的」搜索和「內部」查找/索引併發送請求之間以某種方式區分不同的地方
  • 實現自己的Portlet,你想要做什麼Liferay的搜索獨立的