📄 shopping_cart.php
字号:
$_SESSION['cart_errors'] .= zen_get_products_name($attribute_price->fields['products_id'], $_SESSION['languages_id']) . ERROR_PRODUCT_OPTION_SELECTION . '<br />';
}
*/
}
}
return $attributes_price;
}
/**
* Method to calculate one time price of attributes for a given item
*
* @param mixed the product ID of the item to check
* @param decimal item quantity
* @return decimal the pice of the items attributes
* @global object access to the db object
*/
function attributes_price_onetime_charges($products_id, $qty) {
global $db;
$attributes_price_onetime = 0;
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
$attribute_price_query = "select *
from " . TABLE_PRODUCTS_ATTRIBUTES . "
where products_id = '" . (int)$products_id . "'
and options_id = '" . (int)$option . "'
and options_values_id = '" . (int)$value . "'";
$attribute_price = $db->Execute($attribute_price_query);
$new_attributes_price = 0;
$discount_type_id = '';
$sale_maker_discount = '';
// if ($attribute_price->fields['product_attribute_is_free']) {
if ($attribute_price->fields['product_attribute_is_free'] == '1' and zen_get_products_price_is_free((int)$products_id)) {
// no charge
} else {
$discount_type_id = '';
$sale_maker_discount = '';
$new_attributes_price = zen_get_discount_calc($products_id, $attribute_price->fields['products_attributes_id'], $attribute_price->fields['options_values_price'], $qty);
//////////////////////////////////////////////////
// calculate additional one time charges
//// one time charges
// attributes_price_onetime
if ($attribute_price->fields['attributes_price_onetime'] > 0) {
if ((int)$products_id != $products_id) {
die('I DO NOT MATCH ' . $products_id);
}
$attributes_price_onetime += $attribute_price->fields['attributes_price_onetime'];
}
// attributes_price_factor_onetime
$added_charge = 0;
if ($attribute_price->fields['attributes_price_factor_onetime'] > 0) {
$chk_price = zen_get_products_base_price($products_id);
$chk_special = zen_get_products_special_price($products_id, false);
$added_charge = zen_get_attributes_price_factor($chk_price, $chk_special, $attribute_price->fields['attributes_price_factor_onetime'], $attribute_price->fields['attributes_price_factor_onetime_offset']);
$attributes_price_onetime += $added_charge;
}
// attributes_qty_prices_onetime
$added_charge = 0;
if ($attribute_price->fields['attributes_qty_prices_onetime'] != '') {
$chk_price = zen_get_products_base_price($products_id);
$chk_special = zen_get_products_special_price($products_id, false);
$added_charge = zen_get_attributes_qty_prices_onetime($attribute_price->fields['attributes_qty_prices_onetime'], $qty);
$attributes_price_onetime += $added_charge;
}
//////////////////////////////////////////////////
}
}
}
return $attributes_price_onetime;
}
/**
* Method to calculate weight of attributes for a given item
*
* @param mixed the product ID of the item to check
* @return decimal the weight of the items attributes
*/
function attributes_weight($products_id) {
global $db;
$attribute_weight = 0;
if (isset($this->contents[$products_id]['attributes'])) {
reset($this->contents[$products_id]['attributes']);
while (list($option, $value) = each($this->contents[$products_id]['attributes'])) {
$attribute_weight_query = "select products_attributes_weight, products_attributes_weight_prefix
from " . TABLE_PRODUCTS_ATTRIBUTES . "
where products_id = '" . (int)$products_id . "'
and options_id = '" . (int)$option . "'
and options_values_id = '" . (int)$value . "'";
$attribute_weight_info = $db->Execute($attribute_weight_query);
// adjusted count for free shipping
$product = $db->Execute("select products_id, product_is_always_free_shipping
from " . TABLE_PRODUCTS . "
where products_id = '" . (int)$products_id . "'");
if ($product->fields['product_is_always_free_shipping'] != 1) {
$new_attributes_weight = $attribute_weight_info->fields['products_attributes_weight'];
} else {
$new_attributes_weight = 0;
}
// + or blank adds
if ($attribute_weight_info->fields['products_attributes_weight_prefix'] == '-') {
$attribute_weight -= $new_attributes_weight;
} else {
$attribute_weight += $attribute_weight_info->fields['products_attributes_weight'];
}
}
}
return $attribute_weight;
}
/**
* Method to return details of all products in the cart
*
* @param boolean whether to check if cart contents are valid
* @return array
*/
function get_products($check_for_valid_cart = false) {
global $db;
$this->notify('NOTIFIER_CART_GET_PRODUCTS_START');
if (!is_array($this->contents)) return false;
$products_array = array();
reset($this->contents);
while (list($products_id, ) = each($this->contents)) {
$products_query = "select p.products_id, p.products_status, pd.products_name, p.products_model, p.products_image,
p.products_price, p.products_weight, p.products_tax_class_id,
p.products_quantity_order_min, p.products_quantity_order_units,
p.product_is_free, p.products_priced_by_attribute,
p.products_discount_type, p.products_discount_type_from
from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd
where p.products_id = '" . (int)$products_id . "'
and pd.products_id = p.products_id
and pd.language_id = '" . (int)$_SESSION['languages_id'] . "'";
if ($products = $db->Execute($products_query)) {
$prid = $products->fields['products_id'];
$products_price = $products->fields['products_price'];
//fix here
/*
$special_price = zen_get_products_special_price($prid);
if ($special_price) {
$products_price = $special_price;
}
*/
$special_price = zen_get_products_special_price($prid);
if ($special_price and $products->fields['products_priced_by_attribute'] == 0) {
$products_price = $special_price;
} else {
$special_price = 0;
}
if (zen_get_products_price_is_free($products->fields['products_id'])) {
// no charge
$products_price = 0;
}
// adjust price for discounts when priced by attribute
if ($products->fields['products_priced_by_attribute'] == '1' and zen_has_product_attributes($products->fields['products_id'], 'false')) {
// reset for priced by attributes
// $products_price = $products->fields['products_price'];
if ($special_price) {
$products_price = $special_price;
} else {
$products_price = $products->fields['products_price'];
}
} else {
// discount qty pricing
if ($products->fields['products_discount_type'] != '0') {
$products_price = zen_get_products_discount_price_qty($products->fields['products_id'], $this->contents[$products_id]['qty']);
}
}
// validate cart contents for checkout
if ($check_for_valid_cart == true) {
$fix_once = 0;
// Check products_status if not already
$check_status = $products->fields['products_status'];
if ( $check_status == 0 ) {
$fix_once ++;
$_SESSION['valid_to_checkout'] = false;
$_SESSION['cart_errors'] .= ERROR_PRODUCT . $products->fields['products_name'] . ERROR_PRODUCT_STATUS_SHOPPING_CART . '<br />';
$this->remove($products_id);
}
// check only if valid products_status
if ($fix_once == 0) {
$check_quantity = $this->contents[$products_id]['qty'];
$check_quantity_min = $products->fields['products_quantity_order_min'];
// Check quantity min
if ($new_check_quantity = $this->in_cart_mixed($prid) ) {
$check_quantity = $new_check_quantity;
}
}
if ($fix_once == 0) {
if ($check_quantity < $check_quantity_min) {
$fix_once ++;
$_SESSION['valid_to_checkout'] = false;
$_SESSION['cart_errors'] .= ERROR_PRODUCT . $products->fields['products_name'] . ERROR_PRODUCT_QUANTITY_MIN_SHOPPING_CART . ERROR_PRODUCT_QUANTITY_ORDERED . $check_quantity . ' <span class="alertBlack">' . zen_get_products_quantity_min_units_display((int)$prid, false, true) . '</span> ' . '<br />';
}
}
// Check Quantity Units if not already an error on Quantity Minimum
if ($fix_once == 0) {
$check_units = $products->fields['products_quantity_order_units'];
if ( fmod_round($check_quantity,$check_units) != 0 ) {
$_SESSION['valid_to_checkout'] = false;
$_SESSION['cart_errors'] .= ERROR_PRODUCT . $products->fields['products_name'] . ERROR_PRODUCT_QUANTITY_UNITS_SHOPPING_CART . ERROR_PRODUCT_QUANTITY_ORDERED . $check_quantity . ' <span class="alertBlack">' . zen_get_products_quantity_min_units_display((int)$prid, false, true) . '</span> ' . '<br />';
}
}
// Verify Valid Attributes
}
//clr 030714 update $products_array to include attribute value_text. This is needed for text attributes.
// convert quantity to proper decimals
if (QUANTITY_DECIMALS != 0) {
// $new_qty = round($new_qty, QUANTITY_DECIMALS);
$fix_qty = $this->contents[$products_id]['qty'];
switch (true) {
case (!strstr($fix_qty, '.')):
$new_qty = $fix_qty;
break;
default:
$new_qty = preg_replace('/[0]+$/','',$this->contents[$products_id]['qty']);
break;
}
} else {
$new_qty = $this->contents[$products_id]['qty'];
}
$new_qty = round($new_qty, QUANTITY_DECIMALS);
if ($new_qty == (int)$new_qty) {
$new_qty = (int)$new_qty;
}
$products_array[] = array('id' => $products_id,
'name' => $products->fields['products_name'],
'model' => $products->fields['products_model'],
'image' => $products->fields['products_image'],
'price' => ($products->fields['product_is_free'] =='1' ? 0 : $products_price),
// 'quantity' => $this->contents[$products_id]['qty'],
'quantity' => $new_qty,
'weight' => $products->fields['products_weight'] + $this->attributes_weight($products_id),
// fix here
'final_price' => ($products_price + $this->attributes_price($products_id)),
'onetime_charges' => ($this->attributes_price_onetime_charges($products_id, $new_qty)),
'tax_class_id' => $products->fields['products_tax_class_id'],
'attributes' => (isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : ''),
'attributes_values' => (isset($this->contents[$products_id]['attributes_values']) ? $this->contents[$products_id]['attributes_values'] : ''),
'products_priced_by_attribute' => $products->fields['products_priced_by_attribute'],
'product_is_free' => $products->fields['product_is_free'],
'products_discount_type' => $products->fields['products_discount_type'],
'products_discount_type_from' => $products->fields['products_discount_type_from']);
}
}
$this->notify('NOTIFIER_CART_GET_PRODUCTS_END');
return $products_array;
}
/**
* Method to calculate total price of items in cart
*
* @return decimal Total Price
*/
function show_total() {
$this->notify('NOTIFIER_CART_SHOW_TOTAL_START');
$this->calculate();
$this->notify('NOTIFIER_CART_SHOW_TOTAL_END');
return $this->total;
}
/**
* Method to calculate total weight of items in cart
*
* @return decimal Total Weight
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -