/**
  * Return true if attribute can have prices
  *
  * @return bool
  */
 public function canHavePrices()
 {
     if ($this instanceof IsotopeAttributeForVariants && $this->isVariantOption()) {
         return false;
     }
     return in_array($this->field_name, Attribute::getPricedFields());
 }
예제 #2
0
파일: Frontend.php 프로젝트: bytehead/core
 /**
  * Calculate price surcharge for attribute options
  *
  * @param float  $fltPrice
  * @param object $objSource
  * @param string $strField
  * @param int    $intTaxClass
  * @param array  $arrOptions
  *
  * @return float
  * @throws \Exception
  */
 public function addOptionsPrice($fltPrice, $objSource, $strField, $intTaxClass, array $arrOptions)
 {
     $fltAmount = $fltPrice;
     if ($objSource instanceof IsotopePrice && ($objProduct = $objSource->getRelated('pid')) !== null) {
         /** @type IsotopeProduct|Standard $objProduct */
         $arrAttributes = array_intersect(Attribute::getPricedFields(), array_merge($objProduct->getAttributes(), $objProduct->getVariantAttributes()));
         foreach ($arrAttributes as $field) {
             if (($objAttribute = $GLOBALS['TL_DCA']['tl_iso_product']['attributes'][$field]) !== null && $objAttribute instanceof IsotopeAttributeWithOptions && $objAttribute->canHavePrices() && ($objOptions = $objAttribute->getOptionsFromManager($objProduct)) !== null) {
                 $value = $objAttribute->isCustomerDefined() ? $arrOptions[$field] : $objProduct->{$field};
                 $value = deserialize($value, true);
                 /** @type AttributeOption $objOption */
                 foreach ($objOptions as $objOption) {
                     if (in_array($objOption->id, $value)) {
                         $fltAmount += $objOption->getAmount($fltPrice, $objSource->tax_class);
                     }
                 }
             }
         }
     }
     return $fltAmount;
 }