Раз уж я взялся за модули почты, то и до WebAsyst ShopScript руки дошли. Давно хотел убрать из ее «родного» модуля выбор типа доставки — «Наземная» или «Авиа». Все равно почта все по-своему делает, зачем клиента путать? оставим наземную и все. Тем более, что тут на 5 минут занятие.
Изменения надо вносить в файл /published/SC/html/scripts/modules/shiiping/class.russianpost.php. Все изменения вносятся только в метод calculate_shipping_rate()
- Закомментарить все присвоения переменной $AirCost. Необязательно, но пусть будет для полноты картины.
- Закомментарить все действия с массивом $Rates
- После проверки на наличие товара с бесплатной доставкой в заказе убрать все дополнительные проверки и просто вернуть стоимость доставки.
Вот такой вот метод получился у меня в итоге:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
function calculate_shipping_rate($_Order, $_Address, $_ServID = 0){ $sql = ' SELECT zoneNumber FROM '.RUSSIANPOST_ZONES_TBL.' WHERE module_id="'.$this->ModuleConfigID.'" AND countryID="'.$_Address['countryID'].'" AND zoneID="'.$_Address['zoneID'].'" '; @list($ZoneNumber) = db_fetch_row(db_query($sql)); if(!isset($ZoneNumber) || !intval($ZoneNumber) || $ZoneNumber>5)return -1; $Weight = $this->_getOrderWeight($_Order); $Weight = $this->_convertMeasurement($Weight, CONF_WEIGHT_UNIT, 'KGS'); if($Weight>$this->_getSettingValue('CONF_RUSSIANPOST_MAX_WEIGHT'))return -1; $GroundCost = $this->_getSettingValue('CONF_RUSSIANPOST_HALFCOST_'.$ZoneNumber) + $this->_getSettingValue('CONF_RUSSIANPOST_OVERHALFCOST_'.$ZoneNumber)*ceil((($Weight<0.5?0.5:$Weight)-0.5)/0.5); // $AirCost = $GroundCost+$this->_getSettingValue('CONF_RUSSIANPOST_AIR'); if ( $Weight>$this->_getSettingValue('CONF_RUSSIANPOST_DIFFICULT_WEIGHT') || $this->_getSettingValue('CONF_RUSSIANPOST_CAUTION') ){ $GroundCost *= 1.3; // $AirCost *= 1.3; } $OrderAmount = $this->_convertCurrency($_Order['order_amount'], 0, $this->_getSettingValue('CONF_RUSSIANPOST_CURRENCY')); $GroundCost += $OrderAmount*($this->_getSettingValue('CONF_RUSSIANPOST_COMMISION')/100); /* $AirCost += $OrderAmount*($this->_getSettingValue('CONF_RUSSIANPOST_COMMISION')/100); $Rates = array(); $Rates[] = array( 'name' => 'Наземный транспорт', 'id' => 1, 'rate' => $this->_convertCurrency($GroundCost, $this->_getSettingValue('CONF_RUSSIANPOST_CURRENCY'), 0), ); $Rates[] = array( 'name' => '"Авиа"', 'id' => 2, 'rate' => $this->_convertCurrency($AirCost, $this->_getSettingValue('CONF_RUSSIANPOST_CURRENCY'), 0), ); */ $is_free_shipping = true; foreach ($_Order['orderContent']['cart_content'] as $product) { if (!$product['free_shipping']) { $is_free_shipping = false; break; } } if ($is_free_shipping) { return array(); } return $this->_convertCurrency($GroundCost, $this->_getSettingValue('CONF_RUSSIANPOST_CURRENCY'), 0); } |