TYPO3 Plugin:

solrwidget

Solr Fluid Widget

TYPO3 Extension zur Darstellung eines AJAX-fähigen Solr-Suchfeldes als Plugin oder Fluid Widget.

Einführung

Diese Erweiterung ist in der Lage, eine Suchanfrage an einen in TYPO3 konfigurierten Solr-Server zu senden. Es verwendet EXT:solr für die gesamte Kommunikation mit dem Solr Backend-Server. Eine Standardstrategie zur Ergebnisanzeige, die die Tooltip- und Popover-Methoden von Twitter Bootstrap verwendet ist implementiert (Sie können dies leicht durch einen beliebigen Ansatz ersetzen) und hängt von jQuery für AJAX und Event Listening ab.

Installation

Laden Sie Erweiterungsdateien herunter, verwenden Sie den Extension Manager oder legen Sie die Dateien manuell in Ihren Erweiterungsordner. Statisches TypoScript laden die von der Erweiterung bereitgestellt wird - und stellen Sie sicher, dass sie auf der Seite verfügbar ist, auf der Sie das Plugin oder das Fluid Widget platzieren möchten.

Integration

Die Integration der Erweiterung besteht nur aus wenigen Standardaufgaben:

  1. Ersetzen Sie die vom Plugin und Widget verwendete Vorlagendatei.
  2. Bestätigen Sie alle Solr-Suchfilter usw., die Sie in solr's TypoScript hinzugefügt haben.
  3. Optional können Sie eine Javascript-Methode zur Anzeige der Ergebnisse einbinden.
  4. Optional können Sie zusätzliche QueryProvider für erweiterte Ergebnisse anschließen

Jede davon wird im Folgenden näher beschrieben.

Ersetzen von Vorlagendateien

Die von diesem Widget verwendete Hauptvorlagendatei ist Widget/Index im Ordner Resources/Private/Templates, der standardmäßig wie folgt lautet im TemplateRootPath gesetzt in plugin.tx_solrwidget.view.template.templateRootPath. Das Plugin verwendet intern das Widget und den Das Widget verwendet diese Vorlage. Diese Vorlage rendert dann (als Standardansatz) die Teilvorlage Widget.html, die Folgendes enthält das aktuelle HTML für das Widget.

In fast allen Anwendungsfällen müssen Sie nur ein Stück der TS-Konfiguration überschreiben:

plugin.tx_solrwidget.view.partialRootPath = EXT:myext/Ressourcen/Private/Partials

Das bedeutet, dass das Verzeichnis EXT:myext/Resources/Private/Partials/Widget.html eine Kopie der Originaldatei enthalten sollte EXT:solrwidget/Ressourcen/Private/Teile/Widget.html, die Sie dann an Ihre Bedürfnisse anpassen.

In der Template-Datei befindet sich ein div mit Klassenergebnis-Template - falls vorhanden, wird der HTML-Inhalt als Vorlage verwendet, wenn ausgabe jedes Ergebnisses; um diese Anforderung und/oder dieses Verhalten zu ändern, müssen Sie Ihre eigene Javascript-Ergebnisanzeige registrieren.

Bestätigung der Solr-Suche im Zusammenhang mit dem TypoScript-Setup

Dieser Teil der Integration ist einfach zu verwalten: Durch EXT:solrwidget wird jede suchbezogene TypoScript-Einstellung wiederverwendet EXT:solr selbst ist es sehr wahrscheinlich, dass Ihre Suche "nur funktioniert" - aber wenn Sie Probleme haben, die Suchergebnisse anzuzeigen oder falsche Ergebnisse, überprüfen Sie Ihr Konfigurationsfeld plugin.tx_solr.search. Beliebige Filter, voreingestellte Abfragen, Seitenumbrüche, erzwungene facetten etc. werden sowohl vom Plugin als auch vom Fluid Widget berücksichtigt.

Die erste Intention dieser Suchfunktion ist die Standortsuche mit Typeahead und einfacher Ergebnisdarstellung, d.h. das Widget hat keine erweiterte Unterstützung für Facetten, häufige Suchen und vorgeschlagene Keywords in der Suche - und es gibt andere Einstellungen die nicht mehr gelten, z.B. die Ergebnis-Highlight-Funktion. Die Suche soll daher recht einfach sein, kann aber auch sehr einfach sein auf die Wünsche Ihres Herzens ausgeweitet, solange Sie bereit sind, eine komplexere Suchanzeige zu schreiben, Javascript-Funktion.

