preProcess(); function formatQuantityDiscounts($specificPrices, $price, $taxRate) { foreach($specificPrices as $key => &$row) { $row['quantity'] = &$row['from_quantity']; // The price may be directly set if ($row['price'] != 0) { $cur_price = (Product::$_taxCalculationMethod == PS_TAX_EXC? $row['price']: $row['price'] * (1 + $taxRate / 100)); if($row['reduction_type'] == 'amount') { $cur_price = Product::$_taxCalculationMethod == PS_TAX_INC? $cur_price - $row['reduction']: $cur_price - ($row['reduction'] / (1 + $taxRate / 100)); } else { $cur_price = $cur_price * ( 1 - ($row['reduction'])); } $row['real_value'] = $price - $cur_price; } else { global $cookie; $id_currency = (int) $cookie->id_currency; if($row['reduction_type'] == 'amount') { $reduction_amount = $row['reduction']; if(!$row['id_currency']) { $reduction_amount = Tools::convertPrice($reduction_amount, $id_currency); } $row['real_value'] = Product::$_taxCalculationMethod == PS_TAX_INC? $reduction_amount: $reduction_amount / (1 + $taxRate / 100); } else { $row['real_value'] = $row['reduction'] * 100; } } $row['nextQuantity'] = (isset($specificPrices[$key + 1])? (int)($specificPrices[$key + 1]['from_quantity']): -1); } return $specificPrices; } $result = ''; if($id_product = (int) Tools::getValue('id_product')) { $product = new Product($id_product, true, (int) $cookie->id_lang); if(Validate::isLoadedObject($product)) { $ecotax_rate = (float) Tax::getProductEcotaxRate($cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $ecotaxTaxAmount = Tools::ps_round($product->ecotax, 2); if(Product::$_taxCalculationMethod == PS_TAX_INC && (int) Configuration::get('PS_TAX')) { $ecotaxTaxAmount = Tools::ps_round($ecotaxTaxAmount * (1 + $ecotax_rate / 100), 2); } $id_customer = (isset($cookie->id_customer) && $cookie->id_customer)? (int) $cookie->id_customer: 0; $id_group = $id_customer ? (int) Customer::getDefaultGroupId($id_customer): _PS_DEFAULT_CUSTOMER_GROUP_; $id_country = (int) ($id_customer? Customer::getCurrentCountry($id_customer): Configuration::get('PS_COUNTRY_DEFAULT')); $ps_language = new Language((int) $cookie->id_lang); $group_reduction = GroupReduction::getValueForProduct($product->id, $id_group); if($group_reduction == 0) { $group_reduction = Group::getReduction((int) $cookie->id_customer) / 100; } $tax = (float) Tax::getProductTaxRate((int) $product->id, $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}); $productPriceWithTax = Product::getPriceStatic($product->id, TRUE, NULL, 6); if(Product::$_taxCalculationMethod == PS_TAX_INC) { $productPriceWithTax = Tools::ps_round($productPriceWithTax, 2); } $productPriceWithoutEcoTax = (float) ($productPriceWithTax - $product->ecotax); $colors = array(); $attributesGroups = $product->getAttributesGroups((int) $cookie->id_lang); if(is_array($attributesGroups) && $attributesGroups) { $groups = array(); $combinationImages = $product->getCombinationImages((int) $cookie->id_lang); foreach($attributesGroups as $k => $row) { /* Color management */ if(((isset($row['attribute_color']) && $row['attribute_color']) || (file_exists(_PS_COL_IMG_DIR_.$row['id_attribute'].'.jpg'))) && $row['id_attribute_group'] == $product->id_color_default) { $colors[$row['id_attribute']]['value'] = $row['attribute_color']; $colors[$row['id_attribute']]['name'] = $row['attribute_name']; if(!isset($colors[$row['id_attribute']]['attributes_quantity'])) { $colors[$row['id_attribute']]['attributes_quantity'] = 0; } $colors[$row['id_attribute']]['attributes_quantity'] += (int)($row['quantity']); } if(!isset($groups[$row['id_attribute_group']])) { $groups[$row['id_attribute_group']] = array( 'name' => $row['public_group_name'], 'is_color_group' => $row['is_color_group'], 'default' => -1, ); } $groups[$row['id_attribute_group']]['attributes'][$row['id_attribute']] = $row['attribute_name']; if($row['default_on'] && $groups[$row['id_attribute_group']]['default'] == -1) { $groups[$row['id_attribute_group']]['default'] = (int)($row['id_attribute']); } if(!isset($groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']])) { $groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] = 0; } $groups[$row['id_attribute_group']]['attributes_quantity'][$row['id_attribute']] += (int)($row['quantity']); $combinations[$row['id_product_attribute']]['attributes_values'][$row['id_attribute_group']] = $row['attribute_name']; $combinations[$row['id_product_attribute']]['attributes'][] = (int) $row['id_attribute']; $combinations[$row['id_product_attribute']]['price'] = (float) $row['price']; $combinations[$row['id_product_attribute']]['ecotax'] = (float) $row['ecotax']; $combinations[$row['id_product_attribute']]['weight'] = (float) $row['weight']; $combinations[$row['id_product_attribute']]['quantity'] = (int) $row['quantity']; $combinations[$row['id_product_attribute']]['reference'] = $row['reference']; $combinations[$row['id_product_attribute']]['ean13'] = $row['ean13']; $combinations[$row['id_product_attribute']]['unit_impact'] = $row['unit_price_impact']; $combinations[$row['id_product_attribute']]['minimal_quantity'] = $row['minimal_quantity']; $combinations[$row['id_product_attribute']]['id_image'] = isset($combinationImages[$row['id_product_attribute']][0]['id_image'])? $combinationImages[$row['id_product_attribute']][0]['id_image']: -1; } //wash attributes list (if some attributes are unavailables and if allowed to wash it) if(!Product::isAvailableWhenOutOfStock($product->out_of_stock) && Configuration::get('PS_DISP_UNAVAILABLE_ATTR') == 0) { foreach($groups as &$group) { foreach($group['attributes_quantity'] as $key => &$quantity) { if(!$quantity) { unset($group['attributes'][$key]); } } } foreach($colors as $key => $color) { if(!$color['attributes_quantity']) { unset($colors[$key]); } } } foreach($groups as &$group) { natcasesort($group['attributes']); } foreach($combinations as $id_product_attribute => $comb) { $attributeList = ''; foreach($comb['attributes'] as $id_attribute) { $attributeList .= '\''.(int) $id_attribute.'\','; } $attributeList = rtrim($attributeList, ','); $combinations[$id_product_attribute]['list'] = $attributeList; } $smarty->assign(array( 'groups' => $groups, 'combinaisons' => $combinations, /* Kept for compatibility purpose only */ 'combinations' => $combinations, 'colors' => (sizeof($colors) && $product->id_color_default)? $colors: FALSE, 'combinationImages' => $combinationImages, )); } $smarty->assign(array( 'cartex' => Module::isInstalled('blockcartex'), 'product' => $product, 'quantity_discounts' => formatQuantityDiscounts(SpecificPrice::getQuantityDiscounts((int) $product->id, (int) Shop::getCurrentShop(), (int) $cookie->id_currency, $id_country, $id_group), $product->getPrice(Product::$_taxCalculationMethod == PS_TAX_INC, FALSE), (float) $tax), 'ecotax_tax_inc' => $ecotaxTaxAmount, 'tax_rate' => $tax, 'ecotax_tax_exc' => Tools::ps_round($product->ecotax, 2), 'ecotaxTax_rate' => $ecotax_rate, 'product_manufacturer' => new Manufacturer((int) $product->id_manufacturer, $cookie->id_lang), 'static_token' => Tools::getToken(FALSE), 'token' => Tools::getToken(), 'lang_iso' => $ps_language->iso_code, 'productPriceWithoutEcoTax' => (float) $productPriceWithoutEcoTax, 'PS_CATALOG_MODE' => (bool) Configuration::get('PS_CATALOG_MODE'), 'allow_oosp' => $product->isAvailableWhenOutOfStock((int) $product->out_of_stock), 'last_qties' => (int) Configuration::get('PS_LAST_QTIES'), 'group_reduction' => (1 - $group_reduction), 'ENT_NOQUOTES' => ENT_NOQUOTES, 'priceDisplay' => Product::getTaxCalculationMethod(), 'roundMode' => (int) Configuration::get('PS_PRICE_ROUND_MODE'), 'outOfStockAllowed' => (int) Configuration::get('PS_ORDER_OUT_OF_STOCK'), 'tax_enabled' => Configuration::get('PS_TAX'), 'display_qties' => (int) Configuration::get('PS_DISPLAY_QTIES'), 'display_ht' => !Tax::excludeTaxeOption(), 'ecotax' => ($product->ecotax > 0? Tools::convertPrice((float) $product->ecotax): 0), 'currencySign' => $currency->sign, 'currencyRate' => $currency->conversion_rate, 'currencyFormat' => $currency->format, 'currencyBlank' => $currency->blank, 'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_, 'no_tax' => Tax::excludeTaxeOption() || !Tax::getProductTaxRate((int) $product->id, $cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')}), 'customizationFields' => ($product->customizable? $product->getCustomizationFields((int) $cookie->id_lang): FALSE), 'packItems' => $product->cache_is_pack? Pack::getItemTable($product->id, (int) $cookie->id_lang, TRUE): array(), 'packs' => Pack::getPacksTable($product->id, (int) $cookie->id_lang, TRUE, 1), 'virtual' => ProductDownload::getIdFromIdProduct((int) $product->id), )); $result = $smarty->fetch(file_exists(_PS_THEME_DIR_.'modules/expresscart/product.tpl')? '../../themes/'._THEME_NAME_.'/modules/expresscart/product.tpl': 'product.tpl', __FILE__); } else { $smarty->assign('error', 'product_missing'); $result = $smarty->fetch(file_exists(_PS_THEME_DIR_.'modules/expresscart/error.tpl')? '../../themes/'._THEME_NAME_.'/modules/expresscart/error.tpl': 'error.tpl', __FILE__); } } else { $smarty->assign('error', 'product_missing'); $result = $smarty->fetch(file_exists(_PS_THEME_DIR_.'modules/expresscart/error.tpl')? '../../themes/'._THEME_NAME_.'/modules/expresscart/error.tpl': 'error.tpl', __FILE__); } echo $result;