Редактироваться будут файлы:
administrator\components\com_virtuemart\html\shipping.rate_form.php
administrator\components\com_virtuemart\classes\ps_shipping.php
administrator\components\com_virtuemart\classes\shipping\standard_shipping.php
1. Редактируем административную часть
1.1 Добавляем новое поле в базу данных
ALTER TABLE `defis_vm_shipping_rate` ADD `shopper_group_id` INT NOT NULL ;
1.2 Добавляем выпадающий select с группой покупателей в тариф доставки, файл shipping.rate_form.php
<tr class="row1"> <td><div align="right"><strong>Группа покупателей: </strong><?php echo vmToolTip('Если выбрать группу покупателей Gold, то данный вариант доставки будет достпен только пользователям GOLD и тем, кто выше GOLD, например Wholesale'); ?></div></td> <td> <?php include_class('shopper'); $sg_id = $ps_shopper_group->get_shoppergroup_by_id($db->f("user_id")); echo ps_shopper_group::list_shopper_groups("shopper_group_id",$db->f("shopper_group_id"));?> </td> </tr>
1.3 Добавляем обработку данного поля в момент создания, редактирования тарифа доставки, файл ps_shipping.php (функции rate_add, rate_update)
function rate_add(&$d) { $db = new ps_DB; $timestamp = time(); if (!$this->validate_rate_add($d)) { return False; } $country_str = ""; if(!empty($d["shipping_rate_country"])) { for($i=0;$i<count($d["shipping_rate_country"]);$i++){ if ($d["shipping_rate_country"][$i] != "") { $country_str .= $d["shipping_rate_country"][$i] . ";"; } } chop($country_str,";"); } $fields = array('shipping_rate_name' => vmGet($d, 'shipping_rate_name'), 'shipping_rate_carrier_id' => (int)vmGet($d, 'shipping_rate_carrier_id'), 'shipping_rate_desc' => vmRequest::getVar('shipping_rate_desc', '', 'default', '', VMREQUEST_ALLOWHTML), 'shipping_rate_country' => $country_str, 'shipping_rate_zip_start' => vmGet($d, 'shipping_rate_zip_start'), 'shipping_rate_zip_end' => vmGet($d, 'shipping_rate_zip_end'), 'shipping_rate_weight_start' => vmGet($d, 'shipping_rate_weight_start'), 'shipping_rate_weight_end' => vmGet($d, 'shipping_rate_weight_end'), 'shipping_rate_value' => vmGet($d, 'shipping_rate_value'), 'shipping_rate_package_fee' => vmGet($d, 'shipping_rate_package_fee'), 'shipping_rate_currency_id' => vmGet($d, 'shipping_rate_currency_id'), 'shipping_rate_vat_id' => vmGet($d, 'shipping_rate_vat_id'), 'shipping_rate_list_order' => (int)vmGet($d, 'shipping_rate_list_order'), 'shopper_group_id' => (int)vmGet($d, 'shopper_group_id')); $db->buildQuery('INSERT', '#__{vm}_shipping_rate', $fields ); $db->query(); $_REQUEST['shipping_rate_id'] = $db->last_insert_id(); return True; } /************************************************************************** * name: rate_update() * created by: Ekkehard Domning * description: updates a rate entry * parameters: * returns: **************************************************************************/ function rate_update(&$d) { $db = new ps_DB; if( !$this->validate_rate_add($d)) return false; $country_str = ""; if(!empty($d["shipping_rate_country"])) { for($i=0;$i<count($d["shipping_rate_country"]);$i++){ if ($d["shipping_rate_country"][$i] != "") { $country_str .= $d["shipping_rate_country"][$i] . ";"; } } chop($country_str,";"); } $fields = array('shipping_rate_name' => vmGet($d, 'shipping_rate_name'), 'shipping_rate_carrier_id' => (int)vmGet($d, 'shipping_rate_carrier_id'), 'shipping_rate_desc' => vmRequest::getVar('shipping_rate_desc', '', 'default', '', VMREQUEST_ALLOWHTML), 'shipping_rate_country' => $country_str, 'shipping_rate_zip_start' => vmGet($d, 'shipping_rate_zip_start'), 'shipping_rate_zip_end' => vmGet($d, 'shipping_rate_zip_end'), 'shipping_rate_weight_start' => vmGet($d, 'shipping_rate_weight_start'), 'shipping_rate_weight_end' => vmGet($d, 'shipping_rate_weight_end'), 'shipping_rate_value' => vmGet($d, 'shipping_rate_value'), 'shipping_rate_package_fee' => vmGet($d, 'shipping_rate_package_fee'), 'shipping_rate_currency_id' => vmGet($d, 'shipping_rate_currency_id'), 'shipping_rate_vat_id' => vmGet($d, 'shipping_rate_vat_id'), 'shipping_rate_list_order' => (int)vmGet($d, 'shipping_rate_list_order'), 'shopper_group_id' => (int)vmGet($d, 'shopper_group_id')); $db->buildQuery('UPDATE', '#__{vm}_shipping_rate', $fields, ' WHERE shipping_rate_id=' .(int)$d["shipping_rate_id"] ); $db->query(); return True; }
2. Редактируем пользовательскую часть, файл standard_shipping.php
// THE ORDER OF THOSE VALUES IS IMPORTANT: // ShippingClassName|carrier_name|rate_name|totalshippingcosts|rate_id $shipping_rate_id = urlencode( __CLASS__ . "|" . $dbc->f( "shipping_carrier_name" ) . "|" . $dbr->f( "shipping_rate_name" ) . "|" . number_format( $total_shipping_handling, 2, '.', '' ) . "|" . $dbr->f( "shipping_rate_id" ) ) ; $_SESSION[$shipping_rate_id] = 1 ; if ($_SESSION['auth']['shopper_group_id'] >= $dbr->f( "shopper_group_id" )) { $html .= "<li> <input type=\"radio\" id=\"shipping_rate_id_ss_" . $dbr->f( "shipping_rate_id" ) . "\" name=\"shipping_rate_id\" value=\"" . $shipping_rate_id . "\" " ; if( ! $selected ) { $selected = True ; $html .= "checked=\"checked\"" ; } $html .= " />" ; $html .= "<label for=\"shipping_rate_id_ss_" . $dbr->f( "shipping_rate_id" ) . "\">" . $dbr->f( "shipping_rate_name" ) ; $html .= ' — <strong>'.$show_shipping_handling . '</strong></label>'; $html .= '<div class="vm-method-shipping-d">'.$dbr->f( "shipping_rate_desc" ).'</div>'; $html .= '</li>'."\n"; } //end add
Ниже представлены отредактированные файлы, а также принтскрины.