Suchergebnisanzeige ersetzen Javascript-Funktion

Da EXT:solrwidget nur für AJAX-Suchanfragen gedacht ist, kann es sein, dass Sie für das gewünschte Suchergebnislayout schreiben müssen eine Ersatzjavascript-Funktion, die Ihre Ergebnisse unterschiedlich verarbeiten kann. Das Ersetzen der Standard-Ergebnisanzeigefunktion ist einfach; fügen Sie auf dem <form> Tag, der das Suchfeld enthält, das HTML-Attribut data-result-formatter="mySmartMethod" hinzu, welches erfordert dann, dass die Funktion mySmartMethod in Javascript definiert und durch Ihr eigenes TypoScript oder was auch immer eingebunden wird einbindungsmethode, die Sie bevorzugen. Die mySmartMethod muss dann zwei Argumente akzeptieren: result und form - das Ergebnisargument wird ein Array von Ergebnisobjekten mit Daten aus Solr enthalten (und wenn Sie weitere QueryProvider registrieren, wird das Ergebnisargument stattdessen ein Array mit Ergebnisgruppen enthalten. Das bedeutet, dass Sie auf den Typ testen müssen - und das geht am einfachsten, wenn Sie behaupten wenn das erste Ergebnis ein Array mit dem Namen results enthält:

// given <form .... data-result-formatter="window.myFormatter">
myFormatter = function(results, form) {
    if ('array' == Art der Ergebnisse[0].results) {
        // Das Ergebnis ist multidimensional und kommt von mehreren Solr-Abfragen
    } sonst {
        // Das Ergebnis ist eine Solr-Abfrage mit der Ergebnisausgabe
    }
};

Hinweis: Es ist kein Fehler, dass var myFormatter nicht verwendet wird; das Weglassen der var stellt sicher, dass die Methode aus dem Verzeichnis den Fensterbereich, der im Attributwert des <form>-Tags Daten-Ergebnis-Formatierer verwendet wurde. Das Formularargument enthält einen live jQuery Referenz auf das <form> DOM-Element, das das verwendete Suchfeld enthält.

Beispiel für Ergebniswerte

// Einfache, einfache Ergebnisse - Objekte enthalten viel mehr Daten als hier gezeigt.
// Übergabe an Javascritpt Ergebnisse Anzeigefunktion als:
Titel:'Ergebnis 1', URL: '....'}, {Titel:'Ergebnis 2', URL: '....'}]

// gruppierte, mehrstufige Ergebnisse - bei Verwendung von QueryProvidern werden die Ergebnisse der Abfrage gruppiert
// je nachdem, wie viele Anfragen gestellt wurden.
[
    Titel:'Group one default query', Ergebnisse: Titel:'Ergebnis 1.1'}, {Titel:'Ergebnis 1.2'}]},
    Titel:'Gruppe zwei aus zusätzlicher Abfrage A', Ergebnisse: Titel:'Ergebnis 2.1'}, {Titel:'Ergebnis 2.2'}]},
    Titel:'Gruppe zwei aus zusätzlicher Abfrage B', Ergebnisse: Titel:'Ergebnis 3.1'}, {Titel:'Ergebnis 3.2'}]}
]

Registrieren Sie zusätzliche Abfragen

Durch die Erstellung einer benutzerdefinierten Klasse, die Solr-Abfrageobjekte verarbeiten kann, ist es möglich, Ihre Ergebnisse zu erweitern (oder das Original zu ändern) Abfrage, die vom Widget verwendet wird, bevor es versendet wird). Beispielsweise können Sie wählen, ob Sie nur nach zwei Hauptkategorien von Ergebnissen suchen möchten und gibt jede Ergebnismenge in einer Gruppe selbst zurück. Oder Sie können die ursprüngliche Abfrage manipulieren, z.B. um zu überprüfen, ob der Benutzer haben als ersten Teil ihrer Suche "Produkt" eingegeben und die Ergebnisse dann auf Produkte beschränkt.

Um dieses Ziel zu erreichen, muss eine Klasse vorhanden sein, die die richtige Schnittstelle von EXT:solrwidget implementiert:

