Aktualisieren Sie die Preise aller einfachen Produkte über das konfigurierbare Produkt in Magento 2

7

Ich bin neu in Magento 2 und verstehe, dass dies eine Änderung gegenüber Magento 1 ist.

Beispiel: Ich habe ein T-Shirt als konfigurierbares Produkt mit Farboptionen als einfache Produkte. Diese einfachen Produkte erfordern alle den gleichen Preis.

  • Wenn ich den Preis des konfigurierbaren Produkts (und damit die einfachen Produktvarianten) aktualisieren möchte, wie mache ich das einfach?
  • Gleiche Frage bezüglich der Anwendung eines Sonderpreises
  • Wie würde ich Staffelpreise auf alle Simple Product-Varianten anwenden?

Soweit ich sehen kann, ist dies nur über den Produktkatalogbildschirm möglich: Finden Sie eine Möglichkeit, alle einfachen Produktvarianten dieses konfigurierbaren Produkts auszuwählen, und wenden Sie dann eine Massenaktion an, um den Preis / Sonderpreis zu ändern. Dies scheint sehr langwierig und knifflig zu sein - sagen wir, ich hatte 50 Variationen eines Produkts mit unterschiedlichen SKUs: Selbst das Filtern und Auswählen aller Produkte im Produktkatalog wäre eine Aufgabe.

Deshalb gehe ich davon aus, dass mir etwas fehlt! Ich würde vermuten, dass ein großer Teil (Mehrheit?) Der Benutzer, die konfigurierbare Produkte erstellen, einen einzigen Preis auf alle Variationen (einfache Produkte) anwenden möchten. Einfache Produkte sollten die Möglichkeit haben, den Preis von ihrem konfigurierbaren Produkt zu erben.

Ich glaube, Magento 1 hat dies anders gehandhabt und den Preis des konfigurierbaren Produkts verwendet, bis es explizit über eine einfache Produktvariante überschrieben wurde. Das scheint mir viel vernünftiger zu sein ... obwohl ich froh bin, hier ausgebildet zu werden!

Tom Bates
quelle

Antworten:

1

Beim Migrieren von Daten von Magento nach Magento 2 trat das gleiche Problem auf. Als Magento 2 wurde das Szenario geändert, um den Sonderpreis für ein konfigurierbares Produkt festzulegen, und wir müssen für jedes zugehörige Produkt eines konfigurierbaren Produkts einen Sonderpreis festlegen.

    <?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

use Magento\Framework\App\Bootstrap;

try{

    require __DIR__ . '/app/bootstrap.php';

    $params = $_SERVER;
    $bootstrap = Bootstrap::create(BP, $params);
    $obj = $bootstrap->getObjectManager();
    $obj->get('Magento\Framework\Registry')->register('isSecureArea', true);
    $appState = $obj->get('\Magento\Framework\App\State');
    $appState->setAreaCode('frontend');

    $products = $obj->create('\Magento\Catalog\Model\Product')->getCollection();
    $products->addAttributeToSelect(array('special_price','price'))
        ->addFieldTofilter('type_id','configurable')
        ->addFieldToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
        ->addFieldToFilter('status', \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
        ->load();



    echo "Total products count: " . $products->count() . "<hr>";
    echo "<pre>";
    if ($products->getSize() > 0) {
        foreach ($products as $product) {


            $configSpecial = $product->getSpecialPrice();

            if($configSpecial > 0)
            {
                echo 'product id<br/>'.$product_id = $product->getId();
                $configProduct = $obj->create('Magento\Catalog\Model\Product')->load($product_id);
                $_children = $configProduct->getTypeInstance()->getUsedProducts($configProduct);



                 foreach ($_children as $child){



                     $childProductId = $child->getID();

                     $childproduct = $obj->create('Magento\Catalog\Model\Product')->load($childProductId);


                     $childproduct->setStoreId(9);
                     //$childproduct->getName(); 
                     $childproduct->setSpecialPrice($configSpecial); 
                     $childproduct->save();
                     //echo $childproduct->getSpecialPrice(); 
                }

                //echo "count: ".count($_children);



           }



            //print_r($product->getData());
        }
    }

} catch (Exception $e) {
    echo $e->getMessage();
}

Ich hoffe, dieses Skript wird Ihnen helfen.

Akgola
quelle
Können Sie klären, wie / wo Sie diesen Code ablegen, um ihn auszuführen?
Olivier
@ Olivier, ich habe dies von der Wurzel von Magento ausgeführt. Bitte überprüfen Sie es ordnungsgemäß mit dem Testprodukt und verwenden Sie es dann.
Akgola
0

Sie können dies tun, wenn Sie ein neues Produkt erstellen

  • Erstellen Sie ein einfaches Produkt

  • Einrichtungspreis / Sonderpreis / Staffelpreis dafür

  • Erstellen Sie eine Konfiguration für dieses einfache Produkt (es wird zu einem konfigurierbaren Produkt).

Hinweis: Sie können den konfigurierbaren Produktpreis später nicht mehr bearbeiten

MageX
quelle
Hallo MageX, danke für den Beitrag. Dies ist jedoch der Kern meiner Frage: Die einfache Aktualisierung der Preise (reguläre, spezielle und gestaffelte Preise) ist eine wichtige Geschäftstätigkeit und meines Erachtens entweder schwierig oder unmöglich effizient durchzuführen.
Tom Bates