Редактироваться будут файлы:
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
Ниже представлены отредактированные файлы, а также принтскрины.
