확인. 첫 번째 단계는 [b] html/taglib/search/start.jsp [/ b]에 후크를 배치하는 것이 었습니다. 검색 할 개인 페이지를 정의하기 위해 추가 id 매개 변수를 전달했습니다.
<input name="<%= namespace %>keywords" size="30" title="<liferay-ui:message key="search" />" type="text" value="<%= HtmlUtil.escapeAttribute(keywords) %>" />
<input name="<%= namespace %>groupid" value="0" type="hidden" />
<select name="<%= namespace %>scopeId" title="<liferay-ui:message key="scope" /> ">
<option value="0" <%= selected == 0 ? "selected" : ""%>><liferay-ui:message key="everything" /></option>
<option value="1" <%= selected == 1 ? "selected" : ""%>>Новости</option>
<option value="2" <%= selected == 2 ? "selected" : ""%>>Сотрудники</option>
<option value="3" <%= selected == 3 ? "selected" : ""%>>Новому сотруднику</option>
<option value="4" <%= selected == 4 ? "selected" : ""%>>Корпоративные правила</option>
<option value="5" <%= selected == 5 ? "selected" : ""%>>Продукты</option>
<option value="6" <%= selected == 6 ? "selected" : ""%>>Wiki</option>
<option value="7" <%= selected == 7 ? "selected" : ""%>>События</option>
<option value="8" <%= selected == 8 ? "selected" : ""%>>Форум</option>
</select>
두 번째 단계는 [b] html/portlet/search/main_search.jsp [/ b]에 연결하는 것입니다. 저기 [b] ALL [/ b] 검색 결과를 필터링하고 [b] select 필드 [/ b]의 요청에 의해 필요한 검색 결과 만 표시하려고했습니다. 다른 id를 가진 non instanceble 사용자 정의 포틀릿에서는 portletId로 필터링하고 결과를 표시하는 것이 좋습니다.
Hits hits = indexer.search(searchContext);
List<Document> documents = new ArrayList<Document>();
documents = hits.toList();
...
if (documents.size() != 0) {
List<Document> toDelete = new ArrayList<Document>();
for (Document document : documents) {
String id = document.getPortletId();
id = document.get(Field.PORTLET_ID);
switch (scopeId) {
case 0:
break;
case 1:
if (!id.equals(NEWS_PORTLET_ID)) {
toDelete.add(document);
}
break;
....
if (toDelete.size() != 0) {
documents.removeAll(toDelete);
hits.setDocs(documents.toArray(new Document[documents.size()]));
if (documents.size() == 0) {
hits.setLength(0);
}
}
모두 괜찮습니다. 그러나 내 페이지 중 3 개에는 모두 자산 게시자 포틀릿 (portletId = 15)이 있으므로 포틀릿 ID로 필터링하면 3 페이지 모두에서 결과를 얻을 수 있습니다. 어쩌면 나는 문서가 속한 포틀릿의 인스턴스 ID를 얻을 수 있습니다. 또는 검색을 수행 할 다른 방법이있을 수 있습니다.
Atm 제 CustomJournalArticleIndexer를 구현하려고합니다. 포털의 인스턴스 ID가 포함 된 필드를 Indexer에서 추가합니다. 그래서 나중에 main_search.jsp에서 나는 document.getPortletInstanceId와 같은 것을 할 수 있고 그것을 내 요청의 scopeId와 결합 된 상수와 비교할 수있다.
여기에 어떤 제안이 있습니까? 감사합니다 ... 러시아에서 사랑을!
Liferay 검색은 일반적으로 애셋이 아닌 페이지 범위로 이동하며 페이지에 표시 될 수 있습니다. 나는 왜 어떤 사람이 "이"페이지를 검색하는지 알지 못한다. Ctrl-F는 내가 현재 페이지에서 검색하고 싶다면 나를 위해 일한다. 서버 쪽 검색 엔진만큼 좋다. –
예를 들어, 뉴스 페이지를 여러 개 만들었습니다 (페이지 당 뉴스 5 개로 제한되며 다음/이전 버튼이 있음). Ctrl + F는이 방법으로 작동하지 않습니다. – localhost