✏️ 正在编辑: combination.php
路径:
/home/bpioifn/www/pigmentse/modules/easycart/controllers/front/combination.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php /** * Please do not edit or add any code in this file without the permission of PIBBLU * * @author Saravana Technology Solutions * @copyright Saravana Technology Solutions * @license http://www.pibblu.in * Prestashop version 1.7+ * easycart 1.0.0 * Dec 2017 */ class EasycartCombinationModuleFrontController extends ModuleFrontController { public function postProcess() { if ($id_product = (int)Tools::getValue('id_product')) { $this->product = new Product($id_product, false, $this->context->language->id, $this->context->shop->id); $this->assignImages(); $this->assignGeneralPurposeVariables(); $res = $this->assignAttributesGroups(); die(Tools::jsonEncode($res)); } } protected function assignImages() { $images = $this->product->getImages((int)$this->context->cookie->id_lang); $product_images = array(); if (isset($images[0])) { $this->context->smarty->assign('mainImage', $images[0]); } foreach ($images as $k => $image) { if ($image['cover']) { $this->context->smarty->assign('mainImage', $image); $cover = $image; $cover['id_image'] = (Configuration::get('PS_LEGACY_IMAGES') ? ($this->product->id.'-'.$image['id_image']) : $image['id_image']); $cover['id_image_only'] = (int)$image['id_image']; } $product_images[(int)$image['id_image']] = $image; } if (!isset($cover)) { if (isset($images[0])) { $cover = $images[0]; $cover['id_image'] = (Configuration::get('PS_LEGACY_IMAGES') ? ($this->product->id.'-'.$images[0]['id_image']) : $images[0]['id_image']); $cover['id_image_only'] = (int)$images[0]['id_image']; } else { $cover = array( 'id_image' => $this->context->language->iso_code.'-default', 'legend' => 'No picture', 'title' => 'No picture' ); } } $size = Image::getSize(ImageType::getFormatedName('large')); $this->context->smarty->assign(array( 'have_image' => (isset($cover['id_image']) && (int)$cover['id_image'])? array((int)$cover['id_image']) : Product::getCover((int)Tools::getValue('id_product')), 'cover' => $cover, 'imgWidth' => (int)$size['width'], 'mediumSize' => Image::getSize(ImageType::getFormatedName('medium')), 'largeSize' => Image::getSize(ImageType::getFormatedName('large')), 'homeSize' => Image::getSize(ImageType::getFormatedName('home')), 'cartSize' => Image::getSize(ImageType::getFormatedName('cart')), 'img_col_dir' => '/img/co/', //'priceDisplay' => Product::getTaxCalculationMethod((int)$this->context->cookie->id_customer), 'col_img_dir' => _PS_COL_IMG_DIR_)); if (count($product_images)) { $this->context->smarty->assign('images', $product_images); } } public function getAttributesGroups($product_id, $id_lang) { if (!Combination::isFeatureActive()) { return array(); } $sql = 'SELECT ag.`id_attribute_group`, ag.`is_color_group`, agl.`name` AS group_name, agl.`public_name` AS public_group_name, a.`id_attribute`, al.`name` AS attribute_name, a.`color` AS attribute_color, product_attribute_shop.`id_product_attribute`, IFNULL(stock.quantity, 0) as quantity, product_attribute_shop.`price`, product_attribute_shop.`ecotax`, product_attribute_shop.`weight`, product_attribute_shop.`default_on`, pa.`reference`, product_attribute_shop.`unit_price_impact`, product_attribute_shop.`minimal_quantity`, product_attribute_shop.`available_date`, ag.`group_type` FROM `'._DB_PREFIX_.'product_attribute` pa '.Shop::addSqlAssociation('product_attribute', 'pa').' '.Product::sqlStock('pa', 'pa').' LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON (pac.`id_product_attribute` = pa.`id_product_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute` a ON (a.`id_attribute` = pac.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON (ag.`id_attribute_group` = a.`id_attribute_group`) LEFT JOIN `'._DB_PREFIX_.'attribute_lang` al ON (a.`id_attribute` = al.`id_attribute`) LEFT JOIN `'._DB_PREFIX_.'attribute_group_lang` agl ON (ag.`id_attribute_group` = agl.`id_attribute_group`) '.Shop::addSqlAssociation('attribute', 'a').' WHERE pa.`id_product` = '.(int)$product_id.' AND al.`id_lang` = '.(int)$id_lang.' AND agl.`id_lang` = '.(int)$id_lang.$this->addOOSCondition().' GROUP BY id_attribute_group, id_product_attribute ORDER BY ag.`position` ASC, a.`position` ASC, pac.`id_product_attribute` ASC, agl.`name` ASC'; //print_r($sql); //die(); return Db::getInstance()->executeS($sql); } public function addOOSCondition() { $MC_DISPLAY_COMB_OOS = Configuration::get('MC_DISPLAY_COMB_OOS'); if (!$MC_DISPLAY_COMB_OOS) { return " AND stock.quantity > 0 "; } else { return ""; } } protected function assignAttributesGroups() { $colors = array(); $groups = array(); $attributes_groups = $this->getAttributesGroups($this->product->id, $this->context->language->id); $allow_oosp = Product::isAvailableWhenOutOfStock((int)$this->product->out_of_stock); if (is_array($attributes_groups) && $attributes_groups) { $mc_cart_prod_qty = Context::getContext()->cart->getProducts(); $mc_product_attr_qty = array(); $mc_product_present_incart = false; if (is_array($mc_cart_prod_qty) && $mc_cart_prod_qty) { foreach ($mc_cart_prod_qty as $mc_cart_prod_item) { if ($this->product->id == $mc_cart_prod_item['id_product']) { $mc_product_present_incart = true; $mc_product_attr_qty[$mc_cart_prod_item['id_product_attribute']] = $mc_cart_prod_item['cart_quantity']; } } } $combination_images = $this->product->getCombinationImages($this->context->language->id); $combination_prices_set = array(); $combinations = array(); foreach ($attributes_groups as $k => $row) { if (isset($row['is_color_group']) && $row['is_color_group'] && (isset($row['attribute_color']) && $row['attribute_color']) || (file_exists(_PS_COL_IMG_DIR_.$row['id_attribute'].'.jpg'))) { $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( 'group_name' => $row['group_name'], 'name' => $row['public_group_name'], 'group_type' => $row['group_type'], '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']]['id_attribute'][$row['id_attribute_group']] = (int)$row['id_attribute']; $combinations[$row['id_product_attribute']]['attributes'][] = (int)$row['id_attribute']; $combinations[$row['id_product_attribute']]['price'] = (float)$row['price']; if ($mc_product_present_incart && isset($mc_product_attr_qty[(int)$row['id_product_attribute']])) { $combinations[$row['id_product_attribute']]['cart_quantity'] = (int)$mc_product_attr_qty[(int)$row['id_product_attribute']]; } else { $combinations[$row['id_product_attribute']]['cart_quantity'] = 0; } // Call getPriceStatic in order to set $combination_specific_price $combination_specific_price = array(); if (!isset($combination_prices_set[(int)$row['id_product_attribute']])) { Product::getPriceStatic((int)$this->product->id, Product::$_taxCalculationMethod == PS_TAX_INC, $row['id_product_attribute'], 6, null, false, true, 1, false, null, null, null, $combination_specific_price); $combination_prices_set[(int)$row['id_product_attribute']] = true; $combinations[$row['id_product_attribute']]['specific_price'] = $combination_specific_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']]['unit_impact'] = $row['unit_price_impact']; $combinations[$row['id_product_attribute']]['minimal_quantity'] = $row['minimal_quantity']; if ($row['available_date'] != '0000-00-00' && Validate::isDate($row['available_date'])) { $combinations[$row['id_product_attribute']]['available_date'] = $row['available_date']; $combinations[$row['id_product_attribute']]['date_formatted'] = Tools::displayDate($row['available_date']); } else { $combinations[$row['id_product_attribute']]['available_date'] = $combinations[$row['id_product_attribute']]['date_formatted'] = ''; } if (!isset($combination_images[$row['id_product_attribute']][0]['id_image'])) { $combinations[$row['id_product_attribute']]['id_image'] = -1; } else { $combinations[$row['id_product_attribute']]['id_image'] = $id_image = (int)$combination_images[$row['id_product_attribute']][0]['id_image']; if ($row['default_on']) { if (isset($this->context->smarty->tpl_vars['cover']->value)) { $current_cover = $this->context->smarty->tpl_vars['cover']->value; } if (is_array($combination_images[$row['id_product_attribute']])) { foreach ($combination_images[$row['id_product_attribute']] as $tmp) { if ($tmp['id_image'] == $current_cover['id_image']) { $combinations[$row['id_product_attribute']]['id_image'] = $id_image = (int)$tmp['id_image']; break; } } } if ($id_image > 0) { if (isset($this->context->smarty->tpl_vars['images']->value)) { $product_images = $this->context->smarty->tpl_vars['images']->value; } if (isset($product_images) && is_array($product_images) && isset($product_images[$id_image])) { $product_images[$id_image]['cover'] = 1; $this->context->smarty->assign('mainImage', $product_images[$id_image]); if (count($product_images)) { $this->context->smarty->assign('images', $product_images); } } if (isset($this->context->smarty->tpl_vars['cover']->value)) { $cover = $this->context->smarty->tpl_vars['cover']->value; } if (isset($cover) && is_array($cover) && isset($product_images) && is_array($product_images)) { $product_images[$cover['id_image']]['cover'] = 0; if (isset($product_images[$id_image])) { $cover = $product_images[$id_image]; } $cover['id_image'] = (Configuration::get('PS_LEGACY_IMAGES') ? ($this->product->id.'-'.$id_image) : (int)$id_image); $cover['id_image_only'] = (int)$id_image; $this->context->smarty->assign('cover', $cover); } } } } } // wash attributes list (if some attributes are unavailables and if allowed to wash it) if (!$allow_oosp && Configuration::get('PS_DISP_UNAVAILABLE_ATTR') == 0) { foreach ($groups as &$group) { foreach ($group['attributes_quantity'] as $key => &$quantity) { if ($quantity <= 0) { unset($group['attributes'][$key]); } } } foreach ($colors as $key => $color) { if ($color['attributes_quantity'] <= 0) { unset($colors[$key]); } } } foreach ($combinations as $id_product_attribute => $comb) { $attribute_list = ''; foreach ($comb['attributes'] as $id_attribute) { $attribute_list .= '\''.(int)$id_attribute.'\','; } $attribute_list = rtrim($attribute_list, ','); $combinations[$id_product_attribute]['list'] = $attribute_list; } $this->context->smarty->assign(array( 'groups' => $groups, 'colors' => (count($colors)) ? $colors : false, 'combinations' => $combinations, 'combinationImages' => $combination_images, 'product' => $this->product, 'img_col_dir' => '/img/co/', 'priceDisplayPrecision' => _PS_PRICE_DISPLAY_PRECISION_, 'col_img_dir' => _PS_COL_IMG_DIR_, 'allow_oosp' => $allow_oosp, 'cartcombqty' => 1, )); $this->context->smarty->assign(array('PS_EASY_CART_AJAX' => Configuration::get('PS_EASY_CART_AJAX'), 'MC_MIN_QTY_TEXT_DISPLAY' => Configuration::get('MC_MIN_QTY_TEXT_DISPLAY'), 'MC_COMB_STOCK_IMG' => Configuration::get('MC_COMB_STOCK_IMG'), 'MC_VARIANT_CART_TEXT_DISPLAY' => Configuration::get('MC_VARIANT_CART_TEXT_DISPLAY'), 'MC_ADDED_TO_CART_BGCOLOR' => Configuration::get('MC_ADDED_TO_CART_BGCOLOR'), 'MC_PLUSMINUS_BGCOLOR' => Configuration::get('MC_PLUSMINUS_BGCOLOR'), 'MC_CART_ICON_BGCOLOR' => Configuration::get('MC_CART_ICON_BGCOLOR'), 'MC_HIDE_COMB_STOCK' => Configuration::get('MC_HIDE_COMB_STOCK'), 'MC_DISPLAY_LAST_STOCK' => Configuration::get('MC_DISPLAY_LAST_STOCK'), 'MC_HIDE_COMB_MIN' => Configuration::get('MC_HIDE_COMB_MIN'), 'MC_ADDED_TO_CART_TXTCOLOR' => Configuration::get('MC_ADDED_TO_CART_TXTCOLOR'), 'MC_ADD_VARIANT_TXTCOLOR' => Configuration::get('MC_ADD_VARIANT_TXTCOLOR'), 'MC_SELECTED_PROD_BOX_COLOR' => Configuration::get('MC_SELECTED_PROD_BOX_COLOR'), 'MC_PD_WIDTH' => Configuration::get('MC_PD_WIDTH'), 'MC_PD_IMG_WIDTH' => Configuration::get('MC_PD_IMG_WIDTH'), 'MC_PD_IMG_DISPLAY' => Configuration::get('MC_PD_IMG_DISPLAY'), 'MC_PD_COLUMN_GAP' => Configuration::get('MC_PD_COLUMN_GAP'), 'is_catalog' => (bool) Configuration::isCatalogMode(), 'priceDisplay' => Product::getTaxCalculationMethod((int) $this->context->cookie->id_customer), 'show_prices' => (bool) Configuration::showPrices())); //$this->smarty->assign('priceDisplay', Product::getTaxCalculationMethod((int)$this->context->cookie->id_customer)); if ((int)Configuration::get('PS_EASY_CART_AJAX')) { return $this->context->smarty->fetch('module:easycart/views/templates/front/combination.tpl'); } else { return $this->context->smarty->fetch('module:easycart/views/templates/front/combination_manual.tpl'); } } } }
💾 保存文件
← 返回文件管理器