2016-04-04 5 views
0

Ich habe einige Schwierigkeiten bei der Anpassung der facettierten Aikau-Suchseite auf Alfresco, was eher auf mangelndes Wissen über Dojo/AMD zurückzuführen ist.Ändern der Ergebnis-URL in Alfresco AIkau facettierte Suchseite

Ich möchte die Dokumentdetailseiten-URL durch eine Download-URL ersetzen.

ich die Suchergebnisse Widget erweitert mein eigenes Modul enthalten:

var searchResultWidget = widgetUtils.findObject(model.jsonModel, "id", "FCTSRCH_SEARCH_RESULT"); 

if(searchResultWidget) { 
    searchResultWidget.name = "mynamespace/search/CustomAlfSearchResult"; 
} 

ich werden auf diese Weise gemacht URLs Suchergebnissen verstehen: AlfSearchResult Modul => verwendet SearchResultPropertyLink Modul => Mixins _SearchResultLinkMixin Renderer => bringen die "generateSearchLinkPayload" -Funktion => macht URLs abhängig vom Ergebnistyp

Ich möchte diese "generateSearchLinkPayload" -Funktion außer Kraft setzen, aber ich kann nicht herausfinden, was der beste Weg ist, dies zu tun.

Vielen Dank im Voraus für die Hilfe!

Antwort

3

Diese Antwort setzt voraus, dass Sie die neueste Version von Aikau verwenden können (zum Zeitpunkt der Erstellung ist dies 1.0.61). Ältere Versionen erfordern möglicherweise etwas anderes überschreiben ...

Um dies zu tun, müssen Sie die createDisplayNameRenderer Funktion von AlfSearchResult in Ihrem CustomAlfSearchResult Widget überschreiben. Dadurch können Sie eine Erweiterung von alfresco/search/SearchResultPropertyLink erstellen.

Wenn Sie die Vorteile der die Download-Funktionen durch die alfresco/services/DocumentService Anspruch nehmen wollen, beide Dokumente und Ordner zum Download (als zip) dann sowohl die publishTopic und publishPayload des SearchResultPropertyLink ändern zu wollen, du gehst.

Sie sollten die Funktionen getPublishTopic und generateSearchLinkPayload erweitern. Für die Funktion getPublishTopic sollten Sie den Rückgabewert auf "ALF_SMART_DOWNLOAD" ändern (für diese Zeichenfolgen sind im Modul alfresco/core/topics Konstanten verfügbar). Dieses Thema kann verwendet werden, um DocumentService darüber zu informieren, ob der Knoten ein Ordner oder Dokument ist und eine XHR-Anforderung für die vollständigen Knotenmetadaten erstellt (um das contentUrl Attribut zu erhalten, das nicht in den zurückgegebenen Daten enthalten ist) durch die Search API.

sollten Sie erweitern die generateSearchLinkPayload Funktion, so dass für Dokument oder Ordnertypen die Nutzlast das Attribut enthält nodes, die ein einzelnes Array ist, wo das Objekt ist das Suchergebnis-Objekt, das Sie herunterladen möchten.

Ich würde empfehlen, dass Sie zuerst this.inherited aufrufen, um die Standardnutzlast zu erhalten, und sie nur für Dokumente und Ordner zu aktualisieren

Hoffentlich macht das alles Sinn - wenn nicht, füge einen Kommentar hinzu und ich werde versuchen, weitere Hilfe zu leisten!

+0

Danke für Ihre Hilfe Dave! Ich hätte angeben sollen, dass ich Alfresco 5.1.2.5 verwende, das mit Aikau 1.0.25 geliefert wird. Leider ist die createDisplayNameRenderer-Funktion in dieser Version nicht verfügbar ... Gibt es eine andere "saubere" Möglichkeit, SearchResultPropertyLink in älteren Versionen zu erweitern? –

+0

OK ... Ich werde mir das später noch einmal ansehen und sehen, welche Möglichkeiten es gibt. Der intelligente Download wird definitiv nicht verfügbar sein und wie du sagst wird das AlfSearchResult nicht ganz so ordentlich aufgeteilt. Es ist möglich, spätere Versionen von Aikau zu verwenden (offensichtlich gibt es hier ein kleines Element des Risikos, da sie den gesamten integrierten QA-Prozess nicht durchlaufen haben). Spätere Service Packs (für 5.0 und 5.1) verwenden jedoch normalerweise die neueste Version von Aikau. –

2

Dies ist die Antwort für 1.0.25.2 - leider ist es nicht ganz so einfach ...

Sie müssen noch die alfresco/search/AlfSearchResult Widget erweitern, aber dieses Mal, wenn Sie die postCreate Funktion erweitern müssen (wir erinnern uns this.inherited(arguments) anrufen). Es ist nicht möglich das originale alfresco/search/SearchResultPropertyLink Widget zu deaktivieren, damit es gefunden werden kann und es zerstört werden muss.

Das Widget ist keiner Variablen zugewiesen, daher muss es unter dijit/registry gefunden werden. Verwenden Sie die Funktion byNode von dijit/registry, um das Widget zu finden, das this.nameNode zugewiesen ist, und rufen Sie dann das Element destroy auf (stellen Sie sicher, dass Sie das Argument true übergeben, um das DOM zu erhalten). Sie müssen dann jedoch den DOM-Knoten leeren, damit Sie erneut starten können.

Jetzt müssen Sie Ihre Erweiterung zu alfresco/search/SearchResultPropertyLink hinzufügen. Da die Smart-Download-Funktion nicht zur Verfügung steht, müssen Sie leider mehr arbeiten. Der Unterschied besteht darin, dass Sie eine XHR-Anfrage stellen müssen, um die vollständigen Metadaten des Knotens abzurufen, um die contentURL zu erhalten. Es ist möglich, eine Anfrage an die DocumentService (über das Thema "ALF_RETRIEVE_SINGLE_DOCUMENT_REQUEST") zu veröffentlichen. Sie müssen sich jedoch darüber im Klaren sein, dass es Ihnen mit dem XHR-Schritt nicht möglich ist, den Download so fortzusetzen, wie er ist. Stattdessen müssen Sie eine iframe-Download-Lösung verwenden. Ich schlage vor, Sie werfen einen Blick auf die Änderungen in der pull request, die wir vor kurzem gemacht haben, um dieses Problem zu lösen und sie in Ihre eigene Lösung zu portieren.

+0

Ich erkannte, dass die Antwort nur teilweise korrekt war - also habe ich bearbeitet, um zu beschreiben, wie man den benutzerdefinierten SearchResultPropertyLink implementiert - dies fehlte bisher in der ursprünglichen Antwort. –

Verwandte Themen