swSearch triggerSearchRequest manuell ausführen?

Gibt es eine JS-Möglichkeit um bei swSearch() die Funktion triggerSearchRequest auch manuell ausführen zu lassen? Also zum Beispiel innerhalb einer anderen JS-Funktion.

Also manuell per code? :laughing:

Schau dir mal shopware/search.tpl at 5.7 · shopware/shopware · GitHub an. Die Suche läuft über einen form submit. In JS musst du also nur den form submit automatisch anstossen, vgl. z.B. How to Submit a Form Using JavaScript | JavaScript Coder

LG Phil

Vielen Dank, aber das meinte ich nicht. triggerSearchRequest setzt eine Ajax-Abfrage ab, kein Submit. Ich will nicht das Formular senden, sondern nur die Ajax-Abfrage.

Wird der nicht mit einem click ins searchfeld getriggert? click() ?
ggf kannst du noch einen eigenen trigger overriden?

Du meinst vermutlich das hier: https://github.com/shopware/shopware/blob/a9a4e2927d992c55748c9f3f0f1e3e3d1afacc5d/themes/Frontend/Responsive/frontend/_public/src/js/jquery.search.js

Aber das macht doch auch nur einen submit. Der form muss ja nicht sichtbar sein, den kannste ja auch mit JS generieren.

Edit: Zeile 401ff - meinst du diese Abfrage?

Was willst du denn erreichen?

LG Phil

Genau, eben diese Funktionalität aus Zeile 401 über ein völlig anderes JS aufrufen zu können. Es soll bei einer bestimmtem Bedingung die Vorschausuche erneut durchgeführt werden. Das Formular selber soll aber NICHT abgesendet werden. Also es soll sich dann nicht die Such-Seite öffnen.

Das möchte ich erreichen.

Uff ist das Kniffellig.
Es gibt sicher eine Lösung wie Statemanager oder $.plugin … ich komme nicht drauf.
Wie wäre es mit einer alternative ?

fetch("https://DEINEDOMAIN/ajax_search?sSearch=test")
.then(response => response.text())
.then(response => console.log(response));

Die Sache ist noch kniffliger, aber das will ich euch nicht antun :slight_smile:

Ich habe auch schon überlegt, ob man nicht einen Tastendruck (den man ja bei der Eingabe im Suchfeld macht) auch irgendwie von außerhalb simulieren kann.

Hi R4M,

das sollte eigentlich gar nicht so schwer sein, wenn ich dich richtig verstanden habe willst du ja nur den gleichen Mechanismus nutzen wie es bei der Suchvorschau (also beim Eingeben von Text im Suchfeld) gemacht wird. Am Ende des Tages ist es ja nur ein simpler HTTP Request, da sehe ich also kein grundsätzliches Problem. Ich müsste mir das nur mal genauer ansehen, hab aber im Moment nur Zugriff über iPad. Wenn du dich noch ein wenig gedulden kannst, sehe ich mir das gerne mal in den nächsten Tagen an, sobald ich wieder an meinen Rechner komme.

LG Phil

Keine Eile, das ist jetzt nichts was bis morgen fertig sei soll. Ich bin da ganz entspannt :slight_smile:

Hallo R4M,

ich hab mir das jetzt mal genauer angesehen. Ist eigentlich recht simpel. Die Suche läuft über einen AJAX-Request auf /ajax_search?sSearch=suchbegriff.
In der Antwort liefert der Shop dann ein bereits fertig formatiertes HTML zurück, was folgenden Aufbau hat:

<ul class="results--list">
	<li class="list--entry block-group result--item">
		<a class="search-result--link" href="[LINK ZUM TREFFER1]" title="ARTIKELNAME TREFFER1">
			<span class="entry--media block">
				<img srcset="[LINK ZU THUMB], [LINK ZU THUMB2x] 2x" alt="ARTIKELNAME TREFFER1" class="media--image"</span>
			<span class="entry--name block">ARTIKELNAME</span>
			<span class="entry--price block">
				<div class="product--price">
					<span class="price--default is--nowrap">1,23&nbsp;&euro; *</span>
				</div>
				<div class="price--unit" title="Inhalt"/>
			</span>
		</a>
	</li>
	<li class="list--entry block-group result--item">
		<a class="search-result--link" href="[LINK ZUM TREFFER2]" title="ARTIKELNAME TREFFER2">
			<span class="entry--media block">
				<img srcset="[LINK ZU THUMB], [LINK ZU THUMB2x] 2x" alt="ARTIKELNAME TREFFER2" class="media--image"</span>
			<span class="entry--name block">ARTIKELNAME</span>
			<span class="entry--price block">
				<div class="product--price">
					<span class="price--default is--nowrap">1,23&nbsp;&euro; *</span>
				</div>
				<div class="price--unit" title="Inhalt"/>
			</span>
		</a>
	</li>
	<li class="entry--all-results block-group result--item">
		<a href="https://dein.shop/search?sSearch=SUCHBEGRIFF" class="search-result--link entry--all-results-link block">
			<i class="icon--arrow-right"/>Alle Ergebnisse anzeigen
		</a>
		<span class="entry--all-results-number block">29 Treffer</span>
	</li>
</ul>

Deine Frage war jedoch, wie man das per JavaScript aufrufen kann, daher hier ein kleines Codebeispiel (in der Annahme, dass diese HTML-Seite unterhalb deines Shops liegt):

<!DOCTYPE html>
<html>
<body>

<div id="suche">
<h1>Webshop-Suche</h1>
<button type="button" onclick="loadDoc()">Suche starten</button>
</div>
<div id="demo">Hier stehen die Ergebnisse</div>

<script>
function loadDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200 {
      document.getElementById("demo").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/ajax_search?sSearch=suchbegriff", true);
  xhttp.send();
}
</script>

</body>
</html>

Doku zu XMLHTTPRequest findest du z.B. hier: XMLHttpRequest - Web API Referenz | MDN (mozilla.org)

Achso, den Weg über die etwas neuere fetch() API hatte ja bereits @brettvormkopp beschrieben, daher hab ich das nicht nochmal angegeben. Siehe Fetch API - Web API Referenz | MDN (mozilla.org) und Using Fetch - Web APIs | MDN (mozilla.org)

Hoffe das hilft Dir schon mal weiter.

LG Phil

Erst einmal vielen Dank für deine Mühe!

Ich schaue mir das die nächsten Tage mal an, wenn ich etwas Ruhe habe. Bis dahin vorerst vielen Dank.

lg Mario