Liferayタグクラウドポートレットをページに配置するときに、タグクラウド内のリンクをクリックすると、同じページにアセットパブリッシャーポートレットがある場合に限り、同じページに結果が表示されます。
タグクラウド内のリンクをクリックすると、結果を表示する別のページに移動する必要があります。検索結果ページ。
標準コンポーネントを使用してこれを行う方法はありますか?または、この機能をサポートするために独自のタグクラウドポートレットを作成する必要がありますか?
新しいポートレットを作成する必要はありません。次の手順に従ってください
1)フックを使用して、タグのタグクラウドポートレットで生成されるリンクを変更します。現在のレイアウトの代わりに、指定されたページにリダイレクトします(たとえば、/ web / guest / tagページを表示している場合、すべてのタグのリンクは/ web / guest / tag?.....から始まります。これを/に変更します。 web / guest / search?....)
2)検索ページに、アセットパブリッシャーを配置します
これで、タグリンクをクリックすると、検索ページに移動します。このページにはアセットパブリッシャーがあるため、リクエストURLとセッションからすべてのパラメーターを読み取り、検索ページに結果を表示します。
このフックのコード:
ファイルliferay-hook.xml
:
<hook>
<custom-jsp-dir>/META-INF/custom_jsps</custom-jsp-dir>
</hook>
ファイル/docroot/META-INF/custom_jsps/html/taglib/ui/asset_tags_navigation/page.jsp
:
<%@ include file="/html/taglib/ui/asset_tags_navigation/init.jsp" %>
<%@ taglib uri="<http://liferay.com/tld/util>"
prefix="liferay-util" %>
<%@ page import="com.liferay.portal.kernel.util.StringUtil" %>
<%@ page import="com.liferay.portal.service.LayoutLocalServiceUtil"%>
<liferay-util:buffer var="html">
<liferay-util:include page="/html/taglib/ui/asset_tags_navigation/page.portal.jsp"/>
</liferay-util:buffer>
<% Layout searchLayout =
LayoutLocalServiceUtil.getFriendlyURLLayout(scopeGroupId, false,
"/search");
html = StringUtil.replace(html,layout.getRegularURL(request),searchLayout.getRegularURL(request));
%>
<%= html %>