Probleme mit den Merkmalkombinationen

Artikel mit Merkmalkombinationen erscheinen nicht in Bestsellerliste

Die Bestsellerliste greift auf ein Feld in der Datenbank zurück, in dem jeder Verkauf eines Artikels hochsummiert wird. Bei Artikeln mit Merkmalkombinationen wird nur bei der Merkmalkombination hochgezählt. Der Hauptartikel, dem die Merkmalkombination zugeordnet ist, wird nicht berücksichtigt und steht immer auf 0 (keine verkauften Artikel).
Bei der Abfrage der meistverkauften Artikel für die Bestsellerliste werden aber nur die Verkaufszahlen der einzelnen (Haupt-)Artikel abgefragt. Damit können Artikel, die Merkmalkombinationen haben, nicht in der Bestsellerliste erscheinen.

Falsche Darstellung der Verkaufszahlen in der ArtikelStatistik

In der Artikelstatistik werden Artikel nach der Zahl der jeweiligen Verkäufe aufgelistet. Hier werden aber auch die Merkmalkombinationen gelistet. Die sind aber quasi nur Teile eines angelegten Artikels. Also ein T-Shirt in den Farben rot, blau und grün wird mit den einzelnen Farben gelistet, nicht als T-Shirt mit der Gesamtverkaufszahl der Farben.
Damit ist die Artikelstatistik eher verwirrend als informativ.

Verschenkte SEO-Funktion und schlechtere Besucherinformation

Die Bestsellerliste ist eine einfache Möglichkeit um eine bessere interne Verlinkung zu erreichen. Zudem ändert sich durch die laufenden Verkäufe auch der Inhalt der Bestsellerliste. Das veranlasst Suchmaschinen in kürzeren Intervallen die Seiten zu besuchen und die Seiten als laufend aktualisiert anzusehen. Und das alles ohne manuellen Eingriff des Shopbetreibers.
Ideal ist natürlich, dass alle Artikel in dieses Spiel eingebunden sind. Bei Shops, die überwiegend Artikel mit Merkmalkombinationen anbieten, bleibt ein großer Teil des Nutzens der Bestsellerliste ungenutzt.

Die Lösung

Eigentlich ist es ja ganz einfach: Beim erfolgreichen Verkauf muss bei Artikeln mit Merkmalkombinationen nicht nur die Verkäufe der Merkmalkombination hoch gezählt werden, sondern eben auch beim Elternartikel. Und zwar tatsächlich bei beiden Artikeln. Dann würden die Bestseller korrekt angezeigt und bei der Artikelstatistik könnte eine kleine Anpassung bei der Datenbankabfrage auch die sauberere Auflistung der Hauptartikel liefern. Bei den Artikeln mit Merkmalkombinationen eben mit der Summe der Verkäufe der einzelnen Kombinationen.

In der /includes/functions.bestellungen.inc.php ist in der Funktion SaveBestellung(...) so etwa ab Zeile 532 der unten angebene SQL-Code. Damit wird beim Artikel der Lagerbestand korrigiert und die Zahl der Artikelverkäufe hochgezählt.

$SQLString = "";
      $SQLString .= "SELECT " . TABLE_ARTIKEL . ".merkmalkombinationparentid ";
      $SQLString .= "FROM " . TABLE_ARTIKEL . " WHERE " . TABLE_ARTIKEL . ".id = '" . $WarenkorbData["artikel_id"] . "'";;
      $Result = mysql_fetch_object(errorlogged_mysql_query($SQLString));

Damit bei Artikeln mit Merkmalkombinationen die Verkäufe beim Elternartikel auch hochgezählt werden, habe ich direkt danach diesen Code eingefügt:

if ($Result->merkmalkombinationparentid > 0){
         // der Artikel ist eine Merkmalkombination
          $SQLString = "";
          $SQLString = "UPDATE " . TABLE_ARTIKEL . " SET ";
          $SQLString .= TABLE_ARTIKEL . ".wie_oft_bestellt = (" . TABLE_ARTIKEL . ".wie_oft_bestellt + '" . $WarenkorbData["menge"] . "') ";
          $SQLString .= "WHERE " . TABLE_ARTIKEL . ".id = '" . $Result->merkmalkombinationparentid . "'";
          $MySQLQueryReference = errorlogged_mysql_query($SQLString);
      }

Damit funktioniert jetzt, dass die Artikel mit den Merkmalkombinationen auch bei den Bestsellern angezeigt werden.

Die Artikelstatistik richtig anzeigen lassen

Jetzt muss nur noch eine Zeile in die /admin/statistik/artikel.php eingefügt werden:

$abfrageB .= "WHERE " . TABLE_ARTIKEL . ".merkmalkombinationparentid = '0'";

Und zwar ziemlich am Anfang der Datei, so um die Zeile 80, da ist die Datenbankabfrage erstellt. Der Block muss danach so aussehen:

....
	$abfrageB .= "LEFT JOIN " . TABLE_VARIANTE . " table_variante3 ON  " . TABLE_ARTIKEL . ".variante3 = table_variante3.id ";
	$abfrageB .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " table_variante_langu3 ON ((table_variante3.id = table_variante_langu3.variante_id) AND (table_variante_langu3.language_id = " . $LanguageID . ")) ";
	$abfrageB .= "LEFT JOIN " . TABLE_VARIANTE . " table_variante4 ON  " . TABLE_ARTIKEL . ".variante4 = table_variante4.id ";
	$abfrageB .= "LEFT JOIN " . TABLE_VARIANTE_LANGU . " table_variante_langu4 ON ((table_variante4.id = table_variante_langu4.variante_id) AND (table_variante_langu4.language_id = " . $LanguageID . ")) ";

    $abfrageB .= "WHERE " . TABLE_ARTIKEL . ".merkmalkombinationparentid = '0'";

	$abfrageB .= "order by wie_oft_bestellt desc limit 0,100";

Und genießen ...

War jetzt eigentlich gar nicht viel Aufwand, oder? Sieht aber sowohl in den Bestsellern, als auch in der Artikelstatistik doch gleich viel besser aus.

Kommentar abgeben:

Kommentare:

Kommentar von Hermann |

Hallo Magnus,

für die Version 2.3 gilt das nicht mehr, oder?
In der angegebenen Datei ist der Code nicht vorhanden.