Magento устраняет детские продукты, чтобы получить применимую цену [закрыто
-
16-10-2019 - |
Вопрос
У меня есть скрипт, который динамически получает цену настраиваемых продуктов, которые я написал, и теперь я возвращаюсь и следит за тем, чтобы он учитывал любые настраиваемые атрибуты, которые могут быть. Следующее вызывает через Ajax, и я отладил его до самой центральной части цикла (поэтому все методы Magento работают). Это должно удалить детей, которые не соответствуют атрибутам. Конечная цель - оставить одного ребенка и повторить цену. Каждый ребенок содержит уникальную цену (это я знаю). Вы понимаете, почему это сейчас не работает?
<?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]
?>
Решение
Я поместил следующее вокруг петель, и это убедилось, что я исключил все продукты, которые не совпадали.
while(sizeof($childProducts)>1){
//Loops
}
Не связан с magento.stackexchange