擴充資產搜尋 extending-assets-search
您可以擴充Adobe Experience Manager Assets搜尋功能。 Experience Manager Assets可立即使用字串搜尋資產。
搜尋是透過QueryBuilder介面完成,因此可以使用數個述詞來自訂搜尋。 您可以覆蓋下列目錄中的預設述詞集: /apps/dam/content/search/searchpanel/facets
。
您也可以新增其他標籤至「Assets」管理面板。
覆蓋 overlaying
若要覆蓋預先設定的述詞,請將facets
節點從/libs/dam/content/search/searchpanel
複製到/apps/dam/content/search/searchpanel/
,或在searchpanel
設定中指定另一個facetURL
屬性(預設為/libs/dam/content/search/searchpanel/facets.overlay.infinity.json
)。
/apps
下的目錄結構不存在,因此請建立它。 確定節點型別符合/libs
下的節點型別。新增索引標籤 adding-tabs
您可以在Assets管理介面中設定搜尋標籤,以新增其他搜尋標籤。 若要建立其他標籤:
-
如果資料夾結構
/apps/wcm/core/content/damadmin/tabs,
尚不存在,請建立該資料夾結構,並從/libs/wcm/core/content/damadmin
複製tabs
節點並將其貼上。 -
視需要建立並設定第二個索引標籤。
note note NOTE 當您建立第二個 siteadminsearchpanel
時,請務必設定id
屬性以防止表單衝突。
建立自訂述詞 creating-custom-predicates
Assets隨附一組預先定義的述詞,可用來自訂「資產共用」頁面。 以這種方式自訂資產共用包含在建立和設定資產共用頁面中。
除了使用現有的述詞之外,Experience Manager開發人員也可以使用查詢產生器API建立自己的述詞。
建立自訂述詞需要有關Widget架構的基本知識。
最佳實務是複製並調整現有述詞。 範例述詞位於 /libs/cq/search/components/predicates 中。
範例:建立簡單的屬性述詞 example-build-a-simple-property-predicate
若要建置屬性述詞:
-
在您的專案目錄中建立元件資料夾,例如 /apps/weretail/components/titlepredicate。
-
新增 content.xml:
code language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="https://sling.apache.org/jcr/sling/1.0" xmlns:cq="https://www.day.com/jcr/cq/1.0" xmlns:jcr="https://www.jcp.org/jcr/1.0" jcr:primaryType="cq:Component" jcr:title="Title Predicate" sling:resourceSuperType="foundation/components/parbase" allowedParents="[*/parsys]" componentGroup="Search"/>
-
新增
titlepredicate.jsp
。code language-java <%-- Sample title predicate component --%><%@ page import="java.util.Calendar" %><% %><%@include file="/libs/foundation/global.jsp"%><% // A unique id is necessary in case this predicate is inserted multiple times on the same page String elemId = "cq-predicate-" + Long.toString(Calendar.getInstance().getTimeInMillis()); %><div class="predicatebox"> <div class="title">Title</div> <%-- The wrapper for the form elements. All items are appended to this wrapper. --%> <div id="<%= elemId %>" class="content"></div> </div><script type="text/javascript"> CQ.Ext.onLoad(function() { var predicateName = "property"; var propertyName = "jcr:content/metadata/dc:title"; var elemId = "<%= elemId %>"; // Get the page wide available QueryBuilder. var qb = CQ.search.Util.getQueryBuilder(); // createId adds a counter to the predicate name - useful in case this predicate // is inserted multiple times on the same page. var id = qb.createId(predicateName); // Hidden field that defines the property to search for; in our case this // is the "dc:title" metadata. The name "property" (or "1_property", "2_property", and so on.) // indicates the server to use the property predicate // (com.day.cq.search.eval.JcrPropertyPredicateEvaluator). qb.addField({ "xtype": "hidden", "renderTo": elemId, "name": id, "value": propertyName }); // The visible text field. The name has to be like the one of the hidden field above // plus the ".value" suffix. qb.addField({ "xtype": "textfield", "renderTo": elemId, "name": id + ".value" }); // Depending on the predicate, additional parameters let you configure the // predicate. Here we add an operation parameter to create a "like" query. // Again note the name set to the id and a suffix. qb.addField({ "xtype": "hidden", "renderTo": elemId, "name": id + ".operation", "value": "like" }); }); </script>
-
若要讓元件可用,您必須能夠加以編輯。若要讓元件可編輯,請在CRXDE中新增主要類型 cq:EditConfig的節點cq:editConfig 。為了能夠移除段落,請新增多值屬性 cq:actions ,其中單一值 為DELETE。
-
導覽至瀏覽器,並在範例頁面(例如,press.html)上切換至設計模式,並為述詞段落系統啟用新元件(例如,left)。
-
在 編輯 模式中,新元件現在可在Sidekick中使用(可在 搜尋 群組中找到)。 在 Predicates 欄中插入元件,並輸入搜尋字詞,例如 Diamond,然後按一下放大鏡開始搜尋。
note note NOTE 搜尋時,請務必正確輸入字詞,包括正確的大小寫。
範例:建立簡單的群組述詞 example-build-a-simple-group-predicate
若要建立群組述詞:
-
在您的專案目錄中建立元件資料夾,例如 /apps/weretail/components/picspredicate。
-
新增 content.xml:
code language-xml <?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:sling="https://sling.apache.org/jcr/sling/1.0" xmlns:cq="https://www.day.com/jcr/cq/1.0" xmlns:jcr="https://www.jcp.org/jcr/1.0" jcr:primaryType="cq:Component" jcr:title="Image Formats" sling:resourceSuperType="foundation/components/parbase" allowedParents="[*/parsys]" componentGroup="Search"/>
-
新增 titlepredicate.jsp:
code language-java <%-- Sample group predicate component --%><%@ page import="java.util.Calendar" %><% %><%@include file="/libs/foundation/global.jsp"%><% // A unique id is necessary in case this predicate is inserted multiple times on the same page. String elemId = "cq-predicate-" + Long.toString(Calendar.getInstance().getTimeInMillis()); %><div class="predicatebox"> <div class="title">Image Formats</div> <%-- The wrapper for the form elements. All items are append to this wrapper. --%> <div id="<%= elemId %>" class="content"></div> </div><script type="text/javascript"> CQ.Ext.onLoad(function() { var predicateName = "property"; var propertyName = "jcr:content/metadata/dc:format"; var elemId = "<%= elemId %>"; // Get the page wide available QueryBuilder. var qb = CQ.search.Util.getQueryBuilder(); // Create a unique group ID; will return for example, "1_group". var groupId = qb.createGroupId(); // Hidden field that defines the property to search for - in our case "dc:format" - // and declares the group of predicates. "property" in the name ("1_group.property") // indicates to the server to use the "property predicate" // (com.day.cq.search.eval.JcrPropertyPredicateEvaluator). qb.addField({ "xtype": "hidden", "renderTo": "<%= elemId %>", "name": groupId + "." + predicateName, // 1_group.property "value": propertyName }); // Declare to combine the multiple values using OR. qb.add(new CQ.Ext.form.Hidden({ "name": groupId + ".p.or", // 1_group.p.or "value": "true" })); // The options var options = [ { "label":"JPEG", "value":"image/jpeg"}, { "label":"PNG", "value":"image/png" }, { "label":"GIF", "value":"image/gif" } ]; // Build a checkbox for each option. for (var i = 0; i < options.length; i++) { qb.addField({ "xtype": "checkbox", "renderTo": "<%= elemId %>", // 1_group.property.0_value, 1_group.property.1_value, and so on. "name": groupId + "." + predicateName + "." + i + "_value", "inputValue": options[i].value, "boxLabel": options[i].label, "listeners": { "check": function() { // Submit the search form when checking/unchecking a checkbox. qb.submit(); } } }); } });
-
若要讓元件可用,您必須能夠加以編輯。若要讓元件可編輯,請在CRXDE中新增主要類型 cq:EditConfig的節點cq:editConfig 。為了能夠移除段落,請新增多值屬性 cq:actions ,其中單一值 為DELETE。
-
導覽至瀏覽器,並在範例頁面(例如,press.html)上切換至設計模式,並為述詞段落系統啟用新元件(例如,left)。
-
在 編輯 模式中,新元件現在可在Sidekick中使用(可在 搜尋 群組中找到)。 在 Predicates 欄中插入元件。
已安裝的述詞Widget installed-predicate-widgets
下列述詞可作為預先設定的ExtJS Widget使用。
全文述詞 fulltextpredicate
fulltext
keyup
搜尋的回呼。 預設為CQ.wcm.SiteAdmin.doSearch
屬性述詞 propertypredicate
property
jcr:title
路徑述詞 pathpredicate
path
/content/dam
folder
search in subfolders
。 預設為true。DatePredicate datepredicate
daterange
jcr:content/jcr:lastModified
選項述詞 optionspredicate
daterange
jcr:content/metadata/cq:tags
level1
CQ.wcm.SiteAdmin.doSearch
自訂搜尋結果 customizing-search-results
在「資產共用」頁面上呈現搜尋結果時,會受選取的鏡頭所控制。 Experience Manager Assets隨附一組預先定義的鏡頭,可用來自訂「資產共用」頁面。 以這種方式自訂資產共用包含在建立和設定資產共用頁面中。
除了使用現有的鏡頭,Experience Manager開發人員也可以建立自己的鏡頭。