Holen Sie sich eine einfache Produkt-ID aus der konfigurierbaren Produktauswahl


7

Angenommen, ich habe ein konfigurierbares Produkt im Frontend mit zwei Dropdowns:

Größe

Farbe

Wie kann ich die endgültige einfache Produkt-ID erhalten, wenn der Benutzer seine Auswahl getroffen hat?

Mit anderen Worten: Wenn ich die Auswahl aus allen Superattributen kenne, wie kann ich diese verwenden, um das einfache Produkt zu erhalten.

Antworten:


8

Siehe: $ product-> getTypeInstance () -> getProductByAttributes ($ attributeInfo, $ product); von Mage_Catalog_Model_Product_Type_Configurable.

Bearbeiten:

Dies ist eine Frage wie die eingängigen aus Vorstellungsgesprächen. Benötigen Sie dies auf der konfigurierbaren Produktseite im Frontend?

Darin app/code/base/default/template/catalog/product/type/options/configurable.phtml ist:

var spConfig = new Product.Config(<?php echo $this->getJsonConfig() ?>);

Sie müssen dieses Objekt erweitern. Fügen Sie entweder Ihre Funktion zur Klasse hinzu oder erweitern Sie eine vorhandene Funktion, die Sie benötigen. http://prototypejs.org/learn/class-inheritance

In der JSON-Konfiguration, die standardmäßig an spConfig übergeben wird, gibt es den optionsSchlüssel und einen tieferen productsSchlüssel. Sie können diese Konfiguration in Ihrer JS-Funktion verwenden. Fügen Sie auf jeder konfigurierbaren Produktseite das JSON-Objekt ein und formatieren Sie es zum besseren Verständnis mit einem Tool. Der JSON ist eingebaut Mage_Catalog_Block_Product_View_Type_Configurable::getJsonConfig().

In der JS-Klasse gibt es:

this.settings.each(function(element){
    Event.observe(element, 'change', this.configure.bind(this))
}.bind(this));

In der configureElementFunktion gibt es den Aufruf:

this.reloadPrice();

In der Funktion wird reloadPriceeine Iteration der Dropdowns durchgeführt. Ihr Code sollte diese Iteration nachahmen, um zu überprüfen, ob alle verfügbaren Dropdowns ausgewählt wurden. Bei Erfolg kommt Ihr benutzerdefinierter Code herein.

Ist es ein Ajax-Aufruf, um dynamischen Inhalt abzurufen? Ich würde es nicht empfehlen. Versuchen Sie stattdessen, den dynamischen Inhalt / die dynamischen Daten der zugehörigen Produkte auf der gerenderten Seite in einem JSON-Objekt verfügbar zu machen, das von Ihrer benutzerdefinierten JS-Klasse verarbeitet wird.


das ist genau das, wonach ich suche, aber $ childProduct gibt null auf getFinalPrice () zurück! Wie kann ich den endgültigen, ermäßigten Preis erhalten?
Dr. Gianluigi Zane Zanettini

4

Das Produkt, das Sie in den Warenkorb gelegt haben, erhalten Sie über das folgende Code

$_item is instance of Mage_Sales_Model_Quote_Item

$simpleProduct =  $_item->getOptionByCode('simple_product')->getProduct()



$simpleProductId = $simpleProduct->getId()

Ich hoffe es hilft!


1
Dies funktioniert nur im Einkaufswagen, und ich glaube nicht, dass Pzirkind darum gebeten hat. Es ist jedoch immer noch gut zu wissen.
Tyler V.

3

Versuchen Sie dies, um die endgültige einfache Produkt-ID zu erhalten, sobald der Benutzer seine Auswahl getroffen hat.

In Ihrer benutzerdefinierten Modul-HTML-Datei können Sie Konfigurations- productIdund Superattributwerte wie Größe und Farbe erhalten, indem Sie dem folgenden Code folgen

<?php
    $_product = $this->getProduct();
    $productId = $_product->getId();
    $AllowAttributes=$_product->getTypeInstance(true)->getConfigurableAttributes($_product);
    $attr1 = 0;
    foreach($AllowAttributes as $attribute) {
        $productAttribute = $attribute->getProductAttribute();
        $attr2 = $productAttribute->getId();
        if($attr1 == 0){
            $attr1 = $attr2;
        }
    }
?>

Durch die Nutzung der productId, colorund sizeAufruf an benutzerdefinierten Modul - API - Funktion (Bsp. getProductInfo()) Von Ihrem phtml Datei mit jQuery und in Ihrem Api Ort der Code

function getProductInfo($productId,$color,$size){
    $nextarr = array();
    $productData = array();
    $product = Mage::getModel('catalog/product')->load($productId);
    $configurable= Mage::getModel('catalog/product_type_configurable')->setProduct($product);
    $simpleCollection = $configurable->getUsedProductCollection()
                ->addAttributeToSelect('*')
                ->addAttributeToFilter('color',$color)
                ->addAttributeToFilter('size',$size)
                ->addFilterByRequiredOptions();
    if(!empty($simpleCollection)){
        $data = array();
        foreach($simpleCollection as $simple){

            $simpleProductId = $simple->getId();

        }
    }

    return $simpleProductId;
}

2

Wenn Sie die Superattribute als Array haben, wobei die Schlüssel die Options-IDs (z. B. Farbe, Größe) und die Werte der ausgewählten Option (z. B. Rot, XL) sind, zum Beispiel:

$superAttributes = array(
    140 => 3310
);

dann können Sie leicht das einfache Produkt wie folgt erhalten:

/* @var $configurable Mage_Catalog_Model_Product_Type_Configurable */
$childProduct = $configurable->getProductByAttributes($superAttribute);

1

Wenn Sie die einfachen Produktdetails anzeigen möchten, versuchen Sie den folgenden Code

$order=Mage::getModel("sales/order")->load(5);

    foreach ($order->getAllItems() as $item) {
         if (!$item->isDeleted() && !$item->getParentItemId()) {
        echo $item->getName()."-".$item->getSku()."<br/>";

            $Options=$item->getData('product_options');
           echo "<pre>";
           print_r(unserialize($Options));
           echo "</pre>";
           }}

Erklären Sie: $ Options gibt simple product super_attribute valueund variance text value etc.wenn Sie erhalten möchten, simple product id müssen Sie product by $item->getSku(); Sku laden, gebensimple product sku

$product=Mage::getModel("catalog/product")->loadByAttribute('sku',$item->getSku());

Geben Sie hier die Bildbeschreibung ein

Wenn Sie ein Angebot wünschen, ändern Sie es einfach

$quote = Mage::getSingleton('checkout/session')->getQuote();
        $cartItems = $quote->getAllVisibleItems();
        foreach ($cartItems as $item)

0

Verwendet Der folgende Code für Magento 2

$superAttribute = [$size_id => $sel_propduct_size, $touch_id => $sel_propduct_touch, $color_id => $sel_propduct_color];

$childProduct   = $product->getTypeInstance()->getProductByAttributes($superAttribute, $product);

$child_product_id = $childProduct->getID();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.