Jump to content

Dynamische Artikelnummern


Recommended Posts

Hallo zusammen

 

In meinem Shop (1.6.0.9) habe ich Artikel mit Varianten, wie FARBE und LÄNGE. Die einzelnen Basisartikel haben für sich eine Artikelnummer. Lässt sich die finale Artikelnummer während dem Bestellprozess in Abhängigkeit der gewählten Variante generieren ?

 

Artikel: Holz, Blech, Gummi

 

Farben (als Variante)

schwarz, braun, gelb

 

Länge (als Variante)

2m, 3m, 4m

 

Die finale Artikelnummer sollte in der Art wie folgt aussehen: Holz-rot-2

 

Kann ich das mit PS machen?

 

Beste Grüsse

Hansjürg

Link to comment
Share on other sites

Ich danke Dir für die schnelle Antwort. Hat man ein paar hundert Artikel mit mit ein paar Varianten sieht das nach ziemlich viel Arbeit aus. Gibt es hierfür bzw. für Deinen Vorschlag eine effiziente Lösung?

 

Beste Grüsse

Hansjürg

 

Hallo Hansjürg,

 

wieso nutzt du nicht den Artikelimport via CSV-Datei und reizt einfach Excel dabei ein bißchen aus?

 

Artikel: Holz, Blech, Gummi

 

Farben (als Variante)

schwarz, braun, gelb

 

Länge (als Variante)

2m, 3m, 4m

 

Die finale Artikelnummer sollte in der Art wie folgt aussehen: Holz-rot-2

Artikel Farbe Länge Artikel-Nr.

Holz rot 2 Holz-rot-2

Holz rot 3 Holz-rot-3

Holz rot 4 Holz-rot-4

 

Das Feld Artikel-Nr. generierst du mit dem Excel-Befehler verketten, und zwar so:

=VERKETTEN(A2;"-";B2;"-";C2)

Die Zellenmatrix kann natürlich anders lauten, je nachdem, wieviele Spalten deine Import-Tabelle hat. Statt des Semikolons gehen auch ein doppeltes Ampersand (&&).

 

Dieser Befehl wird dann einfach - "dynamisch"  ;)  - auf einen Rutsch in die folgenden Zellen kopiert. Bevor du dann allerdings die Datei importierst, muss diese Formel-Spalte in eine normale Testspalte umgewandelt werden. Dazu klickst du einfach auf den Spaltename zur Markierung der ganzen Spalte und klickst dann im Menü Bearbeiten zunächst auf kopieren (alternativ Tastenkombination STRG+C) und anschließend nach einem Mausklick rechts wählst du

 

Inhalte einfügen ...

 

und änderst die Standardauswahl "Alles" auf "Werte". Danach ist die Importdatei, die ja wahrscheinlich bei dir noch andere Felder enthält, in Bezug auf die Artikel-Nr. fertig und du kannst sie als CSV-Datei abspeichern. Wichtig ist nur, dass du diese Funktion nicht in einer bereits bestehenden CSV-Datei anwendest, da das eine reine Textversion ist und Excel-Befehle hier nicht funktionieren.

 

Gruß

Mutabor

Edited by Mutabor (see edit history)
  • Like 1
Link to comment
Share on other sites

  • 1 year later...

Hallo,

 

ich bin gerade auch auf dieses Problem gestoßen.

Allerdings habe ich bisher mit JTL gearbeitet und bin es nicht gewohnt, mit Tabellen solche aufwendigen Artikelnummern zu generieren.

Mich wundert es schon etwas, dass solch eine elementare Funktion nicht im Prestashop 1.6.x.x integriert wurde.

Schließlich müssen Artikelnummern bei fast jedem Marktplatz eindeutig sein.

Vielleicht gibt es ja doch schon etwas neues.

 

Gruß

 

Domenico.

Link to comment
Share on other sites

Ich glaube, da liegt ein Missverständnis vor:

 

ID = (fortlaufend) hochgezählte, eindeutige interne Nummer der Datenbank-Tabelle ps_product

Reference  (dt Artikel-Nr.) = frei definierbare beliebig lange Artikel-Nummer

 

Nur auf das letztgenannte Feld bezog sich dieser Topic. Denn PrestaShop schreibt dir schließlich nicht vor, nach welchem System du deine Artikel-Nummern vergibst.

Link to comment
Share on other sites

Hallo,

 

na ja, Fakt ist, dass bei der generierung von Varianten immer eine automatische Generierung von fortlaufenden oder auch benutzerdefinierte Artikelnummern generiert werden sollten.

Da dies Prestashop anscheinend nicht kann, ist dies ein riesen Manko und wertet das ganze natürlich ab.

Ich habe bisher noch keinen Shop oder Software gesehen, welche/r Varianten mit der gleichen Artikelnummer generiert.

