Produktfilter sind im E-Commerce entscheidend für die Benutzererfahrung. In diesem Artikel zeigen wir dir, wie du ein schnelles, dynamisches Filtersystem mit JavaScript und PHP umsetzt – inklusive AJAX für reibungslose Updates.
<form id="filter-form">
<label>
Kategorie:
<select name="category">
<option value="">Alle</option>
<option value="shirts">Shirts</option>
<option value="hosen">Hosen</option>
</select>
</label>
<label>
Preis:
<select name="price">
<option value="">Alle</option>
<option value="low">Unter 50€</option>
<option value="medium">50–100€</option>
<option value="high">Über 100€</option>
</select>
</label>
</form>
<div id="product-list"></div>
Wir starten mit einer einfachen HTML-Struktur, bestehend aus einem Formular zur Filterung und einem Container für die Produktliste.
document.getElementById("filter-form").addEventListener("change", function () {
const formData = new FormData(this);
fetch("get_products.php", {
method: "POST",
body: formData
})
.then(response => response.text())
.then(html => {
document.getElementById("product-list").innerHTML = html;
})
.catch(err => console.error("Fehler beim Laden der Produkte:", err));
});
Mit dieser JavaScript-Funktion holen wir bei jeder Filteränderung neue Produktdaten vom Server. Die Ergebnisse werden direkt auf der Seite angezeigt.
<?php
$category = $_POST['category'] ?? '';
$price = $_POST['price'] ?? '';
$products = [
["name" => "Blaues Shirt", "category" => "shirts", "price" => 29],
["name" => "Schwarze Hose", "category" => "hosen", "price" => 89],
["name" => "Designer-Shirt", "category" => "shirts", "price" => 120],
];
$filtered = array_filter($products, function ($product) use ($category, $price) {
if ($category && $product['category'] !== $category) return false;
if ($price === 'low' && $product['price'] >= 50) return false;
if ($price === 'medium' && ($product['price'] < 50 || $product['price'] > 100)) return false;
if ($price === 'high' && $product['price'] <= 100) return false;
return true;
});
foreach ($filtered as $item) {
echo "<div class='product'>{$item['name']} – {$item['price']}€</div>";
}
Die Datei get_products.php wertet die POST-Daten aus, filtert die Produktliste und gibt sie als HTML zurück.
let debounceTimer;
document.getElementById("filter-form").addEventListener("change", function () {
clearTimeout(debounceTimer);
debounceTimer = setTimeout(() => {
const formData = new FormData(this);
fetch("get_products.php", {
method: "POST",
body: formData
})
.then(response => response.text())
.then(html => {
document.getElementById("product-list").innerHTML = html;
});
}, 300);
});
Mit Debouncing vermeiden wir zu viele schnelle Requests bei mehreren schnellen Änderungen.
Ein dynamischer Produktfilter sorgt für bessere Benutzerführung und höhere Conversion-Raten. Mit JavaScript und PHP lässt sich ein performantes und leicht anpassbares Filtersystem für jeden E-Commerce-Shop realisieren.
Nicht direkt, aber die Logik lässt sich mit eigenen Endpoints und Templates in WooCommerce adaptieren.
Ersetze das $products-Array durch ein SQL-Query und nutze z. B. PDO, um die Daten dynamisch zu laden.
Ja, einfach weitere Felder im Formular und entsprechende Bedingungen im PHP-Code hinzufügen.
Debouncing sorgt dafür, dass Funktionen nicht zu oft hintereinander aufgerufen werden – ideal bei schnellen UI-Interaktionen.
Das Prinzip bleibt gleich – State und API-Aufrufe übernehmen dabei die JavaScript-Frameworks.
Nutze den erweiterten WYSIWYG-Editor in Shopware 6. Dieser Editor ermöglicht die einfache Einbettung von Medien in die Beschreibung und viele weitere Features.
ab 7,99 €* / Monat
Plugin mietenOptimieren Sie Ihren Shop und schaffen Sie damit ein besseres Erlebnis für Ihre Kunden. Dieses Plugin minimiert die Ladezeit Ihres Shops und bietet zahlreiche Konfigurationen.
ab 27,49 €* / Monat
Plugin mietenErstellen und bearbeiten Sie Ihre eigenen Template-Erweiterungen schnell und einfach in der Administration. Anzeige vorhandener Storefront-Vorlagenpfade und -Inhalte.
ab 3,99 €* / Monat
Plugin mietenHinweis: * Alle Preise verstehen sich zzgl. Mehrwertsteuer
x