Extension de la recherche de ressources extending-assets-search
Vous pouvez étendre les fonctionnalités de recherche d’Adobe Experience Manager Assets. Prêt à l’emploi, Experience Manager Les ressources recherchent des ressources par chaînes.
La recherche est effectuée par le biais de l’interface QueryBuilder, de sorte qu’elle puisse être personnalisée avec plusieurs prédicats. Vous pouvez remplacer l’ensemble des prédicats par défaut dans le répertoire suivant : /apps/dam/content/search/searchpanel/facets
.
Vous pouvez également ajouter d’autres onglets au Experience Manager Panneau d’administration des ressources.
Recouvrement overlaying
Pour remplacer les prédicats préconfigurés, copiez le nœud facets
du répertoire /libs/dam/content/search/searchpanel
dans le répertoire /apps/dam/content/search/searchpanel/
ou spécifiez une autre propriété facetURL
dans la configuration du panneau de recherche (la valeur par défaut est /libs/dam/content/search/searchpanel/facets.overlay.infinity.json
).
apps
n’existe pas et doit être créé. Assurez-vous que les types de nœuds correspondent à ceux existant sous / libs
.Ajouter des onglets adding-tabs
Vous pouvez ajouter d’autres onglets de recherche en les configurant dans le Experience Manager Administration des ressources. Pour créer des onglets supplémentaires, procédez comme suit :
-
Créez la structure de dossiers
/apps/wcm/core/content/damadmin/tabs,
si elle n’existe pas encore, puis copiez le nœudtabs
dans le répertoire/libs/wcm/core/content/damadmin
et collez-le. -
Créez et configurez le second onglet, le cas échéant.
note note NOTE Lorsque vous créez un deuxième panneau siteadminsearchpanel, veillez à définir une id
afin d’éviter les conflits de formulaire.
Création de prédicats personnalisés creating-custom-predicates
Experience Manager Assets est fourni avec un ensemble de prédicats prédéfinis qui peuvent être utilisés pour personnaliser une page de partage de ressources. Ce processus de personnalisation d’un partage de ressources est abordé dans la section Création et configuration d’une page de partage de ressources.
En plus d’utiliser des prédicats préexistants, l’équipe de développement Experience Manager peut créer ses propres prédicats à l’aide de l’API Query Builder.
La création de prédicats personnalisés nécessite des connaissances de base sur la structure des widgets.
Il est recommandé de copier un prédicat existant et de l’ajuster. Les exemples de prédicats se trouvent dans /libs/cq/search/components/predicates
.
Exemple : création d’un prédicat de propriété simple example-build-a-simple-property-predicate
Pour créer un prédicat de propriété :
-
Créez un dossier de composant dans votre répertoire de projets, par exemple
/apps/geometrixx/components/titlepredicate
. -
Ajoutez
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"/>
-
Ajoutez
titlepredicate.jsp
.code language-xml <%-- 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 will be 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: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" etc.) // 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 allow to 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>
-
Pour rendre le composant accessible, vous devez être en mesure de le modifier. Pour rendre un composant modifiable, ajoutez un noeud dans CRXDE.
cq:editConfig
de type Principalcq:EditConfig
. Pour pouvoir supprimer des paragraphes, ajoutez une propriétécq:actions
à plusieurs valeurs avec une seule valeur de DELETE. -
Accédez à votre navigateur et à votre page d’exemple (par exemple,
press.html
) passez en mode de conception et activez votre nouveau composant pour le système de paragraphes de prédicat (par exemple, left). -
En mode d’édition, le nouveau composant est désormais disponible dans le sidekick (accessible dans le groupe Recherche). Insérez le composant dans la colonne Prédicats et saisissez un mot de recherche, par exemple Diamant, puis cliquez sur la loupe pour lancer la recherche.
note note NOTE Lors de la recherche, assurez-vous de saisir le terme exact en respectant la casse.
Exemple : création d’un prédicat de groupe simple example-build-a-simple-group-predicate
Pour créer un prédicat de groupe :
-
Créez un dossier de composant dans votre répertoire de projets, par exemple
/apps/geometrixx/components/picspredicate
. -
Ajoutez
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"/>
-
Ajoutez
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 will be 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 e.g. "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 etc. "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(); } } }); } });
-
Pour rendre le composant accessible, vous devez être en mesure de le modifier. Pour rendre un composant modifiable, ajoutez un noeud dans CRXDE.
cq:editConfig
de type Principalcq:EditConfig
. Afin de pouvoir supprimer des paragraphes, ajoutez une propriété à valeurs multiplescq:actions
avec une valeur unique deDELETE
. -
Accédez à votre navigateur et à votre page d’exemple (par exemple,
press.html
) passez en mode de conception et activez votre nouveau composant pour le système de paragraphes de prédicat (par exemple, left). -
En mode d’édition, le nouveau composant est désormais disponible dans le sidekick (accessible dans le groupe Recherche). Insérez le composant dans la colonne Prédicats.
Widgets de prédicats installés installed-predicate-widgets
Les prédicats suivants sont disponibles sous la forme de widgets ExtJS préconfigurés.
FulltextPredicate fulltextpredicate
fulltext
.keyup
La valeur par défaut est CQ.wcm.SiteAdmin.doSearch
.PropertyPredicate propertypredicate
property
.jcr:title
.PathPredicate pathpredicate
path
./content/dam
.folder
.search in subfolders
. La valeur par défaut est « true ».DatePredicate datepredicate
daterange
.jcr:content/jcr:lastModified
.OptionsPredicate optionspredicate
daterange
.jcr:content/metadata/cq:tags
.level1
.CQ.wcm.SiteAdmin.doSearch
.Personnalisation des résultats de recherche customizing-search-results
La présentation des résultats de la recherche sur une page de partage des ressources est régie par la loupe sélectionnée. Experience Manager Les ressources sont fournies avec un ensemble de loupes prédéfinies qui peuvent être utilisées pour personnaliser une page Partage de ressources. Ce processus de personnalisation d’un partage de ressources est abordé dans la section Création et configuration d’une page de partage de ressources.
En plus d’utiliser des loupes préexistantes, l’équipe de développement Experience Manager peut créer ses propres loupes.