Frage

Ich habe ein Skript, das den Preis für konfigurierbare Produkte, die ich geschrieben habe, dynamisch abgerufen, und jetzt gehe ich zurück und stelle sicher, dass es alle konfigurierbaren Attribute berücksichtigt, die es möglicherweise gibt. Das Folgende wird über Ajax bezeichnet und ich habe es auf den zentralsten Teil der Schleife debuggen (daher funktionieren alle Magento -Methoden). Es sollte Kinder entfernen, die nicht mit den Attributen übereinstimmen. Das Endziel ist es, ein Kind zu verlassen und den Preis wiederzugeben. Jedes Kind enthält einen einzigartigen Preis (ich weiß). Können Sie sehen, warum dies momentan nicht funktioniert?

<?php
require_once('/var/www/Staging/public_html/app/Mage.php');
umask(0);
Mage::app(); 

$product_id = $_POST['productID'];
$optionSelectionArray = $_POST['optionSelectionArray']; //the ids of configurable options selected


//var_dump($optionSelectionArray);

$product =  Mage::getModel('catalog/product')->load($product_id); // no need to use the _ here, it's not protected/private; additonally Mage::registry won't work because you're technically not on a product detail page
$attributes = $product->getTypeInstance(true)->getConfigurableAttributes($product);
$childProducts = Mage::getModel('catalog/product_type_configurable')->getUsedProducts(null,$product); 

//Gather all attribute ids for given product    
$availAttrs=[];
foreach($attributes as $attribute){ 
        $availAttrs[] = $attribute->getAttributeId();
}

foreach($availAttrs as $attr){//cycle available attributes
        foreach ($optionSelectionArray as $key => $value) {//cycle option for key
            if ($attr == $key){//if available attribute and key of optionSelectionArray match
                for($i=0; $i<sizeof($childProducts); $i++){//for each child in children
                    //get label of attribute code
                    foreach($attributes as $attribute){ 
                        if ($attr == $attribute->getAttributeId()){
                            $attrName = strtolower($attribute->getLabel());//get code name from attribute id
                        }//end if attribute matches attribute id
                    }//end attributes cycle

                    //CAITLIN LEFT OFF echoing the next line here to see if it is doing what it should

                    if($childProducts[$i]->getData($attrName) != $value){
                        array_splice($childProducts, $i, 1);
                    }//end if attribute values match
                    else{
                        echo("This is a match! : ");
                        echo('The vendor is ' . $childProducts[$i]->getData('vendor'). ";");
                        echo (" The price is " . $childProducts[$i]->getPrice());   
                    }
                }//end childproducts loop
            }//end if
        }//end foreach optionSelectionArray
    }//end foreach availattrs

//Echo final price $childProducts[0]
?>
War es hilfreich?

Lösung

Ich legte die folgenden Schleifen an und das hat dafür gesorgt, dass ich alle Produkte beseitigt habe, die nicht übereinstimmten.

while(sizeof($childProducts)>1){
//Loops
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top