Message Boards
DXP 7.1: Fragment Changes to Filter Search Results
Gopal Prasad Satapathy, modified 4 Years ago.
DXP 7.1: Fragment Changes to Filter Search Results
Junior Member Posts: 51 Join Date: 3/29/18 Recent Posts
Hello,
My intention is to exclude images from search result when it is performed from default search bar. created a web fragment and making following changes inside /src/main/resources/META-INF/resources/search/results/view.jsp
List<Document> documents=searchResultsPortletDisplayContext.getDocuments();
List<Document> filteredDocuments = documents.stream()
.filter(doc -> !(doc.hasField("extension")&& doc.getField("extension").getValue().matches("jpg|jpeg|png")))
.collect(Collectors.toList());
searchResultsPortletDisplayContext.setDocuments(filteredDocuments);
Have verified that filteredDocuments contain only the results without images. But the result is not getting impacted even after searchResultsPortletDisplayContext.setDocuments(filteredDocuments); . Following is the complete code.
<%@ page import="com.liferay.portal.kernel.language.LanguageUtil" %><%@
page import="com.liferay.portal.kernel.util.HtmlUtil" %><%@
page import="com.liferay.portal.kernel.util.WebKeys" %><%@
page import="com.liferay.portal.search.web.internal.result.display.context.SearchResultFieldDisplayContext" %><%@
page import="com.liferay.portal.search.web.internal.result.display.context.SearchResultSummaryDisplayContext" %><%@
page import="com.liferay.portal.search.web.internal.search.results.portlet.SearchResultsPortletDisplayContext" %>
<%@page import="com.liferay.portal.kernel.search.Document" %>
<%@page import="java.util.List" %>
<%@page import="java.util.stream.Collectors" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %><%@ taglib uri="http://liferay.com/tld/asset" prefix="liferay-asset" %><%@
taglib uri="http://liferay.com/tld/aui" prefix="aui" %><%@
taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %><portlet:defineObjects /><%
SearchResultsPortletDisplayContext searchResultsPortletDisplayContext = (SearchResultsPortletDisplayContext)java.util.Objects.requireNonNull(request.getAttribute(WebKeys.PORTLET_DISPLAY_CONTEXT));
List<Document> documents=searchResultsPortletDisplayContext.getDocuments();
List<Document> filteredDocuments = documents.stream()
.filter(doc -> !(doc.hasField("extension")&& doc.getField("extension").getValue().matches("jpg|jpeg|png")))
.collect(Collectors.toList());
searchResultsPortletDisplayContext.setDocuments(filteredDocuments);
if (searchResultsPortletDisplayContext.isRenderNothing()) {
return;
}com.liferay.portal.kernel.dao.search.SearchContainer<com.liferay.portal.kernel.search.Document> searchContainer1 = searchResultsPortletDisplayContext.getSearchContainer();
%><style>
.taglib-asset-tags-summary a.badge, .taglib-asset-tags-summary a.badge:hover {
color: #65B6F0;
} .search-total-label {
margin-top: 35px;
} .search-asset-type-sticker {
color: #869CAD;
} .search-document-content {
font-weight: 400;
} .search-result-thumbnail-img {
height: 44px;
width: 44px;
} .tabular-list-group .list-group-item-content h6.search-document-tags {
margin-top: 13px;
}
</style><p class="search-total-label text-default">
<%= searchContainer1.getTotal() %> results forrrrrrrrrr---r:::: <strong><%= HtmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()) %></strong>
</p><liferay-ui:search-container
emptyResultsMessage='<%= LanguageUtil.format(request, "no-results-were-found-that-matched-the-keywords-x", "<strong>" + HtmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()) + "</strong>", false) %>'
id='<%= renderResponse.getNamespace() + "searchContainerTag" %>'
searchContainer="<%= searchContainer1 %>"
>
<liferay-ui:search-container-row
className="com.liferay.portal.kernel.search.Document"
escapedModel="<%= false %>"
keyProperty="UID"
modelVar="document"
stringKey="<%= true %>"
> <%
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext = java.util.Objects.requireNonNull(searchResultsPortletDisplayContext.getSearchResultSummaryDisplayContext(document));
String assetRendererURLDownload=searchResultSummaryDisplayContext.getAssetRendererURLDownload();
%>
<c:choose>
<c:when test="<%= !searchResultSummaryDisplayContext.isTemporarilyUnavailable() %>">
<liferay-ui:search-container-column-text>
<c:if test="<%= searchResultSummaryDisplayContext.isUserPortraitVisible() %>">
<liferay-ui:user-portrait
userId="<%= searchResultSummaryDisplayContext.getAssetEntryUserId() %>"
/>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isThumbnailVisible() %>">
<img alt="blog cover image" class="img-rounded search-result-thumbnail-img" src="<%= searchResultSummaryDisplayContext.getThumbnailURLString() %>" />
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isIconVisible() %>">
<span class="search-asset-type-sticker sticker sticker-rounded sticker-secondary sticker-static">
<svg class="lexicon-icon">
<use xlink:href="<%= searchResultSummaryDisplayContext.getPathThemeImages() %>/lexicon/icons.svg#<%= searchResultSummaryDisplayContext.getIconId() %>" /> <title><%= searchResultSummaryDisplayContext.getIconId() %></title>
</svg>
</span>
</c:if>
</liferay-ui:search-container-column-text> <liferay-ui:search-container-column-text
colspan="<%= 2 %>"
>
<h4>
<%--<%= searchResultSummaryDisplayContext.getViewURL().toString() %> <strong>assetRendererURLDownload </strong>
<%= searchResultSummaryDisplayContext.getClassName() %>--%>
<a href="<%= searchResultSummaryDisplayContext.getViewURL() %>">
<strong><%= searchResultSummaryDisplayContext.getHighlightedTitle() %></strong>
</a>
</h4> <h6 class="text-default">
<strong><%= searchResultSummaryDisplayContext.getModelResource() %></strong> · <c:if test="<%= searchResultSummaryDisplayContext.isLocaleReminderVisible() %>">
<liferay-ui:icon
image='<%= "../language/" + searchResultSummaryDisplayContext.getLocaleLanguageId() %>'
message="<%= searchResultSummaryDisplayContext.getLocaleReminder() %>"
/>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isCreatorVisible() %>">
<liferay-ui:message key="written-by" /> <strong><%= searchResultSummaryDisplayContext.getCreatorUserName() %></strong>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isCreationDateVisible() %>">
<liferay-ui:message key="on-date" /> <%= searchResultSummaryDisplayContext.getCreationDateString() %>
</c:if>
</h6> <c:if test="<%= searchResultSummaryDisplayContext.isContentVisible() %>">
<h6 class="search-document-content text-default">
<%= searchResultSummaryDisplayContext.getContent() %>
</h6>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isAssetCategoriesOrTagsVisible() %>">
<h6 class="search-document-tags text-default">
<liferay-asset:asset-tags-summary
className="<%= searchResultSummaryDisplayContext.getClassName() %>"
classPK="<%= searchResultSummaryDisplayContext.getClassPK() %>"
paramName="<%= searchResultSummaryDisplayContext.getFieldAssetTagNames() %>"
portletURL="<%= searchResultSummaryDisplayContext.getPortletURL() %>"
/> <liferay-asset:asset-categories-summary
className="<%= searchResultSummaryDisplayContext.getClassName() %>"
classPK="<%= searchResultSummaryDisplayContext.getClassPK() %>"
paramName="<%= searchResultSummaryDisplayContext.getFieldAssetCategoryIds() %>"
portletURL="<%= searchResultSummaryDisplayContext.getPortletURL() %>"
/>
</h6>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isDocumentFormVisible() %>">
<h6 class="expand-details text-default"><a href="javascript:;"><liferay-ui:message key="details" />...</a></h6> <div class="hide table-details table-responsive">
<table class="table">
<thead>
<tr>
<th>
<liferay-ui:message key="key" />
</th>
<th>
<liferay-ui:message key="value" />
</th>
</tr>
</thead> <tbody> <%
for (SearchResultFieldDisplayContext searchResultFieldDisplayContext : searchResultSummaryDisplayContext.getDocumentFormFieldDisplayContexts()) {
%> <tr>
<td style="word-break:break-all;" width="25%">
<strong><%= HtmlUtil.escape(searchResultFieldDisplayContext.getName()) %></strong>
</td>
<td>
<code>
<%= HtmlUtil.escape(searchResultFieldDisplayContext.getValuesToString()) %>
</code>
</td>
</tr> <%
}
%> </tbody>
</table>
</div>
</c:if>
</liferay-ui:search-container-column-text>
</c:when>
<c:otherwise>
<liferay-ui:search-container-column-text
colspan="<%= 3 %>"
>
<div class="alert alert-danger">
<liferay-ui:message arguments="result" key="is-temporarily-unavailable" translateArguments="<%= true %>" />
</div>
</liferay-ui:search-container-column-text>
</c:otherwise>
</c:choose>
</liferay-ui:search-container-row> <aui:form useNamespace="<%= false %>">
<liferay-ui:search-iterator
displayStyle="descriptive"
markupView="lexicon"
type="more"
/>
</aui:form>
</liferay-ui:search-container><aui:script use="aui-base">
A.one('#<portlet:namespace />searchContainerTag').delegate(
'click',
function(event) {
var currentTarget = event.currentTarget; currentTarget.siblings('.table-details').toggleClass('hide');
},
'.expand-details'
);
</aui:script>
Thanks,
Gopal
My intention is to exclude images from search result when it is performed from default search bar. created a web fragment and making following changes inside /src/main/resources/META-INF/resources/search/results/view.jsp
List<Document> documents=searchResultsPortletDisplayContext.getDocuments();
List<Document> filteredDocuments = documents.stream()
.filter(doc -> !(doc.hasField("extension")&& doc.getField("extension").getValue().matches("jpg|jpeg|png")))
.collect(Collectors.toList());
searchResultsPortletDisplayContext.setDocuments(filteredDocuments);
Have verified that filteredDocuments contain only the results without images. But the result is not getting impacted even after searchResultsPortletDisplayContext.setDocuments(filteredDocuments); . Following is the complete code.
<%@ page import="com.liferay.portal.kernel.language.LanguageUtil" %><%@
page import="com.liferay.portal.kernel.util.HtmlUtil" %><%@
page import="com.liferay.portal.kernel.util.WebKeys" %><%@
page import="com.liferay.portal.search.web.internal.result.display.context.SearchResultFieldDisplayContext" %><%@
page import="com.liferay.portal.search.web.internal.result.display.context.SearchResultSummaryDisplayContext" %><%@
page import="com.liferay.portal.search.web.internal.search.results.portlet.SearchResultsPortletDisplayContext" %>
<%@page import="com.liferay.portal.kernel.search.Document" %>
<%@page import="java.util.List" %>
<%@page import="java.util.stream.Collectors" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %><%@ taglib uri="http://liferay.com/tld/asset" prefix="liferay-asset" %><%@
taglib uri="http://liferay.com/tld/aui" prefix="aui" %><%@
taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %><portlet:defineObjects /><%
SearchResultsPortletDisplayContext searchResultsPortletDisplayContext = (SearchResultsPortletDisplayContext)java.util.Objects.requireNonNull(request.getAttribute(WebKeys.PORTLET_DISPLAY_CONTEXT));
List<Document> documents=searchResultsPortletDisplayContext.getDocuments();
List<Document> filteredDocuments = documents.stream()
.filter(doc -> !(doc.hasField("extension")&& doc.getField("extension").getValue().matches("jpg|jpeg|png")))
.collect(Collectors.toList());
searchResultsPortletDisplayContext.setDocuments(filteredDocuments);
if (searchResultsPortletDisplayContext.isRenderNothing()) {
return;
}com.liferay.portal.kernel.dao.search.SearchContainer<com.liferay.portal.kernel.search.Document> searchContainer1 = searchResultsPortletDisplayContext.getSearchContainer();
%><style>
.taglib-asset-tags-summary a.badge, .taglib-asset-tags-summary a.badge:hover {
color: #65B6F0;
} .search-total-label {
margin-top: 35px;
} .search-asset-type-sticker {
color: #869CAD;
} .search-document-content {
font-weight: 400;
} .search-result-thumbnail-img {
height: 44px;
width: 44px;
} .tabular-list-group .list-group-item-content h6.search-document-tags {
margin-top: 13px;
}
</style><p class="search-total-label text-default">
<%= searchContainer1.getTotal() %> results forrrrrrrrrr---r:::: <strong><%= HtmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()) %></strong>
</p><liferay-ui:search-container
emptyResultsMessage='<%= LanguageUtil.format(request, "no-results-were-found-that-matched-the-keywords-x", "<strong>" + HtmlUtil.escape(searchResultsPortletDisplayContext.getKeywords()) + "</strong>", false) %>'
id='<%= renderResponse.getNamespace() + "searchContainerTag" %>'
searchContainer="<%= searchContainer1 %>"
>
<liferay-ui:search-container-row
className="com.liferay.portal.kernel.search.Document"
escapedModel="<%= false %>"
keyProperty="UID"
modelVar="document"
stringKey="<%= true %>"
> <%
SearchResultSummaryDisplayContext searchResultSummaryDisplayContext = java.util.Objects.requireNonNull(searchResultsPortletDisplayContext.getSearchResultSummaryDisplayContext(document));
String assetRendererURLDownload=searchResultSummaryDisplayContext.getAssetRendererURLDownload();
%>
<c:choose>
<c:when test="<%= !searchResultSummaryDisplayContext.isTemporarilyUnavailable() %>">
<liferay-ui:search-container-column-text>
<c:if test="<%= searchResultSummaryDisplayContext.isUserPortraitVisible() %>">
<liferay-ui:user-portrait
userId="<%= searchResultSummaryDisplayContext.getAssetEntryUserId() %>"
/>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isThumbnailVisible() %>">
<img alt="blog cover image" class="img-rounded search-result-thumbnail-img" src="<%= searchResultSummaryDisplayContext.getThumbnailURLString() %>" />
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isIconVisible() %>">
<span class="search-asset-type-sticker sticker sticker-rounded sticker-secondary sticker-static">
<svg class="lexicon-icon">
<use xlink:href="<%= searchResultSummaryDisplayContext.getPathThemeImages() %>/lexicon/icons.svg#<%= searchResultSummaryDisplayContext.getIconId() %>" /> <title><%= searchResultSummaryDisplayContext.getIconId() %></title>
</svg>
</span>
</c:if>
</liferay-ui:search-container-column-text> <liferay-ui:search-container-column-text
colspan="<%= 2 %>"
>
<h4>
<%--<%= searchResultSummaryDisplayContext.getViewURL().toString() %> <strong>assetRendererURLDownload </strong>
<%= searchResultSummaryDisplayContext.getClassName() %>--%>
<a href="<%= searchResultSummaryDisplayContext.getViewURL() %>">
<strong><%= searchResultSummaryDisplayContext.getHighlightedTitle() %></strong>
</a>
</h4> <h6 class="text-default">
<strong><%= searchResultSummaryDisplayContext.getModelResource() %></strong> · <c:if test="<%= searchResultSummaryDisplayContext.isLocaleReminderVisible() %>">
<liferay-ui:icon
image='<%= "../language/" + searchResultSummaryDisplayContext.getLocaleLanguageId() %>'
message="<%= searchResultSummaryDisplayContext.getLocaleReminder() %>"
/>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isCreatorVisible() %>">
<liferay-ui:message key="written-by" /> <strong><%= searchResultSummaryDisplayContext.getCreatorUserName() %></strong>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isCreationDateVisible() %>">
<liferay-ui:message key="on-date" /> <%= searchResultSummaryDisplayContext.getCreationDateString() %>
</c:if>
</h6> <c:if test="<%= searchResultSummaryDisplayContext.isContentVisible() %>">
<h6 class="search-document-content text-default">
<%= searchResultSummaryDisplayContext.getContent() %>
</h6>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isAssetCategoriesOrTagsVisible() %>">
<h6 class="search-document-tags text-default">
<liferay-asset:asset-tags-summary
className="<%= searchResultSummaryDisplayContext.getClassName() %>"
classPK="<%= searchResultSummaryDisplayContext.getClassPK() %>"
paramName="<%= searchResultSummaryDisplayContext.getFieldAssetTagNames() %>"
portletURL="<%= searchResultSummaryDisplayContext.getPortletURL() %>"
/> <liferay-asset:asset-categories-summary
className="<%= searchResultSummaryDisplayContext.getClassName() %>"
classPK="<%= searchResultSummaryDisplayContext.getClassPK() %>"
paramName="<%= searchResultSummaryDisplayContext.getFieldAssetCategoryIds() %>"
portletURL="<%= searchResultSummaryDisplayContext.getPortletURL() %>"
/>
</h6>
</c:if> <c:if test="<%= searchResultSummaryDisplayContext.isDocumentFormVisible() %>">
<h6 class="expand-details text-default"><a href="javascript:;"><liferay-ui:message key="details" />...</a></h6> <div class="hide table-details table-responsive">
<table class="table">
<thead>
<tr>
<th>
<liferay-ui:message key="key" />
</th>
<th>
<liferay-ui:message key="value" />
</th>
</tr>
</thead> <tbody> <%
for (SearchResultFieldDisplayContext searchResultFieldDisplayContext : searchResultSummaryDisplayContext.getDocumentFormFieldDisplayContexts()) {
%> <tr>
<td style="word-break:break-all;" width="25%">
<strong><%= HtmlUtil.escape(searchResultFieldDisplayContext.getName()) %></strong>
</td>
<td>
<code>
<%= HtmlUtil.escape(searchResultFieldDisplayContext.getValuesToString()) %>
</code>
</td>
</tr> <%
}
%> </tbody>
</table>
</div>
</c:if>
</liferay-ui:search-container-column-text>
</c:when>
<c:otherwise>
<liferay-ui:search-container-column-text
colspan="<%= 3 %>"
>
<div class="alert alert-danger">
<liferay-ui:message arguments="result" key="is-temporarily-unavailable" translateArguments="<%= true %>" />
</div>
</liferay-ui:search-container-column-text>
</c:otherwise>
</c:choose>
</liferay-ui:search-container-row> <aui:form useNamespace="<%= false %>">
<liferay-ui:search-iterator
displayStyle="descriptive"
markupView="lexicon"
type="more"
/>
</aui:form>
</liferay-ui:search-container><aui:script use="aui-base">
A.one('#<portlet:namespace />searchContainerTag').delegate(
'click',
function(event) {
var currentTarget = event.currentTarget; currentTarget.siblings('.table-details').toggleClass('hide');
},
'.expand-details'
);
</aui:script>
Thanks,
Gopal
Gopal Prasad Satapathy, modified 4 Years ago.
RE: DXP 7.1: Fragment Changes to Filter Search Results
Junior Member Posts: 51 Join Date: 3/29/18 Recent Posts
Any pointer on how to solve the issue?
Gopal Prasad Satapathy, modified 3 Years ago.
RE: DXP 7.1: Fragment Changes to Filter Search Results
Junior Member Posts: 51 Join Date: 3/29/18 Recent Posts
am still looking for a solution on this..
Gopal Prasad Satapathy, modified 3 Years ago.
RE: DXP 7.1: Fragment Changes to Filter Search Results
Junior Member Posts: 51 Join Date: 3/29/18 Recent PostsIs there any solution to above situation?