Und ich meine hier Artikelnummer, nicht die ID.

 

Da ich nicht für jede Kleinigkeit ein Modul kaufen möchte, muss ich hier nach einer Lösung in Form von PHP Skript oder sonstigem SQL Code suchen, um automatisch fortlaufende Artikelnummern zu generieren.

 

Gruß

 

Domenico

Link to comment
Share on other sites

Na ja, es gibt durchaus Shop-Systeme, die das nicht können. Aber ich gebe dir recht: Shopware beispielsweise beherrscht diese Vergabe von Artikelnummern einschließlich der Varianten. Nur kannst du hier außer einem globalen Präfix keinerlei eigenes System verwenden! Das ist dann wiederum der Nachteil. PrestaShop erlaubt eine völlig freie Definition - dafür ist die Vergabe der Artikelnummer nicht automatisiert.

 

Was hättest du also lieber? Wenn du auf ein starres Verfahren wie etwa bei Shopware nicht verzichten möchtest, dann dürfte PrestaShop wohl nicht das richtige für dich sein. Es kommt immer darauf an, wo man die Prioritäten setzt. :)

Link to comment
Share on other sites

 

Ich habe bisher noch keinen Shop oder Software gesehen, welche/r Varianten mit der gleichen Artikelnummer generiert.

Und ich meine hier Artikelnummer, nicht die ID.

 

Ich auch nicht - auch bei PrestaShop noch nie!,

 

Vlt. machst du ein paar Angeben: Welche Prestashopversion, Wie erzeugst du die Varianten, ... und schau dir im Backoffice bei deinen Varianten das Feld "Artikelnummer" einfach mal an.

 

Grüsse

Whiley

 

Edit:

Uups Überschneidung, Rainer :)

Edited by Whiley (see edit history)
Link to comment
Share on other sites

Hallo,

 

nett das alle hier mitwirken.

 

Also ich habe die letzte Version 1.6.1.4 vom prestashop.

Ich lege einen neuen Artikel an, gebe diesem die schon vorher genutzte Artikelnummer (z, B. AT26258) und lasse an Hand der hinterlegten Variantenwerte automatisch die Varianten generieren.

Danach haben alle Varianten die Artikelnummer AT26258 des Vaters.

 

Gruß

 

Domenico

Link to comment
Share on other sites

 

Ja, da stehen alle Varianten schön aufgelistet und bei Artikelnummer haben alle die gleiche.

 

Bei der PS 1.6.1.4 kannst du den Effekt nur erreichen wenn du die Varianten über den Generator erzeugst und ganz unten bei "Standard-Referenz" (müßte eigentlich Standard-Artikelnummer heißen) einen Wert (default Artikelnummer des Grundprodukts) einträgst, dieser Wert wird dann in der Tat gewollt bei jeder Variante gleich (Standard halt) eingetragen.

Üblicherweise läßt man das Feld offen und füllt die Artikelnummern falls die je Variante unterschiedlich sein sollen manuell ein (nach eigenem Schema, eigenen Vorgaben).

Gängige Praxis ist es die Artikel, Varianten u. dazugehörige Artikelnummern via csv einzulesen.

 

Grüsse

Whiley

Edited by Whiley (see edit history)
Link to comment
Share on other sites

Aber wenn man für jeden Artikel, welchen man im Prestashop generiert, die Artikelnummern per csv einlesen muss, dann ist es einfach unnötiger Arbeitsaufwand.

Auch müsste man die Artikeldaten erst ein mal exportieren um sie dann mit der korregierten Nummer wieder zu importieren.

 

Bitte nicht böse sein, aber das ist einfach der Stand vor 2010, als Varianten noch gar nicht üblich waren bei Ebay und CO.

 

Ich werde mir hier etwas zusammenbastlen, um die Artikelnummern aus der Nr. des Vaters und den Werten der Varianten zusammenstetzt und einfügr.

 

Gruß

 

Domenico

Link to comment
Share on other sites

Das ist aber zu sehr auf die Standardvarianten bezogen, Jörg. Und zu allem Überfluss funktioniert es nicht mal, zumindest nicht als Override.

Der Code ist doch sehr einfach u. nachvollziehbar aufgebaut und kann bei Bedarf ganz einfach angepasst/modifiziert werden.

Auch deine Einschätzung, daß das Ganze nicht funktioniert kann ich nicht teilen, Rainer - was genau soll denn nicht funktionieren?

 

Ich habe das im Demo-Shop mal eingebaut, Beispiel hier:

http://quintilius-varus.de/home/8-testshirt.html#/2-size-m/10-color-red

 

Grüsse

Whiley

Link to comment
Share on other sites

Hallo,

 

danke erst ein mal für den Link zur Lösung.

Allerdings muss ich mich erst ein mal duch meine Bücher arbeiten, um dies nach meinen Bedürfnissen anzupassen.

