Sorry ich habe das Thema total vergessen. Das wurde in meinem Shop mittlerweile auch ganz anders gelöst. Ich erachte es als sehr sinnvoll solche Produkte zurückzustellen. Wir berechnen daher bei uns einen score wo verschiedene Parameter entscheiden, wie die beste Reihenfolge ist. Aber ok das ist ein anderes Thema.
Zur Lösung: der Core Code ist hier wirklich hässlich... Du verwendest auf deinem Shop das Filter Modul. Deshalb muss man die Lösung da suchen. Das Module heisst blocklayered. Suche die Datei blocklayered.php. Es gibt dort eine Funktion:
public function getProducts($selected_filters, &$products, &$nb_products, &$p, &$n, &$pages_nb, &$start, &$stop, &$range)
Die musst du bearbeiten...
Suche die Zeile:
m.name manufacturer_name,
Füge danach folgendes ein:
IF(stock.quantity>0,1,0) AS sort_helper,
Nun füge zudem nach "ORDER BY" folgendes ein:
sort_helper DESC,
Nun sollte es funktionieren. Hier noch ein kleiner Screenshot:
Funktioniert das so für dich? Ich konnte diesen Code nicht intensiv testen, da meine Shops nicht dieses Modul nutzen.
ACHTUNG: bei jedem Update dieses Modul wirst du das wieder anpassen müssen.