Zufällige Produkte aus derselben Kategorie mit der Elternkategorie Füllen
-
11-12-2019 - |
Frage
Ich möchte mit 1.9.0.1 Folgendes tun:
12 zufällige Upsell-Produkte aus derselben Kategorie als aktuelles Produkt. Sie müssen verkauft sein. Sie sollten nicht bereits in verwandten Produkten sein. Sie sollten nicht im Wagen sein.
Und wenn es in dieser Kategorie nicht 12 gibt, füllen Sie den Rest mit Produkten aus der Kategorie der Mutterkategorie.
Ich denke, das wird komplex, aber ich kann es tun.Einfach nicht sicher, ob ich es gut tun kann: -)
Meine Frage ist, dass ich mich um die Leistung mit dieser Auswahlkomplexität sorgen muss?Was meinst du?
-code-Beispiele wären großartig, dass ich sie vergleichen kann.
Lösung
Ich habe kürzlich etwas Ähnliches umgesetzt und wird den relevanten Code unten teilen. Aber zuerst einige Kommentare über Leistung, da dies die Frage war:
Allgemeine Gedanken über Leistung für Ihre Anforderungen:
- "Sie sollten nicht im Wagen sein" bedeutet, dass Sie nur begrenzt haben, um den Upsell-Block zu cache. Ich empfehle dringend, es trotzdem zu tun, aber den Cache-Schlüssel und den Cache-Lebensdauer nur einzustellen, wenn der Warenkorb leer ist.
- nicht generakodicetagcode, da es zu einer ressourcenintensiven Temp-Tabellenkopie führt. Es muss alle Ergebnisse in eine temporäre Tabelle laden, zu jeder Zeile eine Zufallszahl zuweisen und dann ohne Index sortieren. Stattdessen rufen wir alle Kandidaten-IDs ab (dies ist schneller und der Datenbetrag ist auch für große Kataloge verwaltet), wählen Sie einige zufällig ein und rufen Sie diese Zeilen direkt ab. Sie können in meinem Blog detailliert lesen: http://www.schmengler-se.de/de/2015/09/show-random-products-in-magento-you-ar-doing-in-wrong/ < / a>
Spezielle Leistungsprobleme mit Ihrer Lösung
- Verwenden Sie nicht generakodicetagcode mit EAV-Kollektionen, wählen Sie nur, was Sie brauchen
- nicht ganz sicher, aber ich bezweifle, dass
ORDER BY RAND()
die MySQL-Indizes effizient verwenden kann
Komplette Lösung
Dies ist ein Beobachter für das addAttributeToSelect('*')
-Ereignis. Es verwendet die von der Produktkategorie bereitgestellte Produktkollektion, da ich nicht auf den Elternteil zurückfallen musste, aber ich bin sicher, dass Sie es anpassen können.
generasacodicetagpre.
Einige Teile, die ich markieren möchte:
generasacodicetagpre.
Dies schließt das Produkt selbst aus und die Produkte, die bereits manuell als Upsell-Produkte definiert sind (ich verlasse sie und füllt nur die Rohlinge mit zufälligen Produkten)
generasacodicetagpre.
Dies erstellt die Produktkollektion, um die erforderlichen Daten zu laden, um die Preise anzuzeigen, den Produktlink und alle Attribute, die als "in Produktliste" konfiguriert sind, jedoch nicht mehr.
Spezielle Leistungsprobleme mit Ihrer Lösung
- Verwenden Sie nicht generakodicetagcode mit EAV-Kollektionen, wählen Sie nur, was Sie brauchen
- nicht ganz sicher, aber ich bezweifle, dass
ORDER BY RAND()
die MySQL-Indizes effizient verwenden kann
Komplette Lösung
Dies ist ein Beobachter für das addAttributeToSelect('*')
-Ereignis. Es verwendet die von der Produktkategorie bereitgestellte Produktkollektion, da ich nicht auf den Elternteil zurückfallen musste, aber ich bin sicher, dass Sie es anpassen können.
generasacodicetagpre.
Einige Teile, die ich markieren möchte:
generasacodicetagpre.
Dies schließt das Produkt selbst aus und die Produkte, die bereits manuell als Upsell-Produkte definiert sind (ich verlasse sie und füllt nur die Rohlinge mit zufälligen Produkten)
generasacodicetagpre.
Dies erstellt die Produktkollektion, um die erforderlichen Daten zu laden, um die Preise anzuzeigen, den Produktlink und alle Attribute, die als "in Produktliste" konfiguriert sind, jedoch nicht mehr.
ORDER BY RAND()
die MySQL-Indizes effizient verwenden kann
Komplette Lösung
Dies ist ein Beobachter für das addAttributeToSelect('*')
-Ereignis. Es verwendet die von der Produktkategorie bereitgestellte Produktkollektion, da ich nicht auf den Elternteil zurückfallen musste, aber ich bin sicher, dass Sie es anpassen können.
generasacodicetagpre.
Einige Teile, die ich markieren möchte: generasacodicetagpre.
Dies schließt das Produkt selbst aus und die Produkte, die bereits manuell als Upsell-Produkte definiert sind (ich verlasse sie und füllt nur die Rohlinge mit zufälligen Produkten) generasacodicetagpre.
Dies erstellt die Produktkollektion, um die erforderlichen Daten zu laden, um die Preise anzuzeigen, den Produktlink und alle Attribute, die als "in Produktliste" konfiguriert sind, jedoch nicht mehr.
Andere Tipps
Hier ist mein funktionierender Code: generasacodicetagpre.
Ich denke, es gibt einige, um zu optimieren?:)
Setzen Sie dies an, um zu sehen.phtml Es wird funktionieren.Sie müssen nur die CSS anpassen generasacodicetagpre.