klasse Tx_Myext_QueryProvider_DualCategoryQueryProviderProvider
    implementiert Tx_Myext_QueryProvider_QueryProvider_QueryProviderInterface {

    /**
     * Liefert einen menschenlesbaren Titel/Bezeichnung für dieses Ergebnis
     * gruppe. Sollte Lokalisierungsfunktionen verwenden, um eine
     * übersetzte Bezeichnung, zum Beispiel. Kann, aber nicht erforderlich
     * um mit Hilfe der $queryString und $originalQuery zu bestimmen
     * welches Etikett zurückgegeben werden soll, z.B. Änderung des Etiketts
     * nach welcher Kategorie die erste Query sucht.
     *
     * @param string $queryString Suchanfrage des Benutzers
     * @param tx_solr_Query $originalQuery NULL oder Instanz der ersten Query
     * @return tx_solr_Query|NULL
     */
    öffentliche Funktion getTitle($queryString, $originalQuery) {
        $label = Tx_Extbase_Utility_Lokalization::translate('myGroupTitle','Myext');
        return NULL ===== $label ? Standard-Label': $label;
    }

    /**
     * Prozessabfrage; Umwandlung der ursprünglichen Abfrage in eine Kategorie -
     * eingeschränkte Suche und Rückgabe einer zweiten Anfrage mit einem
     * suche in einer zweiten Kategorie, mit einem zweiten Satz von
     * einschränkungen. Wenn die Funktion stattdessen NULL zurückgab,
     * werden nur die Änderungen an der $originalQuery verwendet.
     *
     * Dadurch steht dem Anwender ein gruppiertes Ergebnis zur Verfügung
     * Javascript-Funktion zur Anzeige der Ergebnisse; jede Gruppe
     * mit dem Ergebnis jeder Abfrage.
     *
     * @param string $queryString Suchanfrage des Benutzers
     * @param tx_solr_Query $originalQuery NULL oder Instanz der ersten Query
     * @return tx_solr_Query|NULL
     */
    public function processQuery($queryString, $originalQuery) {
        $firstCategory ='Produkte';
        $secondCategory ='allgemein';
        // die ursprüngliche Abfrage des Widgets zwingen, die Kategorie einzuschränken:
        $originalQuery->addFilter('category:' . $firstCategory);
        // Erstellen Sie eine zweite tx_solr_Query-Instanz mit zweiter Suche:
        $secondQuery = t3lib_div::makeInstance('tx_solr_Query');
        $secondQuery->setQueryString($queryString);
        $secondQuery->addFilter('category:' . $secondCategory);
        gibt $secondQuery zurück;
    }

}

Um EXT:solrwidget darüber zu informieren, dass Ihr QueryProvider berücksichtigt werden soll, fügen Sie ihn einfach wie folgt in Ihren ext_localconf.php Datei:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['solrwidget']['queryProviders'][] ='Tx_Myext_QueryProvider_DualCategoryQueryProvider';

Der Suchmechanismus liest dann dieses Objekt, erstellt eine Instanz und bittet es, die ursprüngliche Anfrage zu manipulieren und/oder eine zweite Abfrage, die ebenfalls an Solr gesendet werden muss. Ihre QueryProvider-Klasse kann Extbase Mechanismen wie initializeObject und Dependency Injection-Methoden; die einzige Anforderung ist, dass sie die richtige Schnittstelle implementieren müssen.

Benötigen Sie schnelle Hilfe mit dieser Extension? Unser Team von erfahrenen TYPO3-Entwicklern löst Probleme unkompliziert und zum Stundensatz.

Verteilung:SOLRWIDGET ist auf

0 % aller TYPO3 installiert.

  • 0.02 % aller TYPO3 8.7.x Installationen installiert

Gosign-Responsive Index: TYPO3 Installationen nutzen SOLRWIDGET zu

  • 0 % wenn der Gosign-Responsive-Index zwischen 80 % und 100 % ist
  • 100 % wenn der Gosign-Responsive-Index zwischen 60 % und 80 % ist
  • 0 % wenn der Gosign-Responsive-Index zwischen 40 % und 60 % ist
  • 0 % wenn der Gosign-Responsive-Index zwischen 20 % und 40 % ist
  • 0 % wenn der Gosign-Responsive-Index zwischen 0 % und 20 % ist

Pagespeed: TYPO3 Installationen nutzen SOLRWIDGET zu

  • 0 % wenn der Pagespeed zwischen 80 % und 100 % ist
  • 100 % wenn der Pagespeed zwischen 60 % und 80 % ist
  • 100 % wenn der Pagespeed zwischen 40 % und 60 % ist
  • 0 % wenn der Pagespeed zwischen 20 % und 40 % ist
  • 0 % wenn der Pagespeed zwischen 0 % und 20 % ist


Stichprobe n=36680 von Gosign gecrawlte TYPO3-Seiten mit den Top-Level-Domains <.de/.ch/.at>