Public Member Functions | |
getRelationInfo () | |
getChildrenIds ($parentId, $required=true) | |
getParentIdsByChild ($childId) | |
getEditableAttributes ($product=null) | |
canUseAttribute (Mage_Eav_Model_Entity_Attribute $attribute) | |
setUsedProductAttributeIds ($ids, $product=null) | |
getUsedProductAttributeIds ($product=null) | |
getUsedProductAttributes ($product=null) | |
getConfigurableAttributes ($product=null) | |
getConfigurableAttributesAsArray ($product=null) | |
getConfigurableAttributeCollection ($product=null) | |
getUsedProductIds ($product=null) | |
getUsedProducts ($requiredAttributeIds=null, $product=null) | |
getUsedProductCollection ($product=null) | |
beforeSave ($product=null) | |
save ($product=null) | |
isSalable ($product=null) | |
getProductByAttributes ($attributesInfo, $product=null) | |
getSelectedAttributesInfo ($product=null) | |
prepareForCart (Varien_Object $buyRequest, $product=null) | |
getSpecifyOptionMessage () | |
getOrderOptions ($product=null) | |
isVirtual ($product=null) | |
getWeight ($product=null) | |
assignProductToOption ($optionProduct, $option, $product=null) | |
Public Attributes | |
const | TYPE_CODE = 'configurable' |
Protected Attributes | |
$_usedProductAttributeIds = '_cache_instance_used_product_attribute_ids' | |
$_usedProductAttributes = '_cache_instance_used_product_attributes' | |
$_usedAttributes = '_cache_instance_used_attributes' | |
$_configurableAttributes = '_cache_instance_configurable_attributes' | |
$_usedProductIds = '_cache_instance_product_ids' | |
$_usedProducts = '_cache_instance_products' | |
$_isComposite = true |
Definition at line 36 of file Configurable.php.
assignProductToOption | ( | $ | optionProduct, | |
$ | option, | |||
$ | product = null | |||
) |
Implementation of product specify logic of which product needs to be assigned to option. For example if product which was added to option already removed from catalog.
Mage_Catalog_Model_Product | $optionProduct | |
Mage_Sales_Model_Quote_Item_Option | $option | |
Mage_Catalog_Model_Product | $product |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 670 of file Configurable.php.
00671 { 00672 if ($optionProduct) { 00673 $option->setProduct($optionProduct); 00674 } else { 00675 $option->getItem()->setHasError('error'); 00676 $option->getItem()->addMessage(Mage::helper('catalog')->__('Selected configuration is not available.', $this->getProduct($product)->getName())); 00677 } 00678 00679 return $this; 00680 }
beforeSave | ( | $ | product = null |
) |
Before save process
Mage_Catalog_Model_Product | $product |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 370 of file Configurable.php.
00371 { 00372 parent::beforeSave($product); 00373 00374 $this->getProduct($product)->canAffectOptions(false); 00375 00376 if ($this->getProduct($product)->getCanSaveConfigurableAttributes()) { 00377 $this->getProduct($product)->canAffectOptions(true); 00378 if ($data = $this->getProduct($product)->getConfigurableAttributesData()) { 00379 if (!empty($data)) { 00380 foreach ($data as $attribute) { 00381 if (!empty($attribute['values'])) { 00382 $this->getProduct($product)->setTypeHasOptions(true); 00383 $this->getProduct($product)->setTypeHasRequiredOptions(true); 00384 break; 00385 } 00386 } 00387 } 00388 } 00389 } 00390 00391 return $this; 00392 }
canUseAttribute | ( | Mage_Eav_Model_Entity_Attribute $ | attribute | ) |
Checkin attribute availability for create superproduct
Mage_Eav_Model_Entity_Attribute | $attribute |
Definition at line 157 of file Configurable.php.
00158 { 00159 $allow = $attribute->getIsGlobal() == Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL 00160 && $attribute->getIsVisible() 00161 && $attribute->getIsConfigurable() 00162 && $attribute->usesSource(); 00163 00164 return $allow; 00165 }
getChildrenIds | ( | $ | parentId, | |
$ | required = true | |||
) |
Retrieve Required children ids Return grouped array, ex array( group => array(ids) )
int | $parentId | |
bool | $required |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 113 of file Configurable.php.
00114 { 00115 return Mage::getResourceSingleton('catalog/product_type_configurable') 00116 ->getChildrenIds($parentId, $required); 00117 }
getConfigurableAttributeCollection | ( | $ | product = null |
) |
Retrieve configurable atrribute collection
Mage_Catalog_Model_Product | $product |
Definition at line 280 of file Configurable.php.
00281 { 00282 return Mage::getResourceModel('catalog/product_type_configurable_attribute_collection') 00283 ->setProductFilter($this->getProduct($product)); 00284 }
getConfigurableAttributes | ( | $ | product = null |
) |
Retrieve configurable attrbutes data
Mage_Catalog_Model_Product | $product |
Definition at line 237 of file Configurable.php.
00238 { 00239 Varien_Profiler::start('CONFIGURABLE:'.__METHOD__); 00240 if (!$this->getProduct($product)->hasData($this->_configurableAttributes)) { 00241 $configurableAttributes = $this->getConfigurableAttributeCollection($product) 00242 ->orderByPosition() 00243 ->load(); 00244 $this->getProduct($product)->setData($this->_configurableAttributes, $configurableAttributes); 00245 } 00246 Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__); 00247 return $this->getProduct($product)->getData($this->_configurableAttributes); 00248 }
getConfigurableAttributesAsArray | ( | $ | product = null |
) |
Retrieve Configurable Attributes as array
Mage_Catalog_Model_Product | $product |
Definition at line 256 of file Configurable.php.
00257 { 00258 $res = array(); 00259 foreach ($this->getConfigurableAttributes($product) as $attribute) { 00260 $label = $attribute->getLabel() ? $attribute->getLabel() : $attribute->getProductAttribute()->getFrontend()->getLabel(); 00261 $res[] = array( 00262 'id' => $attribute->getId(), 00263 'label' => $label, 00264 'position' => $attribute->getPosition(), 00265 'values' => $attribute->getPrices() ? $attribute->getPrices() : array(), 00266 'attribute_id' => $attribute->getProductAttribute()->getId(), 00267 'attribute_code'=> $attribute->getProductAttribute()->getAttributeCode(), 00268 'frontend_label'=> $attribute->getProductAttribute()->getFrontend()->getLabel(), 00269 ); 00270 } 00271 return $res; 00272 }
getEditableAttributes | ( | $ | product = null |
) |
Retrieve product type attributes
Mage_Catalog_Model_Product | $product |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 137 of file Configurable.php.
00138 { 00139 if (is_null($this->_editableAttributes)) { 00140 $this->_editableAttributes = parent::getEditableAttributes($product); 00141 foreach ($this->_editableAttributes as $index => $attribute) { 00142 if ($this->getUsedProductAttributeIds($product) 00143 && in_array($attribute->getAttributeId(), $this->getUsedProductAttributeIds($product))) { 00144 unset($this->_editableAttributes[$index]); 00145 } 00146 } 00147 } 00148 return $this->_editableAttributes; 00149 }
getOrderOptions | ( | $ | product = null |
) |
Prepare additional options/information for order item which will be created from this product
Mage_Catalog_Model_Product | $product |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 586 of file Configurable.php.
00587 { 00588 $options = parent::getOrderOptions($product); 00589 $options['attributes_info'] = $this->getSelectedAttributesInfo($product); 00590 if ($simpleOption = $this->getProduct($product)->getCustomOption('simple_product')) { 00591 $options['simple_name'] = $simpleOption->getProduct($product)->getName(); 00592 $options['simple_sku'] = $simpleOption->getProduct($product)->getSku(); 00593 } 00594 00595 $options['product_calculations'] = self::CALCULATE_PARENT; 00596 $options['shipment_type'] = self::SHIPMENT_TOGETHER; 00597 00598 return $options; 00599 }
getParentIdsByChild | ( | $ | childId | ) |
Retrieve parent ids array by requered child
int|array | $childId |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 125 of file Configurable.php.
00126 { 00127 return Mage::getResourceSingleton('catalog/product_type_configurable') 00128 ->getParentIdsByChild($childId); 00129 }
getProductByAttributes | ( | $ | attributesInfo, | |
$ | product = null | |||
) |
Retrieve used product by attribute values $attrbutesInfo = array( $attributeId => $attributeValue )
array | $attrbutesInfo | |
Mage_Catalog_Model_Product | $product |
Definition at line 459 of file Configurable.php.
00460 { 00461 foreach ($this->getUsedProducts(null, $product) as $productObject) { 00462 $checkRes = true; 00463 foreach ($attributesInfo as $attributeId => $attributeValue) { 00464 $code = $this->getAttributeById($attributeId, $product)->getAttributeCode(); 00465 if ($productObject->getData($code) != $attributeValue) { 00466 $checkRes = false; 00467 } 00468 } 00469 if ($checkRes) { 00470 return $productObject; 00471 } 00472 } 00473 return null; 00474 }
getRelationInfo | ( | ) |
Return relation info about used products
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 94 of file Configurable.php.
00095 { 00096 $info = new Varien_Object(); 00097 $info->setTable('catalog/product_super_link') 00098 ->setParentFieldName('parent_id') 00099 ->setChildFieldName('product_id'); 00100 return $info; 00101 }
getSelectedAttributesInfo | ( | $ | product = null |
) |
Retrieve Selected Attributes info
Mage_Catalog_Model_Product | $product |
Definition at line 482 of file Configurable.php.
00483 { 00484 $attributes = array(); 00485 Varien_Profiler::start('CONFIGURABLE:'.__METHOD__); 00486 if ($attributesOption = $this->getProduct($product)->getCustomOption('attributes')) { 00487 $data = unserialize($attributesOption->getValue()); 00488 $this->getUsedProductAttributeIds($product); 00489 00490 $usedAttributes = $this->getProduct($product)->getData($this->_usedAttributes); 00491 00492 foreach ($data as $attributeId => $attributeValue) { 00493 if (isset($usedAttributes[$attributeId])) { 00494 $attribute = $usedAttributes[$attributeId]; 00495 $label = $attribute->getLabel(); 00496 $value = $attribute->getProductAttribute(); 00497 if ($value->getSourceModel()) { 00498 $value = $value->getSource()->getOptionText($attributeValue); 00499 } 00500 else { 00501 $value = ''; 00502 } 00503 00504 $attributes[] = array('label'=>$label, 'value'=>$value); 00505 } 00506 } 00507 } 00508 Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__); 00509 return $attributes; 00510 }
getSpecifyOptionMessage | ( | ) |
Retrieve message for specify option(s)
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 574 of file Configurable.php.
00575 { 00576 return Mage::helper('catalog')->__('Please specify the product option(s)'); 00577 }
getUsedProductAttributeIds | ( | $ | product = null |
) |
Retrieve identifiers of used product attributes
Mage_Catalog_Model_Product | $product |
Definition at line 197 of file Configurable.php.
00198 { 00199 if (!$this->getProduct($product)->hasData($this->_usedProductAttributeIds)) { 00200 $usedProductAttributeIds = array(); 00201 foreach ($this->getUsedProductAttributes($product) as $attribute) { 00202 $usedProductAttributeIds[] = $attribute->getId(); 00203 } 00204 $this->getProduct($product)->setData($this->_usedProductAttributeIds, $usedProductAttributeIds); 00205 } 00206 return $this->getProduct($product)->getData($this->_usedProductAttributeIds); 00207 }
getUsedProductAttributes | ( | $ | product = null |
) |
Retrieve used product attributes
Mage_Catalog_Model_Product | $product |
Definition at line 215 of file Configurable.php.
00216 { 00217 if (!$this->getProduct($product)->hasData($this->_usedProductAttributes)) { 00218 $usedProductAttributes = array(); 00219 $usedAttributes = array(); 00220 foreach ($this->getConfigurableAttributes($product) as $attribute) { 00221 $id = $attribute->getProductAttribute()->getId(); 00222 $usedProductAttributes[$id] = $attribute->getProductAttribute(); 00223 $usedAttributes[$id] = $attribute; 00224 } 00225 $this->getProduct($product)->setData($this->_usedAttributes, $usedAttributes); 00226 $this->getProduct($product)->setData($this->_usedProductAttributes, $usedProductAttributes); 00227 } 00228 return $this->getProduct($product)->getData($this->_usedProductAttributes); 00229 }
getUsedProductCollection | ( | $ | product = null |
) |
Retrieve related products collection
Mage_Catalog_Model_Product | $product |
Definition at line 353 of file Configurable.php.
00354 { 00355 $collection = Mage::getResourceModel('catalog/product_type_configurable_product_collection') 00356 ->setFlag('require_stock_items', true) 00357 ->setProductFilter($this->getProduct($product)); 00358 if (!is_null($this->getStoreFilter($product))) { 00359 $collection->addStoreFilter($this->getStoreFilter($product)); 00360 } 00361 return $collection; 00362 }
getUsedProductIds | ( | $ | product = null |
) |
Retrieve subproducts identifiers
Mage_Catalog_Model_Product | $product |
Definition at line 293 of file Configurable.php.
00294 { 00295 if (!$this->getProduct($product)->hasData($this->_usedProductIds)) { 00296 $usedProductIds = array(); 00297 foreach ($this->getUsedProducts(null, $product) as $product) { 00298 $usedProductIds[] = $product->getId(); 00299 } 00300 $this->getProduct($product)->setData($this->_usedProductIds, $usedProductIds); 00301 } 00302 return $this->getProduct($product)->getData($this->_usedProductIds); 00303 }
getUsedProducts | ( | $ | requiredAttributeIds = null , |
|
$ | product = null | |||
) |
Retrieve array of "subproducts"
Mage_Catalog_Model_Product | $product |
Definition at line 311 of file Configurable.php.
00312 { 00313 Varien_Profiler::start('CONFIGURABLE:'.__METHOD__); 00314 if (!$this->getProduct($product)->hasData($this->_usedProducts)) { 00315 if (is_null($requiredAttributeIds) 00316 and is_null($this->getProduct($product)->getData($this->_configurableAttributes))) { 00317 // If used products load before attributes, we will load attributes. 00318 $this->getConfigurableAttributes($product); 00319 // After attributes loading products loaded too. 00320 Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__); 00321 return $this->getProduct($product)->getData($this->_usedProducts); 00322 } 00323 00324 $usedProducts = array(); 00325 $collection = $this->getUsedProductCollection($product) 00326 ->addAttributeToSelect('*') 00327 ->addFilterByRequiredOptions(); 00328 00329 if (is_array($requiredAttributeIds)) { 00330 foreach ($requiredAttributeIds as $attributeId) { 00331 $attribute = $this->getAttributeById($attributeId, $product); 00332 if (!is_null($attribute)) 00333 $collection->addAttributeToFilter($attribute->getAttributeCode(), array('notnull'=>1)); 00334 } 00335 } 00336 00337 foreach ($collection as $item) { 00338 $usedProducts[] = $item; 00339 } 00340 00341 $this->getProduct($product)->setData($this->_usedProducts, $usedProducts); 00342 } 00343 Varien_Profiler::stop('CONFIGURABLE:'.__METHOD__); 00344 return $this->getProduct($product)->getData($this->_usedProducts); 00345 }
getWeight | ( | $ | product = null |
) |
Return product weight based on simple product weight or configurable product weight
Mage_Catalog_Model_Product | $product |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 649 of file Configurable.php.
00650 { 00651 if ($this->getProduct($product)->hasCustomOptions() && ($simpleProductOption = $this->getProduct($product)->getCustomOption('simple_product'))) { 00652 $simpleProduct = $simpleProductOption->getProduct($product); 00653 if ($simpleProduct) { 00654 return $simpleProduct->getWeight(); 00655 } 00656 } 00657 00658 return $this->getProduct($product)->getData('weight'); 00659 }
isSalable | ( | $ | product = null |
) |
Check is product available for sale
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 435 of file Configurable.php.
00436 { 00437 $salable = parent::isSalable($product); 00438 if (!is_null($salable)) { 00439 return $salable; 00440 } 00441 00442 $salable = false; 00443 foreach ($this->getUsedProducts(null, $product) as $child) { 00444 $salable = $salable || $child->isSalable(); 00445 } 00446 return $salable; 00447 }
isVirtual | ( | $ | product = null |
) |
Check is virtual product
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 606 of file Configurable.php.
00607 { 00608 if ($productOption = $this->getProduct($product)->getCustomOption('simple_product')) { 00609 if ($optionProduct = $productOption->getProduct()) { 00610 /* @var $optionProduct Mage_Catalog_Model_Product */ 00611 return $optionProduct->isVirtual(); 00612 } 00613 } 00614 return parent::isVirtual($product); 00615 }
prepareForCart | ( | Varien_Object $ | buyRequest, | |
$ | product = null | |||
) |
Initialize product(s) for add to cart process
Varien_Object | $buyRequest | |
Mage_Catalog_Model_Product | $product |
$attributes = array($attributeId=>$attributeValue)
Adding parent product custom options to child product to be sure that it will be unique as its parent
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 519 of file Configurable.php.
00520 { 00521 if ($attributes = $buyRequest->getSuperAttribute()) { 00522 $result = parent::prepareForCart($buyRequest, $product); 00523 if (is_array($result)) { 00524 $product = $this->getProduct($product); 00525 /** 00526 * $attributes = array($attributeId=>$attributeValue) 00527 */ 00528 if ($subProduct = $this->getProductByAttributes($attributes, $product)) { 00529 $product->addCustomOption('attributes', serialize($attributes)); 00530 $product->addCustomOption('product_qty_'.$subProduct->getId(), 1, $subProduct); 00531 $product->addCustomOption('simple_product', $subProduct->getId(), $subProduct); 00532 00533 $_result = $subProduct->getTypeInstance(true)->prepareForCart($buyRequest, $subProduct); 00534 if (is_string($_result) && !is_array($_result)) { 00535 return $_result; 00536 } 00537 00538 if (!isset($_result[0])) { 00539 return Mage::helper('checkout')->__('Can not add item to shopping cart'); 00540 } 00541 00542 /** 00543 * Adding parent product custom options to child product 00544 * to be sure that it will be unique as its parent 00545 */ 00546 if ($optionIds = $product->getCustomOption('option_ids')) { 00547 $optionIds = explode(',', $optionIds->getValue()); 00548 foreach ($optionIds as $optionId) { 00549 if ($option = $product->getCustomOption('option_' . $optionId)) { 00550 $_result[0]->addCustomOption('option_' . $optionId, $option->getValue()); 00551 } 00552 } 00553 } 00554 00555 $_result[0]->setParentProductId($product->getId()) 00556 // add custom option to simple product for protection of process when we add simple product separately 00557 ->addCustomOption('parent_product_id', $product->getId()) 00558 ->setCartQty(1); 00559 00560 $result[] = $_result[0]; 00561 00562 return $result; 00563 } 00564 } 00565 } 00566 return $this->getSpecifyOptionMessage(); 00567 }
save | ( | $ | product = null |
) |
Save configurable product depended data
Mage_Catalog_Model_Product | $product |
Save Attributes Information
Save product relations
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 400 of file Configurable.php.
00401 { 00402 parent::save($product); 00403 /** 00404 * Save Attributes Information 00405 */ 00406 if ($data = $this->getProduct($product)->getConfigurableAttributesData()) { 00407 foreach ($data as $attributeData) { 00408 $id = isset($attributeData['id']) ? $attributeData['id'] : null; 00409 Mage::getModel('catalog/product_type_configurable_attribute') 00410 ->setData($attributeData) 00411 ->setId($id) 00412 ->setStoreId($this->getProduct($product)->getStoreId()) 00413 ->setProductId($this->getProduct($product)->getId()) 00414 ->save(); 00415 } 00416 } 00417 00418 /** 00419 * Save product relations 00420 */ 00421 $data = $this->getProduct($product)->getConfigurableProductsData(); 00422 if (is_array($data)) { 00423 $productIds = array_keys($data); 00424 Mage::getResourceModel('catalog/product_type_configurable') 00425 ->saveProducts($this->getProduct($product)->getId(), $productIds); 00426 } 00427 return $this; 00428 }
setUsedProductAttributeIds | ( | $ | ids, | |
$ | product = null | |||
) |
Declare attribute identifiers used for asign subproducts
array | $ids | |
Mage_Catalog_Model_Product | $product |
Definition at line 174 of file Configurable.php.
00175 { 00176 $usedProductAttributes = array(); 00177 $configurableAttributes = array(); 00178 00179 foreach ($ids as $attributeId) { 00180 $usedProductAttributes[] = $this->getAttributeById($attributeId); 00181 $configurableAttributes[] = Mage::getModel('catalog/product_type_configurable_attribute') 00182 ->setProductAttribute($this->getAttributeById($attributeId)); 00183 } 00184 $this->getProduct($product)->setData($this->_usedProductAttributes, $usedProductAttributes); 00185 $this->getProduct($product)->setData($this->_usedProductAttributeIds, $ids); 00186 $this->getProduct($product)->setData($this->_configurableAttributes, $configurableAttributes); 00187 00188 return $this; 00189 }
$_configurableAttributes = '_cache_instance_configurable_attributes' [protected] |
Definition at line 66 of file Configurable.php.
$_isComposite = true [protected] |
Reimplemented from Mage_Catalog_Model_Product_Type_Abstract.
Definition at line 87 of file Configurable.php.
$_usedAttributes = '_cache_instance_used_attributes' [protected] |
Definition at line 59 of file Configurable.php.
$_usedProductAttributeIds = '_cache_instance_used_product_attribute_ids' [protected] |
Definition at line 45 of file Configurable.php.
$_usedProductAttributes = '_cache_instance_used_product_attributes' [protected] |
Definition at line 52 of file Configurable.php.
$_usedProductIds = '_cache_instance_product_ids' [protected] |
Definition at line 73 of file Configurable.php.
$_usedProducts = '_cache_instance_products' [protected] |
Definition at line 80 of file Configurable.php.
const TYPE_CODE = 'configurable' |
Definition at line 38 of file Configurable.php.