📄 functions_prices.php
字号:
////
// return attributes_price_factor
function zen_get_attributes_price_factor($price, $special, $factor, $offset) {
if (ATTRIBUTES_PRICE_FACTOR_FROM_SPECIAL =='1' and $special) {
// calculate from specials_new_products_price
$calculated_price = $special * ($factor - $offset);
} else {
// calculate from products_price
$calculated_price = $price * ($factor - $offset);
}
// return '$price ' . $price . ' $special ' . $special . ' $factor ' . $factor . ' $offset ' . $offset;
return $calculated_price;
}
////
// return attributes_qty_prices or attributes_qty_prices_onetime based on qty
function zen_get_attributes_qty_prices_onetime($string, $qty) {
$attribute_qty = split("[:,]" , $string); $new_price = 0;
$size = sizeof($attribute_qty);// if an empty string is passed then $attributes_qty will consist of a 1 element array if ($size > 1) {
for ($i=0, $n=$size; $i<$n; $i+=2) { $new_price = $attribute_qty[$i+1];
if ($qty <= $attribute_qty[$i]) {
$new_price = $attribute_qty[$i+1];
break;
}
} }
return $new_price;
}
////
// Check specific attributes_qty_prices or attributes_qty_prices_onetime for a given quantity price
function zen_get_attributes_quantity_price($check_what, $check_for) {
// $check_what='1:3.00,5:2.50,10:2.25,20:2.00';
// $check_for=50;
$attribute_table_cost = split("[:,]" , $check_what);
$size = sizeof($attribute_table_cost);
for ($i=0, $n=$size; $i<$n; $i+=2) {
if ($check_for >= $attribute_table_cost[$i]) {
$attribute_quantity_check = $attribute_table_cost[$i];
$attribute_quantity_price = $attribute_table_cost[$i+1];
}
}
// echo '<br>Cost ' . $check_for . ' - ' . $attribute_quantity_check . ' x ' . $attribute_quantity_price;
return $attribute_quantity_price;
}
////
// attributes final price
function zen_get_attributes_price_final($attribute, $qty = 1, $pre_selected, $include_onetime = 'false') {
global $db;
global $cart;
$attributes_price_final = 0;
if ($pre_selected == '' or $attribute != $pre_selected->fields["products_attributes_id"]) {
$pre_selected = $db->Execute("select pa.* from " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_attributes_id= '" . $attribute . "'");
} else {
// use existing select
}
// normal attributes price
if ($pre_selected->fields["price_prefix"] == '-') {
$attributes_price_final -= $pre_selected->fields["options_values_price"];
} else {
$attributes_price_final += $pre_selected->fields["options_values_price"];
}
// qty discounts
$attributes_price_final += zen_get_attributes_qty_prices_onetime($pre_selected->fields["attributes_qty_prices"], $qty);
// price factor
$display_normal_price = zen_get_products_actual_price($pre_selected->fields["products_id"]);
$display_special_price = zen_get_products_special_price($pre_selected->fields["products_id"]);
$attributes_price_final += zen_get_attributes_price_factor($display_normal_price, $display_special_price, $pre_selected->fields["attributes_price_factor"], $pre_selected->fields["attributes_price_factor_offset"]);
// per word and letter charges
if (zen_get_attributes_type($attribute) == PRODUCTS_OPTIONS_TYPE_TEXT) {
// calc per word or per letter
}
// onetime charges
if ($include_onetime == 'true') {
$pre_selected_onetime = $pre_selected;
$attributes_price_final += zen_get_attributes_price_final_onetime($pre_selected->fields["products_attributes_id"], 1, $pre_selected_onetime);
}
return $attributes_price_final;
}
////
// attributes final price onetime
function zen_get_attributes_price_final_onetime($attribute, $qty= 1, $pre_selected_onetime) {
global $db;
global $cart;
if ($pre_selected_onetime == '' or $attribute != $pre_selected_onetime->fields["products_attributes_id"]) {
$pre_selected_onetime = $db->Execute("select pa.* from " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_attributes_id= '" . $attribute . "'");
} else {
// use existing select
}
// one time charges
// onetime charge
$attributes_price_final_onetime += $pre_selected_onetime->fields["attributes_price_onetime"];
// price factor
$display_normal_price = zen_get_products_actual_price($pre_selected_onetime->fields["products_id"]);
$display_special_price = zen_get_products_special_price($pre_selected_onetime->fields["products_id"]);
// price factor one time
$attributes_price_final_onetime += zen_get_attributes_price_factor($display_normal_price, $display_special_price, $pre_selected_onetime->fields["attributes_price_factor_onetime"], $pre_selected_onetime->fields["attributes_price_factor_onetime_offset"]);
// onetime charge qty price
$attributes_price_final_onetime += zen_get_attributes_qty_prices_onetime($pre_selected_onetime->fields["attributes_qty_prices_onetime"], 1);
return $attributes_price_final_onetime;
}
////
// get attributes type
function zen_get_attributes_type($check_attribute) {
global $db;
$check_options_id_query = $db->Execute("select options_id from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_attributes_id='" . $check_attribute . "'");
$check_type_query = $db->Execute("select products_options_type from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id='" . $check_options_id_query->fields['options_id'] . "'");
return $check_type_query->fields['products_options_type'];
}
////
// calculate words
function zen_get_word_count($string, $free=0) {
if ($string != '') {
while (strstr($string, ' ')) $string = str_replace(' ', ' ', $string);
$string = trim($string);
$word_count = substr_count($string, ' ');
return (($word_count+1) - $free);
} else {
// nothing to count
return 0;
}
}
////
// calculate words price
function zen_get_word_count_price($string, $free=0, $price) {
$word_count = zen_get_word_count($string, $free);
if ($word_count >= 1) {
return ($word_count * $price);
} else {
return 0;
}
}
////
// calculate letters
function zen_get_letters_count($string, $free=0) {
while (strstr($string, ' ')) $string = str_replace(' ', ' ', $string);
$string = trim($string);
if (TEXT_SPACES_FREE == '1') {
$letters_count = strlen(str_replace(' ', '', $string));
} else {
$letters_count = strlen($string);
}
if ($letters_count - $free >= 1) {
return ($letters_count - $free);
} else {
return 0;
}
}
////
// calculate letters price
function zen_get_letters_count_price($string, $free=0, $price) {
$letters_price = zen_get_letters_count($string, $free) * $price;
if ($letters_price <= 0) {
return 0;
} else {
return $letters_price;
}
}
////
// compute discount based on qty
function zen_get_products_discount_price_qty($product_id, $check_qty, $check_amount=0) {
global $db, $cart;
$new_qty = $_SESSION['cart']->in_cart_mixed_discount_quantity($product_id);
// check for discount qty mix
if ($new_qty > $check_qty) {
$check_qty = $new_qty;
}
$product_id = (int)$product_id;
$products_query = $db->Execute("select products_discount_type, products_discount_type_from, products_priced_by_attribute from " . TABLE_PRODUCTS . " where products_id='" . $product_id . "'");
$products_discounts_query = $db->Execute("select * from " . TABLE_PRODUCTS_DISCOUNT_QUANTITY . " where products_id='" . $product_id . "' and discount_qty <='" . $check_qty . "' order by discount_qty desc");
$display_price = zen_get_products_base_price($product_id);
$display_specials_price = zen_get_products_special_price($product_id, true);
switch ($products_query->fields['products_discount_type']) {
// none
case ($products_discounts_query->EOF):
//no discount applies
$discounted_price = zen_get_products_actual_price($product_id);
break;
case '0':
$discounted_price = zen_get_products_actual_price($product_id);
break;
// percentage discount
case '1':
if ($products_query->fields['products_discount_type_from'] == '0') {
// priced by attributes
if ($check_amount != 0) {
$discounted_price = $check_amount - ($check_amount * ($products_discounts_query->fields['discount_price']/100));
//echo 'ID#' . $product_id . ' Amount is: ' . $check_amount . ' discount: ' . $discounted_price . '<br />';
//echo 'I SEE 2 for ' . $products_query->fields['products_discount_type'] . ' - ' . $products_query->fields['products_discount_type_from'] . ' - '. $check_amount . ' new: ' . $discounted_price . ' qty: ' . $check_qty;
} else {
$discounted_price = $display_price - ($display_price * ($products_discounts_query->fields['discount_price']/100));
}
} else {
if (!$display_specials_price) {
// priced by attributes
if ($check_amount != 0) {
$discounted_price = $check_amount - ($check_amount * ($products_discounts_query->fields['discount_price']/100));
} else {
$discounted_price = $display_price - ($display_price * ($products_discounts_query->fields['discount_price']/100));
}
} else {
$discounted_price = $display_specials_price - ($display_specials_price * ($products_discounts_query->fields['discount_price']/100));
}
}
break;
// actual price
case '2':
if ($products_query->fields['products_discount_type_from'] == '0') {
$discounted_price = $products_discounts_query->fields['discount_price'];
} else {
$discounted_price = $products_discounts_query->fields['discount_price'];
}
break;
// amount offprice
case '3':
if ($products_query->fields['products_discount_type_from'] == '0') {
$discounted_price = $display_price - $products_discounts_query->fields['discount_price'];
} else {
if (!$display_specials_price) {
$discounted_price = $display_price - $products_discounts_query->fields['discount_price'];
} else {
$discounted_price = $display_specials_price - $products_discounts_query->fields['discount_price'];
}
}
break;
}
return $discounted_price;
}
////
// are there discount quanties
function zen_get_discount_qty($product_id, $check_qty) {
global $db;
$product_id = (int)$product_id;
$discounts_qty_query = $db->Execute("select * from " . TABLE_PRODUCTS_DISCOUNT_QUANTITY . " where products_id='" . $product_id . "' and discount_qty != 0");
//echo 'zen_get_discount_qty: ' . $product_id . ' - ' . $check_qty . '<br />';
if ($discounts_qty_query->RecordCount() > 0 and $check_qty > 0) {
return true;
} else {
return false;
}
}
////
// set the products_price_sorter
function zen_update_products_price_sorter($product_id) {
global $db;
$products_price_sorter = zen_get_products_actual_price($product_id);
$db->Execute("update " . TABLE_PRODUCTS . " set
products_price_sorter='" . zen_db_prepare_input($products_price_sorter) . "'
where products_id='" . $product_id . "'");
}
////
// salemaker categories array
function zen_parse_salemaker_categories($clist) {
$clist_array = explode(',', $clist);
// make sure no duplicate category IDs exist which could lock the server in a loop
$tmp_array = array();
$n = sizeof($clist_array);
for ($i=0; $i<$n; $i++) {
if (!in_array($clist_array[$i], $tmp_array)) {
$tmp_array[] = $clist_array[$i];
}
}
return $tmp_array;
}
////
// update salemaker product prices per category per product
function zen_update_salemaker_product_prices($salemaker_id) {
global $db;
$zv_categories = $db->Execute("select sale_categories_selected from " . TABLE_SALEMAKER_SALES . " where sale_id = '" . $salemaker_id . "'");
$za_salemaker_categories = zen_parse_salemaker_categories($zv_categories->fields['sale_categories_selected']);
$n = sizeof($za_salemaker_categories);
for ($i=0; $i<$n; $i++) {
$update_products_price = $db->Execute("select products_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id='" . $za_salemaker_categories[$i] . "'");
while (!$update_products_price->EOF) {
zen_update_products_price_sorter($update_products_price->fields['products_id']);
$update_products_price->MoveNext();
}
}
}
?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -