Sortierungslogik Varianten

20.11.2017 13:45 #1
Andi
Aus Lutherstadt Eisleben
73 Beiträge

Sortierungslogik Varianten

Hallo Herr Schmidt,

ich versuche gerade die Varianten in unseren Shop mit Preisen zu versehen. Dabei ist mir aufgefallen, dass die Sortierungslogik im Frontend nach dem Anfangsbuchstaben des Namens der Variante dargestellt wird.

Beispiel:

Variante 1 Name A

Variante 2 Name B

Variante 3 Name C

Variante 4 Name C

Anschließend ändern Sie Variante 4 Name C in Variante 4 Name A um. -> Diese Variante rutscht dann ganz nach oben. Diese wirkt sich natürlich auch im Frontend aus.

Wenn man in einem Shop jeder Variante einen Preis vergeben hat, rutscht die Variante im Frontend direkt nach oben.

Besser wäre es, wenn er die Varianten so nimmt wie sie eingetragen wurden, ohne eine nachträgliche Sortierung vorzunehmen.

Gruß,

Andreas Kroll

22.11.2017 09:37 #2
Andi
Aus Lutherstadt Eisleben
73 Beiträge

Es würde mir auch ein Hotfix an einer bestimten Stelle einer Datei genügen.

27.11.2017 11:13 #3
Andi
Aus Lutherstadt Eisleben
73 Beiträge

Ich habe mittlerweile herrausgefunden, dass es nicht an der sortierungslogik im backend liegt.

Das konnte ich lösen mit:

$GLOBALS['TL_DCA']['tl_product_variant']['list']['sorting']['fields'] = array('title DESC');
$GLOBALS['TL_DCA']['tl_product_option']['list']['sorting']['fields'] = array('title DESC');
$GLOBALS['TL_DCA']['tl_product_type']['list']['sorting']['fields'] = array('title DESC');

Es liegt daran, dass er sich prinzipiell den günstigsten preis der variante nimmt, allerdings verzählt er sich mit 3 stelligen ziffern die mit 1 beginnen.

beispiel:

1

10

2

210

10000 (<- dieser preis ist für ihn der günstigste preis, was natürlich verkehrt ist)

27.11.2017 11:36 #4
Andi
Aus Lutherstadt Eisleben
73 Beiträge

[root] -> system -> modules -> simple_products_shop -> classes -> SimpleProductsBooking.php 

Sehen Sie sich dort die Zeile 429 an.

Dort steht:

$objPrice = $this->Database->prepare("SELECT id, IF(price!='',price,'$objProduct->price') AS price, amount FROM tl_product_variant WHERE " . ($arrPriceWhere ? implode(' AND ', $arrPriceWhere).' AND ' : '') . " pid = ? AND published = 1 GROUP BY price ORDER BY price ASC")->execute($intProductId);

es müsste richtig heissen:

$objPrice = $this->Database->prepare("SELECT id, IF(price!='',price,'$objProduct->price') AS price, amount FROM tl_product_variant WHERE " . ($arrPriceWhere ? implode(' AND ', $arrPriceWhere).' AND ' : '') . " pid = ? AND published = 1 GROUP BY price order by CAST(price  AS DECIMAL(10,2));")->execute($intProductId);

27.11.2017 11:41 #5
Christian Schmidt
Fast & Media Team
Aus Blankenburg (Harz)
361 Beiträge

Hallo Herr Kroll,

ich verstehe nicht genau was das Ziel ist, also wie soll es final aussehen? Dafür bräuchte ich mal einen Screenshot oder so.

Aber davon abgesehen ist es schwierig hier etwas zu ändern, da es im Backend an dieser Stelle keine richtige Sortierungsmöglichkeit gibt (aus Contao technischen Gründen).

Und selbst wenn das ginge, wäre es schwierig, da die Varianten für die Frontend-Aufbereitung vorher gruppiert werden und doppelte Einträge so rausgefiltert werden.

Natürlich ist es nicht ganz zielführend alphabetisch zu sortieren, aber eine Sortierung nach id durchzuführen wäre noch problematischer. Denn das könnte dazu führen, dass jemand bestehende Varianten abändert damit sich die Reihenfolge im Frontend ändert. Im schlimmsten Fall würde das dazu führen, dass Artikel, die gerade im Warenkorb, Merkliste, Backend usw. hinterlegt sind, sich einfach ändern von der Bezeichnung her und ggf. sogar vom Preis.

Schicken Sie am besten per Mail noch mal einen Screenshot + Frontend/Backend Links + Zugang. Am besten wäre eine Testumgebung.

Viele Grüße

27.11.2017 11:57 #6
Christian Schmidt
Fast & Media Team
Aus Blankenburg (Harz)
361 Beiträge

"Sehen Sie sich dort die Zeile 429 an."

Das ändert nichts an der Darstellung im Frontend. Dort wird lediglich ermittelt wie hoch die Anzahl und der Preis, der jeweilig gewählten Variante ist. 

Antworten

Datenschutz*
Bitte rechnen Sie 9 plus 1.