Mir würde es ausreichen, wenn bei der automatischen Erstellung der Varianten einfach Nummern generiert würden.

Beispiel: AtNr.Vater-001

              AtNr.Vater-002

              AtNr.Vater-002

              AtNr.Vater-002

Das dürfte auch etwas einfacher sein, da hier keine Werte aus den Varianten ausgelesen werden müssen.

Ich finde die Daten aus den verschiedenen Tabellen, welche zu den Produkten gehören auch nicht so leicht.

Habe mich ein mal per SQL-Workbench verbunden, um die Striktur zu verstehen.

 

Was bedeutet eigentlich dieses "Override"?

 

Gruß

 

Domenico

Link to comment
Share on other sites

Hallo,

 

ich bekomme die Lösung aus dem Link nicht hin.

Die Trennzeichen (bei mir -) werden beim Generieren der varianten hinzugefügt.

Meine  Werte für Farbe und Größe nicht.

Ich habe die ID für Farbe und Größe aus der Tabelle `ps1611_attribute_group_lang` genommen.

protected function addAttribute($attributes, $price = 0, $weight = 0)
      {
        foreach ($attributes as $attribute)
        {
          $price += (float)preg_replace('/[^0-9.-]/', '', str_replace(',', '.', Tools::getValue('price_impact_'.(int)$attribute)));
          $weight += (float)preg_replace('/[^0-9.]/', '', str_replace(',', '.', Tools::getValue('weight_impact_'.(int)$attribute)));
          //get attribute name
          $sqltest = 'SELECT * FROM  `attribute_lang` WHERE  `id_attribute` = '. $attribute .' LIMIT 0 , 1';
          if ($resultstest = Db::getInstance()->ExecuteS($sqltest))
              foreach ($resultstest as $rowtest)
                  $id_attribute_name = $rowtest[name];
                //echo $id_attribute_name;
          //get attribute color or size
          $sqltest2 = 'SELECT * FROM  `attribute` WHERE  `id_attribute` = '. $attribute .' LIMIT 0 , 1';
          if ($resultstest2 = Db::getInstance()->ExecuteS($sqltest2))
              foreach ($resultstest2 as $rowtest2)
                  $id_attribute_colorsize = $rowtest2[id_attribute_group];
              if ($id_attribute_colorsize== 5) {
                $id_attribute_color=$id_attribute_name;
              } elseif ($id_attribute_colorsize == 6) {
                $id_attribute_size=$id_attribute_name;
              }
        }
        if ($this->product->id)
        {
          return array(
            'id_product' => (int)$this->product->id,
            'price' => (float)$price,
            'weight' => (float)$weight,
            'ecotax' => 0,
            'quantity' => (int)Tools::getValue('quantity'),
            'reference' => pSQL($_POST['reference']).'-'.$id_attribute_color.'-'.$id_attribute_size,
            'default_on' => 0,
            'available_date' => '0000-00-00'
          );
        }
        return array();
      }

Ausgegeben wird dann bei mir folgendes:

 

123456--

 

Nach jedem Trennzeichen sollte eigentlich der Wert stehen.

 

Gruß

 

Domenico

Link to comment
Share on other sites

Hallo Domenico,

 

die IDs für Farbe u. Größe holst du am schnellsten aus dem Backoffice

Katalog -->Attribute u. Gruppen

post-467854-0-71228100-1456852325_thumb.jpg

 

Bei deinem Code fällt mir als erstes auf, daß deine Tabellen kein prefix haben, ist das richtig? Auch kannst du die Funktion so nicht in den Override-Ordner speichern!

 

Anbei mal meine Datei, die mußt du ggfs. an 4 Stellen (2 x ID und 2 x Prefix /rot markiert) anpassen, dann unter dem Namen

AdminAttributeGeneratorController.php

in den Ordner

/override/controllers/admin

speichern

 

 

 <?php

class AdminAttributeGeneratorController extends AdminAttributeGeneratorControllerCore
{       
        
