Public Member Functions | |
setProduct ($product) | |
setTypeId ($typeId) | |
getProduct ($product=null) | |
getRelationInfo () | |
getChildrenIds ($parentId, $required=true) | |
getParentIdsByChild ($childId) | |
getSetAttributes ($product=null) | |
attributesCompare ($attribute1, $attribute2) | |
getEditableAttributes ($product=null) | |
getAttributeById ($attributeId, $product=null) | |
isVirtual ($product=null) | |
isSalable ($product=null) | |
prepareForCart (Varien_Object $buyRequest, $product=null) | |
getSpecifyOptionMessage () | |
checkProductBuyState ($product=null) | |
getOrderOptions ($product=null) | |
save ($product=null) | |
beforeSave ($product=null) | |
isComposite ($product=null) | |
getSku ($product=null) | |
getWeight ($product=null) | |
hasOptions ($product=null) | |
updateQtyOption ($options, Varien_Object $option, $value, $product=null) | |
hasRequiredOptions ($product=null) | |
getStoreFilter ($product=null) | |
setStoreFilter ($store=null, $product=null) | |
getForceChildItemQtyChanges ($product=null) | |
prepareQuoteItemQty ($qty, $product=null) | |
assignProductToOption ($optionProduct, $option, $product=null) | |
setConfig ($config) | |
getSearchableData ($product=null) | |
Public Attributes | |
const | CALCULATE_CHILD = 0 |
const | CALCULATE_PARENT = 1 |
const | SHIPMENT_SEPARATELY = 1 |
const | SHIPMENT_TOGETHER = 0 |
Protected Member Functions | |
_prepareOptionsForCart (Varien_Object $buyRequest, $product=null) | |
Protected Attributes | |
$_product | |
$_typeId | |
$_setAttributes | |
$_editableAttributes | |
$_isComposite = false | |
$_storeFilter = null |
Definition at line 34 of file Abstract.php.
_prepareOptionsForCart | ( | Varien_Object $ | buyRequest, | |
$ | product = null | |||
) | [protected] |
Check custom defined options for product
Varien_Object | $buyRequest | |
Mage_Catalog_Model_Product | $product |
Definition at line 346 of file Abstract.php.
00347 { 00348 $newOptions = array(); 00349 foreach ($this->getProduct($product)->getOptions() as $_option) { 00350 /* @var $_option Mage_Catalog_Model_Product_Option */ 00351 $group = $_option->groupFactory($_option->getType()) 00352 ->setOption($_option) 00353 ->setProduct($this->getProduct($product)) 00354 ->setRequest($buyRequest) 00355 ->validateUserValue($buyRequest->getOptions()); 00356 00357 $preparedValue = $group->prepareForCart(); 00358 if ($preparedValue !== null) { 00359 $newOptions[$_option->getId()] = $preparedValue; 00360 } 00361 } 00362 return $newOptions; 00363 }
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 in Mage_Catalog_Model_Product_Type_Configurable.
Definition at line 611 of file Abstract.php.
00612 { 00613 if ($optionProduct) { 00614 $option->setProduct($optionProduct); 00615 } else { 00616 $option->setProduct($this->getProduct($product)); 00617 } 00618 00619 return $this; 00620 }
attributesCompare | ( | $ | attribute1, | |
$ | attribute2 | |||
) |
Compare attribues sorting
Mage_Catalog_Model_Entity_Attribute | $attribute1 | |
Mage_Catalog_Model_Entity_Attribute | $attribute2 |
Definition at line 183 of file Abstract.php.
00184 { 00185 $sort1 = ($attribute1->getGroupSortPath() * 1000) + ($attribute1->getSortPath() * 0.0001); 00186 $sort2 = ($attribute2->getGroupSortPath() * 1000) + ($attribute2->getSortPath() * 0.0001); 00187 00188 if ($sort1 > $sort2) { 00189 return 1; 00190 } elseif ($sort1 < $sort2) { 00191 return -1; 00192 } 00193 00194 return 0; 00195 }
beforeSave | ( | $ | product = null |
) |
Before save type related data
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Downloadable_Model_Product_Type.
Definition at line 455 of file Abstract.php.
00456 { 00457 $this->getProduct($product)->canAffectOptions(true); 00458 return $this; 00459 }
checkProductBuyState | ( | $ | product = null |
) |
Check if product can be bought
Mage_Catalog_Model_Product | $product |
Mage_Core_Exception |
Definition at line 372 of file Abstract.php.
00373 { 00374 if (!$this->getProduct($product)->getSkipCheckRequiredOption()) { 00375 foreach ($this->getProduct($product)->getOptions() as $option) { 00376 if ($option->getIsRequire() && (!$this->getProduct($product)->getCustomOption('option_'.$option->getId()) 00377 || strlen($this->getProduct($product)->getCustomOption('option_'.$option->getId())->getValue()) == 0)) { 00378 Mage::throwException( 00379 Mage::helper('catalog')->__('Product has required options') 00380 ); 00381 break; 00382 } 00383 } 00384 } 00385 00386 return $this; 00387 }
getAttributeById | ( | $ | attributeId, | |
$ | product = null | |||
) |
Retrieve product attribute by identifier
int | $attributeId |
Definition at line 226 of file Abstract.php.
00227 { 00228 foreach ($this->getSetAttributes($product) as $attribute) { 00229 if ($attribute->getId() == $attributeId) { 00230 return $attribute; 00231 } 00232 } 00233 return null; 00234 }
getChildrenIds | ( | $ | parentId, | |
$ | required = true | |||
) |
Retrieve Required children ids Return grouped array, ex array( group => array(ids) )
int | $parentId | |
bool | $required |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.
Definition at line 147 of file Abstract.php.
00148 { 00149 return array(); 00150 }
getEditableAttributes | ( | $ | product = null |
) |
Retrieve product type attributes
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Catalog_Model_Product_Type_Configurable.
Definition at line 203 of file Abstract.php.
00204 { 00205 $cacheKey = '_cache_editable_attributes'; 00206 if (!$this->getProduct($product)->hasData($cacheKey)) { 00207 $editableAttributes = array(); 00208 foreach ($this->getSetAttributes($product) as $attributeCode => $attribute) { 00209 if (!is_array($attribute->getApplyTo()) 00210 || count($attribute->getApplyTo())==0 00211 || in_array($this->getProduct($product)->getTypeId(), $attribute->getApplyTo())) { 00212 $editableAttributes[$attributeCode] = $attribute; 00213 } 00214 } 00215 $this->getProduct($product)->setData($cacheKey, $editableAttributes); 00216 } 00217 return $this->getProduct($product)->getData($cacheKey); 00218 }
getForceChildItemQtyChanges | ( | $ | product = null |
) |
Allow for updates of chidren qty's (applicable for complicated product types. As default returns false)
Reimplemented in Mage_Bundle_Model_Product_Type.
Definition at line 586 of file Abstract.php.
getOrderOptions | ( | $ | product = null |
) |
Prepare additional options/information for order item which will be created from this product
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Downloadable_Model_Product_Type.
Definition at line 396 of file Abstract.php.
00397 { 00398 $optionArr = array(); 00399 if ($info = $this->getProduct($product)->getCustomOption('info_buyRequest')) { 00400 $optionArr['info_buyRequest'] = unserialize($info->getValue()); 00401 } 00402 00403 if ($optionIds = $this->getProduct($product)->getCustomOption('option_ids')) { 00404 foreach (explode(',', $optionIds->getValue()) as $optionId) { 00405 if ($option = $this->getProduct($product)->getOptionById($optionId)) { 00406 00407 $quoteItemOption = $this->getProduct($product)->getCustomOption('option_'.$option->getId()); 00408 00409 $group = $option->groupFactory($option->getType()) 00410 ->setOption($option) 00411 ->setProduct($this->getProduct()) 00412 ->setQuoteItemOption($quoteItemOption); 00413 00414 $optionArr['options'][] = array( 00415 'label' => $option->getTitle(), 00416 'value' => $group->getFormattedOptionValue($quoteItemOption->getValue()), 00417 'print_value' => $group->getPrintableOptionValue($quoteItemOption->getValue()), 00418 'option_id' => $option->getId(), 00419 'option_type' => $option->getType(), 00420 'option_value' => $quoteItemOption->getValue(), 00421 'custom_view' => $group->isCustomizedView() 00422 ); 00423 } 00424 } 00425 } 00426 00427 if ($productTypeConfig = $this->getProduct($product)->getCustomOption('product_type')) { 00428 $optionArr['super_product_config'] = array( 00429 'product_code' => $productTypeConfig->getCode(), 00430 'product_type' => $productTypeConfig->getValue(), 00431 'product_id' => $productTypeConfig->getProductId() 00432 ); 00433 } 00434 00435 return $optionArr; 00436 }
getParentIdsByChild | ( | $ | childId | ) |
Retrieve parent ids array by requered child
int|array | $childId |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.
Definition at line 158 of file Abstract.php.
00159 { 00160 return array(); 00161 }
getProduct | ( | $ | product = null |
) |
Retrieve catalog product object
Mage_Catalog_Model_Product | $product |
Definition at line 119 of file Abstract.php.
00120 { 00121 if (is_object($product)) { 00122 return $product; 00123 } 00124 return $this->_product; 00125 }
getRelationInfo | ( | ) |
Return relation info about used products for specific type instance
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.
Definition at line 132 of file Abstract.php.
00133 { 00134 return new Varien_Object(); 00135 }
getSearchableData | ( | $ | product = null |
) |
Retrieve additional searchable data from type instance Using based on product id and store_id data
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Downloadable_Model_Product_Type.
Definition at line 643 of file Abstract.php.
00644 { 00645 $product = $this->getProduct($product); 00646 00647 $searchData = Mage::getSingleton('catalog/product_option') 00648 ->getSearchableData($product->getId(), $product->getStoreId()); 00649 00650 return $searchData; 00651 }
getSetAttributes | ( | $ | product = null |
) |
Get array of product set attributes
Mage_Catalog_Model_Product | $product |
Definition at line 169 of file Abstract.php.
00170 { 00171 return $this->getProduct($product)->getResource() 00172 ->loadAllAttributes($this->getProduct($product)) 00173 ->getSortedAttributes($this->getProduct($product)->getAttributeSetId()); 00174 }
getSku | ( | $ | product = null |
) |
Default action to get sku of product
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type.
Definition at line 478 of file Abstract.php.
00479 { 00480 $skuDelimiter = '-'; 00481 $sku = $this->getProduct($product)->getData('sku'); 00482 if ($optionIds = $this->getProduct($product)->getCustomOption('option_ids')) { 00483 foreach (explode(',', $optionIds->getValue()) as $optionId) { 00484 if ($option = $this->getProduct($product)->getOptionById($optionId)) { 00485 00486 $quoteItemOption = $this->getProduct($product)->getCustomOption('option_'.$optionId); 00487 00488 $group = $option->groupFactory($option->getType()) 00489 ->setOption($option); 00490 00491 if ($optionSku = $group->getOptionSku($quoteItemOption->getValue(), $skuDelimiter)) { 00492 $sku .= $skuDelimiter . $optionSku; 00493 } 00494 } 00495 } 00496 } 00497 return $sku; 00498 }
getSpecifyOptionMessage | ( | ) |
Retrieve message for specify option(s)
Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Catalog_Model_Product_Type_Configurable.
Definition at line 334 of file Abstract.php.
00335 { 00336 return Mage::helper('catalog')->__('Please specify the product required option(s)'); 00337 }
getStoreFilter | ( | $ | product = null |
) |
Retrive store filter for associated products
Definition at line 561 of file Abstract.php.
00562 { 00563 $cacheKey = '_cache_instance_store_filter'; 00564 return $this->getProduct($product)->getData($cacheKey); 00565 }
getWeight | ( | $ | product = null |
) |
Default action to get weight of product
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Catalog_Model_Product_Type_Configurable.
Definition at line 506 of file Abstract.php.
00507 { 00508 return $this->getProduct($product)->getData('weight'); 00509 }
hasOptions | ( | $ | product = null |
) |
Return true if product has options
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, and Mage_Downloadable_Model_Product_Type.
Definition at line 517 of file Abstract.php.
00518 { 00519 if ($this->getProduct($product)->getHasOptions()) { 00520 return true; 00521 } 00522 return false; 00523 }
hasRequiredOptions | ( | $ | product = null |
) |
Check if product has required options
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Downloadable_Model_Product_Type.
Definition at line 548 of file Abstract.php.
00549 { 00550 if ($this->getProduct($product)->getRequiredOptions()) { 00551 return true; 00552 } 00553 return false; 00554 }
isComposite | ( | $ | product = null |
) |
Check if product is composite (grouped, configurable, etc)
Mage_Catalog_Model_Product | $product |
Definition at line 467 of file Abstract.php.
isSalable | ( | $ | product = null |
) |
Check is product available for sale
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.
Definition at line 253 of file Abstract.php.
00254 { 00255 $salable = $this->getProduct($product)->getStatus() == Mage_Catalog_Model_Product_Status::STATUS_ENABLED; 00256 if ($salable && $this->getProduct($product)->hasData('is_salable')) { 00257 $salable = $this->getProduct($product)->getData('is_salable'); 00258 } 00259 elseif ($salable && $this->isComposite()) { 00260 $salable = null; 00261 } 00262 00263 return $salable; 00264 }
isVirtual | ( | $ | product = null |
) |
Check is virtual product
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Virtual.
Definition at line 242 of file Abstract.php.
prepareForCart | ( | Varien_Object $ | buyRequest, | |
$ | product = null | |||
) |
Initialize product(s) for add to cart process
Varien_Object | $buyRequest | |
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, Mage_Catalog_Model_Product_Type_Grouped, and Mage_Downloadable_Model_Product_Type.
Definition at line 273 of file Abstract.php.
00274 { 00275 $product = $this->getProduct($product); 00276 /* @var Mage_Catalog_Model_Product $product */ 00277 // try to add custom options 00278 try { 00279 $options = $this->_prepareOptionsForCart($buyRequest, $product); 00280 } catch (Mage_Core_Exception $e) { 00281 return $e->getMessage(); 00282 } 00283 00284 if (is_string($options)) { 00285 return $options; 00286 } 00287 // try to found super product configuration 00288 // (if product was buying within grouped product) 00289 $superProductConfig = $buyRequest->getSuperProductConfig(); 00290 if (!empty($superProductConfig['product_id']) 00291 && !empty($superProductConfig['product_type'])) { 00292 $superProductId = (int) $superProductConfig['product_id']; 00293 if ($superProductId) { 00294 if (!$superProduct = Mage::registry('used_super_product_'.$superProductId)) { 00295 $superProduct = Mage::getModel('catalog/product')->load($superProductId); 00296 Mage::register('used_super_product_'.$superProductId, $superProduct); 00297 } 00298 if ($superProduct->getId()) { 00299 $assocProductIds = $superProduct->getTypeInstance(true)->getAssociatedProductIds($superProduct); 00300 if (in_array($product->getId(), $assocProductIds)) { 00301 $productType = $superProductConfig['product_type']; 00302 $product->addCustomOption('product_type', $productType, $superProduct); 00303 00304 $buyRequest->setData('super_product_config', array( 00305 'product_type' => $productType, 00306 'product_id' => $superProduct->getId() 00307 ) 00308 ); 00309 } 00310 } 00311 } 00312 } 00313 00314 $product->addCustomOption('info_buyRequest', serialize($buyRequest->getData())); 00315 00316 if ($options) { 00317 $optionIds = array_keys($options); 00318 $product->addCustomOption('option_ids', implode(',', $optionIds)); 00319 foreach ($options as $optionId => $optionValue) { 00320 $product->addCustomOption('option_'.$optionId, $optionValue); 00321 } 00322 } 00323 // set quantity in cart 00324 $product->setCartQty($buyRequest->getQty()); 00325 00326 return array($product); 00327 }
prepareQuoteItemQty | ( | $ | qty, | |
$ | product = null | |||
) |
Prepare Quote Item Quantity
mixed | $qty |
Reimplemented in Mage_Bundle_Model_Product_Type.
Definition at line 597 of file Abstract.php.
save | ( | $ | product = null |
) |
Save type related data
Mage_Catalog_Model_Product | $product |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, Mage_Catalog_Model_Product_Type_Grouped, and Mage_Downloadable_Model_Product_Type.
Definition at line 444 of file Abstract.php.
setConfig | ( | $ | config | ) |
Setting specified product type variables
array | $config |
Definition at line 628 of file Abstract.php.
00629 { 00630 if (isset($config['composite'])) { 00631 $this->_isComposite = (bool) $config['composite']; 00632 } 00633 return $this; 00634 }
setProduct | ( | $ | product | ) |
Specify type instance product
Mage_Catalog_Model_Product | $product |
Definition at line 95 of file Abstract.php.
setStoreFilter | ( | $ | store = null , |
|
$ | product = null | |||
) |
Set store filter for associated products
$store | int|Mage_Core_Model_Store |
Definition at line 573 of file Abstract.php.
00574 { 00575 $cacheKey = '_cache_instance_store_filter'; 00576 $this->getProduct($product)->setData($cacheKey, $store); 00577 return $this; 00578 }
setTypeId | ( | $ | typeId | ) |
updateQtyOption | ( | $ | options, | |
Varien_Object $ | option, | |||
$ | value, | |||
$ | product = null | |||
) |
Method is needed for specific actions to change given quote options values according current product type logic Example: the cataloginventory validation of decimal qty can change qty to int, so need to change quote item qty option value too.
array | $options | |
Varien_Object | $option | |
mixed | $value |
Reimplemented in Mage_Bundle_Model_Product_Type.
Definition at line 537 of file Abstract.php.
$_editableAttributes [protected] |
Definition at line 63 of file Abstract.php.
$_isComposite = false [protected] |
Reimplemented in Mage_Bundle_Model_Product_Type, Mage_Catalog_Model_Product_Type_Configurable, and Mage_Catalog_Model_Product_Type_Grouped.
Definition at line 70 of file Abstract.php.
$_product [protected] |
Definition at line 42 of file Abstract.php.
$_setAttributes [protected] |
Definition at line 56 of file Abstract.php.
$_storeFilter = null [protected] |
Definition at line 77 of file Abstract.php.
$_typeId [protected] |
Definition at line 49 of file Abstract.php.
const CALCULATE_CHILD = 0 |
Definition at line 79 of file Abstract.php.
const CALCULATE_PARENT = 1 |
Definition at line 80 of file Abstract.php.
const SHIPMENT_SEPARATELY = 1 |
values for shipment type (invoice etc)
Definition at line 86 of file Abstract.php.
const SHIPMENT_TOGETHER = 0 |
Definition at line 87 of file Abstract.php.