2017-06-01 8 views
0

Ich möchte Produkte im Warenkorb getrennt voneinander haben. Die Tabelle mit den Wagenlinien in PrestaShop ist ps_cart_product und hat einen Primärschlüssel auf id_cart, id_product und id_attribute, also sollte ich etwas mit "Anpassungen" in PrestaShop tun. Ich weiß, es ist $cart->_addCustomization(), aber ich verstehe nicht die Funktion nach dem Versuch, ein Produkt in den Warenkorb gelegt zu gestalten, wie so mit einem Modul:Fügen Sie das gleiche Produkt mehrmals in den Warenkorb

public function hookActionCartSave($params) 
{ 
    $cart = $this->context->cart; 
    $last_cart_product = $cart->getLastProduct(); 

    $cart->_addCustomization(
     $last_cart_product['id_product'], 
     $last_cart_product['id_product_attribute'], 
     $index = 1, 
     $type = 2, 
     md5(time().$last_cart_product['id_product'].$last_cart_product['id_product_attribute']), 
     10 
    ); 
} 

Wie Sie vielleicht sehe ich einige Variablen fest einprogrammiert nur um es zu überprüfen.

Zweck

ich der Kunde das Produkt in der Lage sein möchte später anpassen (eine Datei hochladen). Nehmen wir an, wir haben eine Produkt 1 und ein Kunde will 50 mit einem bestimmten Druck drauf, und weitere 50 mit einem anderen Druck drauf. Der Anpassungsprozess wird nach der Bestellung durchgeführt (anderes Problem, nicht meine Frage hier).

Ist dies der Weg zu tun, was ich will, und wenn ja wie?

Bearbeiten: Bis jetzt habe ich es geschafft, eine Anpassung in der Datenbank hinzuzufügen. Scheint jedoch nicht vollständig zu sein. Wenn ich den $products in shopping-cart.tpl drucke, sehe ich ["customization_quantity"] => NULL, also wird es möglicherweise nicht dem Wagen richtig hinzugefügt.

+0

machen sollten Wie Sie wies darauf hin, ist der Primärschlüssel id_cart, id_product, id_product_attribute, id_address_delivery. Es ist also nicht möglich, 2 Einträge desselben Produkts mit den gleichen Einschränkungen zu haben. Sie ändern entweder diese Abnutzung (riskieren, etwas anderes zu stürzen) oder finden eine Umgehungslösung (vielleicht ein Modul, um mehrere Kostenoptimierungen für ein Produkt basierend auf Menge einzugeben) – sadlyblue

+0

Die Funktion in meiner Frage stammt von meinem Modul. Ich habe versucht, 10 hinzuzufügen (wie Sie in dem Codebeispiel sehen können), aber dies setzt nicht nur "Quantity = 10" in "ps_customization" in der Datenbank. Ich sehe Datensätze in 'ps_customization' mit' ps_customized_data', aber in meinem Warenkorb erscheint es immer noch als ein Produkt. Ich möchte die Produkte in meinem Warenkorb haben, als ob die verschiedenen Produkteigenschaften wären. – Matt

+0

Muss es wirklich in der Datenbank getrennt werden? Oder möchten Sie nur im Einkaufswagen getrennte Zeilen anzeigen? Für den zweiten Fall können Sie dies in TPL-Dateien tun. –

Antwort

0

Ich fand die Lösung.

public function hookActionCartSave($params) 
{ 
    $last_cart_product = $this->context->cart->getLastProduct(); 
    $product = new Product($last_cart_product['id_product']); 
    if ($product) { 
     if (!$field_ids = $product->getCustomizationFieldIds()) { 
      return; 
     } 

     $authorized_text_fields = array(); 
     foreach ($field_ids as $field_id) { 
      if ($field_id['type'] == Product::CUSTOMIZE_TEXTFIELD) { 
       $authorized_text_fields[(int)$field_id['id_customization_field']] = 'textField'.(int)$field_id['id_customization_field']; 
      } 
     } 

     $print_reference = $this->uniqueCustomizationReference(); 

     $indexes = array_flip($authorized_text_fields); 
     foreach ($authorized_text_fields as $field_name => $value) { 
      $this->context->cart->addTextFieldToProduct($product->id, $field_name, Product::CUSTOMIZE_TEXTFIELD, $print_reference); 
     } 
    } 
} 

Was das bedeutet ist für jedes Produkt, das die Möglichkeit, in der besonders angefertigt hat, ist es eine „Anpassung“ für diese Warenkorb Zeile in die Datenbank hinzu. In diesem Fall wird am Ende nur addTextFieldToProduct() hinzugefügt, weil ich wollte, dass jede Wagenlinie eine separate Entität ist, die "Druckerzeugnis" genannt wird.

Im PrestaShop Back-Office Sie Anpassungen möglich unter Products >> Product {x} >> Customizations >> Text = 1 | label = 'print product'

Verwandte Themen