        protected function addAttribute($attributes, $price = 0, $weight = 0)
      {
        foreach ($attributes as $attribute)
        {
          $price += (float)preg_replace('/[^0-9.-]/', '', str_replace(',', '.', Tools::getValue('price_impact_'.(int)$attribute)));
          $weight += (float)preg_replace('/[^0-9.]/', '', str_replace(',', '.', Tools::getValue('weight_impact_'.(int)$attribute)));
          //get attribute name
          $sqltest = 'SELECT * FROM  `ps_attribute_lang` WHERE  `id_attribute` = '. $attribute .' LIMIT 0 , 1';
          if ($resultstest = Db::getInstance()->ExecuteS($sqltest))
              foreach ($resultstest as $rowtest)
                  $id_attribute_name = $rowtest[name];
                // echo 'hallo world';
                // echo $id_attribute_name;
                // die ();
          //get attribute color or size
          $sqltest2 = 'SELECT * FROM  `ps_attribute` WHERE  `id_attribute` = '. $attribute .' LIMIT 0 , 1';
          if ($resultstest2 = Db::getInstance()->ExecuteS($sqltest2))
              foreach ($resultstest2 as $rowtest2)
                  $id_attribute_colorsize = $rowtest2[id_attribute_group];
                 if ($id_attribute_colorsize== 3) {
                $id_attribute_color=$id_attribute_name;
              } elseif ($id_attribute_colorsize == 1) {
                $id_attribute_size=$id_attribute_name;
              }
        }
        if ($this->product->id)
        {
          return array(
            'id_product' => (int)$this->product->id,
            'price' => (float)$price,
            'weight' => (float)$weight,
            'ecotax' => 0,
            'quantity' => (int)Tools::getValue('quantity'),
            'reference' => pSQL($_POST['reference']).$id_attribute_color.'_'.$id_attribute_size,
            'default_on' => 0,
            'available_date' => '0000-00-00'
          );
        }
        return array();
      }
      }
 

 

Dann noch die Datei:

/cache/class_index.php

löschen.

Dann müsste das auch bei dir laufen.

 

Grüsse

Whiley

Edited by Whiley (see edit history)
Link to comment
Share on other sites

Hallo,

 

danke für den Hinweis.

Natürlich fehlt der Prefix "ps_".

Hatte den Code einfach aus dem Link für die Lösung kopiert und nur die Werte-ID geändert.

So kann er die Werte nicht finden.

 

Allerdings habe ich die "AdminAttributeGeneratorController.php" unter controllers/admin/ geändert.

Im Ordner override/controllers/admin/ ist die Datei "AdminAttributeGeneratorController.php" nicht vorhanden.

Oder muss ich diese da selbst einfügen?

 

Gruß

 

Domenico

Link to comment
Share on other sites

Hallo Domenico,

 

die von dir geänderte Datei solltest du wieder in den Ursprungszustand versetzen.

Dann meine Datei mit deinen Werten abändern u. wie oben beschrieben in den Override-Ordner speichern.

 

Grüssse

Whiley

Link to comment
Share on other sites

Ja, habe ich jetzt auch so gemacht.

Es ist also eine Art Ersatz, damit die originalen Daten nicht verändert werden.

 

Allerdings denke ich, dass bei meinen zahlreichen unterschiedlichen Varianten doch eher der Einsatz von Hochzählungen geeignet wäre.

Sonst müsste man diesen Code noch um einiges erweitern, da nicht nur Farbe und Größe vorhanden sein können, sondern auch Anzahlt, Höhe, Ausführung, ...

Für mich wäre da ein Code einfacher, welcher nur hoch zählt in 3stelligen Bereich:

 

Beispiel: AtNr.Vater-001

              AtNr.Vater-002

              AtNr.Vater-002

              AtNr.Vater-002

Da braucht man dann nicht mehr testen, welche Werte vorhanden sind.

Einfach nur Nummern generieren.

 

Gruß

 

Domenico

Link to comment
Share on other sites

 

Ja, habe ich jetzt auch so gemacht.

Es ist also eine Art Ersatz, damit die originalen Daten nicht verändert werden.

 

Damit schützt du deine Änderungen vor versehentlichem Überschreiben beim nächsten Update!

 

 

Für mich wäre da ein Code einfacher, welcher nur hoch zählt in 3stelligen Bereich:

 

Wenn du die Änderung fertig hast, wäre es nicht schlecht wenn du sie hier posten würdest <_<

 

Grüsse

Whiley

Link to comment
Share on other sites

  • 6 months later...

Hallo,

 

leider ist es in diesem Forum etwas ruhig, was den Besuch auch davon abhält, regelmäßig hereinzusehen.

 

Was das Thema angeht, so hat unser Softwareanbieter JTL die Connektoren für alle Drittanbietershops freigegeben, was für mich natürlich ein Grund war, nicht mehr direkt im Shop herumzuwurschteln.

Wer also noch keine WAWI hat, kann diese kostenlos bei JTL herunterladen und einen Connektor für Prestashop integrieren.

 

Ansonsten hatte ich im Openoffice ein Makro geschrieben, welches an Hand der vorab in einer Tabelle ausgewählten Variantenwerte kombiniert, die Hochzählung hinter die SKU schreibt und entsprechende Werte in die Tabelle schreibt.

Diese habe ich dann exportiert und zu im Shop erstellten Vaterartikeln hochgeladen.

Auch die Bildpositionen werden automatisch hinterlegt, was sehr hilfreich ist.

Denn vorher musste ich für jede Variante ein Bild hochladen.

Jetzt werden nur ein Bild pro Farbe hochgeladen und für entsprechende Variante zugeordnet.

 

Gruß

 

NICO

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...