Hooks

Liste der Hooks

Wir haben folgende Hooks implementiert, um ke_search zu erweitern:

modifyPagesIndexEntry

Verwenden Sie diesen Hook, um die Seitendaten zu modifizieren, bevor sie in die Datenbank geschrieben werden.

modifyNewsIndexEntry

Verwenden Sie diesen Hook, um die tt_news-Daten zu modifizieren, bevor sie in die Datenbank geschrieben werden.

modifyYACIndexEntry

Verwenden Sie diesen Hook, um die ke_yac-Daten zu modifizieren, bevor sie in die Datenbank geschrieben werden.

modifyAddressIndexEntry

Verwenden Sie diesen Hook, um die tt_adress-Daten zu modifizieren, bevor sie in die Datenbank geschrieben werden.

modifyDAMIndexEntry

Verwenden Sie diesen Hook, um die tx_dam-Daten zu modifizieren, bevor sie in die DatenBank geschrieben werden.

additionalResultMarker

Wenn Sie Ihre eigenen Marker (###|###) in das Ergebnislistentemplate hinzugefügt haben, können Sie diese durch diesen Marker ersetzen.

modifyFilterOptions

Verwenden Sie diesen Hook, um die Filteroptionen für den Typ "select" zu modifizieren. Zum Beispiel für besondere Optionen, Beschriftungen, CSS-Klassen. Oder um eine Option im Voraus auszuwählen.

modifyFilterOptionsArray

Verwenden Sie diesen Hook, um Ihre Filteroptionen unabhängig vom Filtertyp zu modifizieren. Zum Beispiel um besondere Optionen oder CSS-Klassen hinzuzufügen. Oder um eine Option im Voraus auszuwählen.

initials

Ändern Sie jede beliebige Variable, während das Plugin initialisiert wird.

modifyFlexFormData

Greifen Sie auf alle zurückgegebenen Werte von ke_search-Flexform zu und modifizieren Sie diese.

customFilterRenderer

Sie können Ihre eigene Filter Darstellungs-Funktion mit diesem Hook schreiben. Sie müssen dann Ihren eigenen Filter-Typ zum TCA-Optionen Array hinzufügen. Schauen Sie unter "Generierung im Frontend" für weitere Informationen.

registerIndexerConfiguration

Verwenden Sie diesen Hook, um Ihre eigene Indexer-Konfiguration in der TCA bekannt zu machen. Schauen Sie unter "Ein eigener Indexer!" für weitere Informationen.

registerAdditionalFields

Dieser Hook ist wichtig, wenn die Indextabelle um eigene Spalten erweitert wurde.

Da wir während des Indexierungsprozesses immer wieder den gleichen SQL-Befehl ausführen müssen, nur mit anderen Werten, macht es Sinn diesen einen bzw. in unserem Falle 3 SQL-Befehle beim MySQL-Server anzumelden. Dieser schaut sich den SQL-Befehl an, analysiert diesen und speichert sich die Struktur des SQL-Befehls ab. Alle SQL-Befehle, die nun diese Struktur aufweisen, werden nicht mehr von Grund auf neu geprüft, sondern werden nahezu direkt ausgeführt. Statt knapp 16 Prozessen, die so ein SQL-Befehl durchlaufen muss, werden nun nur noch ca. 6 Prozesse durchlaufen.

Diesen Geschwindigkeitsvorteil haben wir uns zu Nutze gemacht und registrieren diese Prepared Statements noch vor Ausführung des Indexerprozesses. An dieser Stelle wissen wir aber noch nicht welche Spalten Sie mit Hilfe Ihrer eigenen Extensions unserer Indexer Tabelle hinzugefügt habt. Damit also die Prepared Statements mit Ihren zusätzlichen Spalten sauber beim MySQL-Server registriert werden können, müsst Ihr diesen Hook hier verwenden.

CustomIndexer

Schauen Sie in dem Kapitel über eigene Indexer in dieser Dokumentation nach.

renderPagebrowserInit

Hook für Dritt-Erweiterungen, um den eingebauten Pagebrowser zu modifizieren. Wenn der Hook Inhalt zurückliefert, wird dieser Inhalt als Pagebrowser verwendet.

Datei: lib/class.tx_kesearch_lib.php

pagebrowseAdditionalMarker

Hook für zusätzliche marker im Pagebrowser.

Datei: lib/class.tx_kesearch_lib.php

getLimit

Hook für die Verwendung externer Pagebrowser oder zur Modifizierung des $this->pObj->piVars['page'] Parameters.

Datei: lib/class.tx_kesearch_db.php

modifyResultList

Hook zum Hinzufügen weiterer Marker zur Ergebnisliste.

Datei: pi2/class.tx_kesearch_pi2.php

Additional fields for the indexer

Wenn Sie eigene Einträge zum Indexer hinzugefügt haben, registrieren Sie diese mit dem Hook "registerAdditionalFields". Dies kann mit einem Hook-Aufruf in der "ext_localconf.php" Ihrer Hook EXT erledigt werden. Zum Beispiel:

ext_localconf.php
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['ke_search']['registerAdditionalFields'][] = 'EXT:ke_search_hooks/class.user_kesearchhooks.php:user_kesearchhooks';

 

In der Hook-Klasse "user_kesearchhooks" (im Beispiel oben) müssen Sie eine Methode "registerAdditionalFields" hinzufügen. Zum Beispiel:

Hook "registerAdditionalFields"
class user_kesearchhooks {
	public function registerAdditionalFields(&$additionalFields) {
		$additionalFields[] = 'mynewfield';
	}
}
Clemens (Archiv)
Guten Tag, Kesearch ist Bestandteil meines Abschlussprojekts für die Ausbildung. Ich würde sehr gern auf Ihre Dokumentation verweisen.
Ist es möglich die Dokumentation von Ihnen auch in Form einer PDF zubekommen?


Beste Grüße Clemens
Christian (Archiv)
Hallo Clemens,

die Dokumentation liegt nur online vor, eine PDF-Version pflegen wir nicht parallel.
Alex (Archiv)
Hallo,

gibt es einen Hook der im pi2 sofort nach dem Aufruf angesprochen wird. Evtl vergleich bar mit initialize_postProc in indexed_search?

Ich verwendete das Eingabefeld der Suchmaske auch um Webcodes einzugeben, hat der Suchstring ein gewissen Format soll eine andere Ext. angesprochen werden. Ist bei indexed_search mit die oben genannten hook kein Problem.

Grüße
Alex
Christian (Archiv)
Hallo Alex,

schau einfach mal in die pi2-Klasse hinein. Es gibt zwei Hooks, die ziemlich am Anfang aufgerufen werden. Vielleicht passt einer für Dich.
Lukas (Archiv)
Hallo,

ich habe den Sinn des Hooks registerAdditionalFields ev. noch nicht ganz kapiert.
Ist es damit möglich, zusätzliche Felder aus dem DAM (zum Beispiel "creator") zu indxieren?

Vielen Dank für die Antwort

Lukas
Stefan (Archiv)
Hallo Lukas,

zu allererst habe ich die Erklärung bzgl. dem Hook registerAdditionalFields mal etwas näher erläutert. Hoffentlich wird es jetzt etwas klarer.
In erster Linie ist der Hook customIndexer der richtige Ansprechpartner für Dich, um nahezu beliebige Spalten wie auch dem "creator" in die Indexertabelle zu integrieren. Dazu musste Du aber mit Hilfe Deiner Extension und den Dateien ext_tables.sql und ext_tables.php unsere Indexertabelle entsprechend erweitern. Wenn das dann erledigt ist, musst Du dieses neue Feld "creator" auch bei den Prepared Statements anmelden. Dazu nutzt Du dann den Hook registerAdditionalFields.
Rainer (Archiv)
Um die Klasse tx_kesearch_indexer_types_page per XCLASS zu erweitern (ich wollte die $indexCTypes ergänzen), musste ich ganz unten in der Originalklasse "$TYPO3_CONF_VARS" ersetzen durch $GLOBALS['TYPO3_CONF_VARS']", sonst wurde der XCLASS Eintrag nicht gefunden. Woran könnte das liegen?

Gruß,
rainer
Christian (Archiv)
Hallo Rainer, danke für den Hinweis. Die Variable $TYPO3_CONF_VARS ist zwar global, aber in diesem Scope of view schlicht nicht erreichbar. Deshalb muss man mit GLOBALS darauf zu greifen. Diese Umstellung haben wir gerade für alle Dateien umgestellt, der Fix wird in der nächsten Version enthalten sein.
Meggie (Archiv)
Interessant ist auch noch der Hook modifyFileIndexEntryFromContentIndexer, bei dem man z.B. die Tags der indizierten verlinkten Dateien erweitern kann.
Wolfgang (Archiv)
Hallo,

gibt es einen Hood, den ich nutzen kann, wenn die Suche KEIN Ergebnis liefert? Oder eine andere Möglichkeit an dieser Stelle einzusteigen?

Vielen Dank für eine Antwort!
Gruß Wolfgang
Christian (Archiv)
Hallo Wolfgang, ja gibt es, s. Klasse lib/class.tx_kesearch_lib.php, nennt sich "noResultsHandler".
Chris (Archiv)
Hallo,

erst einmal vielen Dank für die tolle Extension!

Nun zu meiner Frage:
Ich habe per Hook ein zuästzliches Feld hinzugefügt, welches ich zuvor mit einer eigenen Extension in der pages-Tabelle angelegt habe. Das Feld habe ich auch erfolgreich mit Inhalt in der Index-Tabelle befüllen können.

Wie erreiche ich es nun, ohne in der class.tx_kesearch_db.php Änderungen vorzunehmen, dass dieses Feld bei der Suche mit ausgewertet wird?

Was ich erreichen möchte?
Ich habe etwas ähnliches wie ein Branchenbuch. Jede Firma die dort eingetragen ist, kann sich Schlagwörter ausdenken, bei den die Unternehmen gefunden werden. Wie gesagt, es funktioniert alles, wenn ich mein neu hinzugefügtes Feld in der SELECT - Abfrage hinzufüge. Kann ich dies auch machen, ohne die Updatesicherheit zu gefährden?

Vielen Dank für die Hilfe!

Mfg. Chris
Christian (Archiv)
Hallo Chris, hier würde ich am ehesten empfehlen, die neuen Inhalte dem bestehenden Feld "content" in der Tabelle tx_kesearch_index hinzuzufügen, so dass die Volltextsuche diese Inhalte erfasst. Die Frontend-Ausgabe müsste u. U. angepasst werden, wenn es nicht so sein soll, dass diese zusätzlichen Inhalte auch in der Ergebnisliste erscheinen. Dieses Vorgehen lässt sich über Hooks lösen, damit wäre das auch updatesicher.
Jörg, 09-03-16 17:24
Hallo,

wird es irgendwann mal einen Hook geben um die Suchquery beeinflussen zu können um z.B. neue Sortier- und Filtermechanismen hinzufügen zu können?

gruß Jörg
Mathias, 01-03-17 13:57
Hallo,

ich würde gerne einen neuen Filter erstellen (Datum von/bis) Gibt es einen Hook, den ich gut dafür nutzen kann?
Meggie, 05-05-17 11:05
Zu jedem Hook ein simples Beispiel wäre gut.
"additionalResultMarker" funktioniert jetzt durch fluid auch nicht mehr, oder?

Ich hab folgendes Problem:
Ich muss bei meinen Ergebnissen zwei weitere Werte mit ausgeben. Diese habe ich auch schon in tx_kesearch_index in eigene Spalten geschrieben. Doch wie kriege ich diese Werte in die resultrow?
Mateng, 29-08-17 16:26
Den Hook "renderPagebrowserInit" finde ich im Quellcode der Version 2.5.0 nirgendwo. Laut Changelog wurde er 2012 eingeführt. Ist er wieder entfernt worden?
Mateng, 29-08-17 16:29
@Meggie: Doch, additionalResultMarker funktioiert noch.
Man kann neue Werte ins Array $tempMarkerArray einfügen. - z.B. $tempMarkerArray['neuerWert]. Dieser ist dann als {resultrow.neuerWert} im Template Resultlist für jedes Suchergebnis verfügbar.
Christoph, 17-10-17 14:14
Hi, mal eine kurze Frage wird es die EXT:ke_search_hooks auch für die Version 8 geben? Oder ist das vorgehen hier anders? Grüße Christoph
Christian, 17-10-17 15:43
Hallo Christoph, Zufall: Seite heute gibt es eine Version für Version 8: https://github.com/teaminmedias-pluswerk/ke_search_hooks
Ann-Kristin, 08-01-18 11:50
Hallo, eine Frage: gibt es den Hook "additionalContentAfterResultList" noch? Ich kann dazu im Quellcode nix finden. Oder ist dieser in der Premium-Version verfügbar? Ich würde gerne Daten von einer Schnittstelle (nicht direkt eine andere TYPO3-DB wie in der Premium-Version vorgesehen) anfragen und dann weitere Ergebnisse der Ergebnisliste hinzufügen. Ich dachte, dieser Hook wäre evtl. der richtige Ansatzpunkt. Vielen Dank und Grüße, Ann-Kristin
Christian, 08-01-18 16:44
Hallo Ann-Kristin, der Hook existiert tatsächlich nicht mehr, ich habe das aus der Doku entfernt. Der war aber auch eher dazu gedacht, Hinweistexte o. ä. auszugeben, weniger um Ergebnisse hinzuzufügen. Da würde ich eher in die Richtung denken, die zusätzlichen Daten in die Index-Tabelle zu schreiben und von ke_search wie alle anderen Daten durchsuchen zu lassen. Stichwort "Eigener Indexer".
Robert, 08-02-18 16:46
Hallo Christian oder Kollegen,

ich bin gerade dabei mich hinsichtlich eines eigenen Filters per customFilterRenderer Hook zu orientieren. Gibt es dazu noch irgendwo mehr Dokumentation? Hier, auf GitHub, in ke_search_hooks und sonst im Netz habe ich seither nichts gefunden.

Hintergrund ist, ich habe einen eigenen Indexer am laufen, der aus eigenen, per sys_category kategorisierten Datensätzen, Tags generiert. Diese Tags würde ich gerne gruppiert in verschiedene Filter schreiben. D.h. ich will die Filter-Gruppen mit der eigenen Hook-Klasse erzeugen. Die Konfiguration mit was wohin gehört hole ich aus meiner eigenen Extension, das geschieht schon im eigenen Indexer per TYPO3\CMS\Extbase\Configuration\BackendConfigurationManager, also $this->configurationManager->getTypoScriptSetup();, und anschließend über den TYPO3\CMS\Core\TypoScript\TypoScriptService mit $this->typoScriptService->convertTypoScriptArrayToPlainArray();

Vielen Dank für Alles
Robert.

Kommentar hinzufügen

* - Pflichtfeld

Teilen

Ihr Ansprechpartner für ke_search

* Pflichtfelder
zurück zum Kontakt
 

TYPO3 Agentur aus Leidenschaft. Wir erbringen alle Dienstleistungen rund um TYPO3. Von einfachen Webseiten bis hin zu TYPO3 Portal-Webseiten oder hoch komplexen TYPO3-Extensions. Wir engagieren uns im TYPO3 Security Board und in der Community. Unsere TYPO3 Agentur "lebt" TYPO3.