Для работы модуля доставки интернет-магазин должен быть зарегистрирован в системе eDost.
Зарегистрировать магазин в системе eDost
|
|
Предупреждение!!!
1. Чтобы рассчитывалась доставка, у каждого товара должен быть прописан его вес.
2. Чтобы в расчете доставки учитывались габариты посылки, у каждого товара должны быть прописаны его размеры (длина, ширина, высота).
3. Обязательно задайте компании, через которые будет производиться расчет доставки
(в личном кабинете eDost в настройках магазина).
|
|
|
Разделы:
|
|
Порядок подключения модуля
|
|
|
|
В личном кабинете eDost в настройках магазина скачайте архив с модулем
и загрузите его через админку магазина:
|
|
|
|
|
|
а) зайдите в настройки модуля eDost:
|
|
|
|
|
|
|
|
б) включите Модуль доставки eDost.ru :
|
|
|
|
|
в) отключите параметр "Требуется" для поля country и state :
|
|
|
|
|
|
Для корректной работы калькулятора доставки необходимо установить список местоположений, соответствующий стандарту системы eDost.
Отредактируйте на сервере магазина файл administrator/components/com_virtuemart/classes/ ps_userfield.php
Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить!
|
Автоматическое исправление:
|
Если у вас магазин версии VirtueMart_1.1.7 и в код магазина не вносилось никаких изменений,
тогда можно заменить файл на сервере магазина на исправленный из архива с модулем.
|
Ручное исправление:
|
Файл ps_userfield.php должен быть в кодировке UTF,
иначе в магазине вместо названий будут непонятные символы!
|
|
|
Вставьте в файл код, выделенный зеленым :
...
...
if( $startForm ) {
echo '<form action="'. $mm_action_url .basename($_SERVER['PHP_SELF']) .'" method="post" name="adminForm">';
}
echo '
<div style="width:90%;">';
if( !empty( $required_fields )) {
echo '<div style="padding:5px;text-align:center;"><strong>(* = '.$VM_LANG->_('CMN_REQUIRED').')</strong></div>';
}
$delimiter = 0;
/* ==================== edost НАЧАЛО */
echo '<script type="text/javascript" src="'.IMAGEURL.'ps_image/delivery_img/address.js"></script>';
/* ==================== edost КОНЕЦ */
foreach( $rowFields as $field) {
if( !isset( $default[$field->name] )) {
$default[$field->name] = $field->default;
}
...
...
...
echo '<fieldset>
<legend class="sectiontableheader">'.$field->title.'</legend>
';
$delimiter++;
continue;
}
/* ==================== edost НАЧАЛО */
if ($field->name == 'country' || $field->name == 'state') continue;
if ($field->name == 'city') {
$edost_city = $db->sf('city', true, false) ? $db->sf('city', true, false) : '';
$labelClass = stristr($missing, $field->name) ? ' class="formLabel missing"' : ' class="formLabel"';
$labelRequired = isset($required_fields[$field->name]) ? '<strong>* </strong>' : '';
echo "\n" . ' <div id="edost_country" style="display: none;">' . "\n";
echo ' <div id="edost_country_div"'.$labelClass.'>Страна'.$labelRequired.'</div>' . "\n";
echo ' <div class="formField">' . "\n";
echo ' <span id="edost_country_list"></span>' . "\n";
echo ' </div>' . "\n";
echo ' </div>' . "\n";
echo ' <div id="edost_region" style="display: none;">' . "\n";
echo ' <div id="edost_region_div"'.$labelClass.'>Регион'.$labelRequired.'</div>' . "\n";
echo ' <div class="formField">' . "\n";
echo ' <span id="edost_region_list"></span>' . "\n";
echo ' </div>' . "\n";
echo ' </div>' . "\n";
echo ' <div id="edost_city" style="display: none;">' . "\n";
echo ' <div id="edost_city_div"'.$labelClass.'>Город'.$labelRequired.'</div>' . "\n";
echo ' <div class="formField">' . "\n";
echo ' <span id="edost_city_list"></span>' . "\n";
echo ' <input type="hidden" id="city_field" name="city" value="'.$edost_city.'">' . "\n";
echo ' <input type="hidden" id="country_field" name="country" value="RUS">' . "\n";
echo ' </div>' . "\n";
echo ' </div>' . "\n";
echo '<br />
<br style="clear:both;" />';
continue;
}
/* ==================== edost КОНЕЦ */
echo '<div id="'.$field->name.'_div" class="formLabel';
if (stristr($missing,$field->name)) {
echo ' missing';
}
...
...
...
if( $field->description != '') {
echo vmToolTip( $field->description );
}
echo '<br /></div>
<br style="clear:both;" />';
}
if( $delimiter > 0) {
echo "</fieldset>\n";
}
echo '</div>';
/* ==================== edost НАЧАЛО */
echo'
<script type="text/javascript">
edost_CreateCountry("'.(isset($edost_city) ? $edost_city : '').'");
</script>
';
/* ==================== edost КОНЕЦ */
if( VM_REGISTRATION_TYPE == 'OPTIONAL_REGISTRATION') {
echo '<script type="text/javascript">
//<![CDATA[
function showFields( show, fields ) {
...
...
...
echo '
<script language="javascript" type="text/javascript">//<![CDATA[
function '.$functioname.'() {
var form = document.'.$formname.';
var r = new RegExp("[\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-]", "i");
var isvalid = true;
var required_fields = new Array(\''. $field_list.'\');
for (var i=0; i < required_fields.length; i++) {
formelement = eval( \'form.\' + required_fields[i] );
';
echo "
// ==================== edost НАЧАЛО
if (required_fields[i] == 'city') {
if (document.getElementById('city_field').value == '') var s = 'formLabel missing'; else var s = 'formLabel';
document.getElementById('edost_country_div').className = s;
document.getElementById('edost_region_div').className = s;
document.getElementById('edost_city_div').className = s;
continue;
}
// ==================== edost КОНЕЦ
if( !formelement ) {
formelement = document.getElementById( required_fields[i]+'_field0' );
var loopIds = true;
}
...
...
|
|
|
|
|
|
|
Вес и габариты задаются в параметрах товара - закладка Габариты и вес :
|
|
|
|
Вес необходимо указывать в кг.
Габариты можно указывать в метрах, дециметрах, сантиметрах или миллиметрах.
|
|
Чтобы габариты учитывались в расчетах, необходимо
в личном кабинете eDost в настройках магазина
в поле Габариты (длина, ширина, высота) посылки:
выбрать единицу измерения габаритов ( метры , дециметры ,
сантиметры , миллиметры )
и поставить галочку в Учитывать в расчетах габариты посылки .
|
|
|
|
|
Изменить базовые названия тарифов на любые другие можно на сервере магазина в файле модуля:
administrator/components/com_virtuemart/classes/shipping/ edost.php
|
Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить.
...
...
define("EDOST_PAGE", 'edost_calc_kln.php');
define("EDOST_ADR", 'http://www.edost.ru/edost_calc_kln.php');
class edost {
//Названия компании и тарифа БЕЗ СТРАХОВКИ (если не задано, то берется с сервера edost.ru)
var $ntarif = array(
|
1 => array(' новое название компании ', ' новое название тарифа '), //Почта России (отправление 1-го класса)
2 => array('',''), //Почта России (наземная посылка)
3 => array('',''), //EMS Почта России
...
...
...
|
);
//Названия компании и тарифа СО СТРАХОВКОЙ (если не задано, то берется с сервера edost.ru)
var $ntarif_s = array(
|
1 => array(' новое название компании ', ' новое название тарифа '), //Почта России (отправление 1-го класса)
2 => array('',''), //Почта России (наземная посылка)
3 => array('',''), //EMS Почта России
...
...
...
|
);
function list_rates( &$d ) {
global $weight_total, $total, $CURRENCY_DISPLAY, $vmLogger;
...
...
|
|
|
|
|
|
|
Наложенный платеж - это способ оплаты за заказ наличными в момент вручения (например, оплата в почтовом отделении при получении посылки,
или оплата при самовывозе со склада магазина).
|
|
Для работы системы наложенного платежа, необходимо задать параметры в настройках наложенного платежа
в личном кабинете eDost в настройках магазина (внизу страницы).
|
|
|
а) включите модуль Наложенный платеж (код EDOSTCD):
|
|
|
|
|
б) чтобы при выборе способа оплаты Наложенный платеж покупатель сразу видел все сопутствующие наценки,
необходимо внести изменения на сервере магазина в файле:
administrator/components/com_virtuemart/classes/ ps_payment_method.php
Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить!
|
|
Автоматическое исправление:
|
|
Если у вас магазин версии VirtueMart_1.1.5-COMPLETE_PACKAGE.j15 и в код магазина не вносилось никаких изменений,
тогда можно заменить файл на сервере магазина на исправленный из архива с модулем.
|
|
Ручное исправление ( зеленый - вставить,
красный - удалить):
...
...
$db->next_record();
$default_shopper_group_id = $db->f("shopper_group_id");
$q = "SELECT payment_method_id,payment_method_discount, payment_method_discount_is_percent, payment_method_name from #__{vm}_payment_method WHERE ";
//==================== edost НАЧАЛО
$q = "SELECT payment_method_code, payment_method_id,payment_method_discount, payment_method_discount_is_percent, payment_method_name from #__{vm}_payment_method WHERE ";
//==================== edost КОНЕЦ
$q .= "(enable_processor='$selector') AND ";
$q .= "payment_enabled='Y' AND ";
$q .= "vendor_id='$ps_vendor_id' AND ";
if ($auth["shopper_group_id"] == $default_shopper_group_id) {
$q .= "shopper_group_id='$default_shopper_group_id' ";
} else {
$q .= "(shopper_group_id='$default_shopper_group_id' ";
$q .= "OR shopper_group_id='".$auth["shopper_group_id"]."') ";
}
$q .= "ORDER BY list_order";
$db->query($q);
$has_result = false;
// Start radio list
while ($db->next_record()) {
//==================== edost НАЧАЛО
//извлекаем стоимость доставки
$is_arr = explode("|",urldecode($GLOBALS['vars']['shipping_rate_id']));
$tariff_id = 0;
if ( isset($is_arr[4]) ) $tariff_id = intval($is_arr[4]);
$cur_id_shipping = ( isset($is_arr[0]) )? $is_arr[0]:''; //standard_shipping
$pricecash = -1;
$transfer = 0;
$cur_pickpoint = false;
$cur_edost_courier = false;
$edost_pay = ($db->f("payment_method_code") == 'EDOSTCD') ? true : false;
if ( $cur_id_shipping == 'edost' ) {
if ( isset($_SESSION['edost_calc']['pricecash'.$tariff_id]) ) $pricecash = $_SESSION['edost_calc']['pricecash'.$tariff_id];
if ( isset($_SESSION['edost_calc']['transfer'.$tariff_id]) ) $transfer = $_SESSION['edost_calc']['transfer'.$tariff_id];
if ( isset($_SESSION['edost_calc']['id'.$tariff_id]) ) {
$edost_id = $_SESSION['edost_calc']['id'.$tariff_id];
$cur_edost_courier = ( ($edost_id >= 31) and ($edost_id <= 35) and $edost_pay ) ? true : false;
$cur_pickpoint = ( ($edost_id == 29) and $edost_pay ) ? true : false;
}
}
//не показываем Наложенный платеж, т.к. эта компания не работает с наложкой
if ( $edost_pay and ($pricecash < 0) ) continue;
if ($pricecash > 0) $shipping_price = $pricecash - $is_arr[3];
else $shipping_price = 0;
//==================== edost КОНЕЦ
$has_result = true;
echo "<input type=\"radio\" name=\"payment_method_id\" id=\"".$db->f("payment_method_name")."\" value=\"".$db->f("payment_method_id")."\" ";
if( $selector == "' OR enable_processor='Y" ) {
echo "onchange=\"javascript: changeCreditCardList();\" ";
}
if ((($db->f("payment_method_id") == $payment_method_id) || $db->num_rows() < 2) && !@$GLOBALS['payment_selected']) {
echo "checked=\"checked\" />\n";
$GLOBALS['payment_selected'] = true;
}
else
echo "/>\n";
$discount = $ps_checkout->get_payment_discount( $db->f("payment_method_id") );
// ==================== УДАЛИТЬ НАЧАЛО
echo "<label for=\"".$db->f("payment_method_name")."\">".$db->f("payment_method_name");
// ==================== УДАЛИТЬ КОНЕЦ
//==================== edost НАЧАЛО
//если код оплаты Наложка от edost, то добавляем строки о сумме доплаты
echo "<label for=\"".$db->f("payment_method_name")."\">";
$str_edost_pay = $db->f("payment_method_name");
if ($cur_pickpoint) {
$edost_addrdelivery = '';
if ( !empty($_SESSION['pickpoint_id']) ) $edost_addrdelivery = trim($_SESSION['pickpoint_id']);
if ( substr($edost_addrdelivery,0,6) == 'Пос' )
$str_edost_pay = 'Оплата наличными или банковской картой при получении заказа в постамате';
else
$str_edost_pay = 'Оплата наличными при получении заказа в пункте выдачи';
}
if ( $cur_edost_courier ) {
$str_edost_pay = 'Оплата наличными при получении заказа';
}
echo $str_edost_pay;
if ($edost_pay) {
//показываем сумму которую клиенту необходимо оплатить на почте
//показываем сумму на которую увеличится доставка при выборе наложенного платежа
echo ($shipping_price == 0) ? '' : "<br /> Стоимость доставки увеличится на <b>".$CURRENCY_DISPLAY->getFullValue($shipping_price)."</b>";
if ( $transfer > 0 ) {
echo "<br /> <font color=\"#FF0000\">+ доплатить при получении за денежный перевод: <b>".$CURRENCY_DISPLAY->getFullValue($transfer)."</b></font>";
echo "<br /> Итого переплата за наложенный платеж: <b>".$CURRENCY_DISPLAY->getFullValue($transfer+$shipping_price)."</b>";
}
echo "<br />";
}
else
//==================== edost КОНЕЦ
if ($discount > 0.00) {
echo " (- ".$CURRENCY_DISPLAY->getFullValue(abs($discount)).") \n";
}
elseif ($discount < 0.00) {
echo " (+ ".$CURRENCY_DISPLAY->getFullValue(abs($discount)).") \n";
}
echo "</label>";
...
...
|
|
|
|
|
|
в) по умолчанию в магазине наценка за наложенный платеж называется Плата - изменить это
название можно на сервере магазина в файле
administrator/components/com_virtuemart/languages/common/ russian.php
|
для этого необходимо найти в этом файле строку:
'PHPSHOP_FEE' => 'Плата',
и заменить ее на строку:
'PHPSHOP_FEE' => 'Доплата за доставку посылки наложенным платежом',
|
|
|
|
|
г) отображение модуля Наложенный платеж в заказе:
|

Стоимость доставки увеличится на - это наценка на доставку за наложенный платеж - в заказе отображается отдельной строкой и прибавляется к итоговой
стоимости заказа.
+ доплатить при получении за денежный перевод - это сумма, которую дополнительно оплачивает получатель службе
доставки в момент вручения за перевод денежных средств отправителю (помимо стоимости заказа).
Пример:
1. Цена товара: 1000 руб.
2. Цена доставки: 100 руб.
3. Наценка на доставку за наложенный платеж: 214.18 руб.
Итоговая стоимость заказа: 1314.18 руб.
Продавец:
1. Оплачивает доставку 314.18 руб. = 100 руб. (цена доставки) + 214.18 руб. (наценка на доставку за наложенный платеж)
2. Указывает в бланке сумму наложенного платежа равную стоимости заказа: 1314.18 руб.
Покупатель:
1. При получении посылки оплачивает 1556.5 руб. = 1314.18 руб. (стоимость заказа) + 242.32 руб. (службе доставки за услугу по переводу денежных средств).
В итоге покупателю обойдется заказ на 456.5 руб. дороже, по сравнению с покупкой без наложенного платежа.
|
|
|
|
|
|
|
PickPoint – это сеть постаматов и пунктов выдачи, в которых можно самостоятельно забирать и оплачивать товары, заказанные в интернет-магазинах.
Чтобы покупатели могли выбирать точку выдачи сразу при оформлении заказа, в магазине необходимо установить
виджет PickPoint
(виджет представляет собой карту с метками постаматов и пунктов выдачи).
а) включите виджет PickPoint в админке магазина в настройках модуля eDost (2-й пункт инструкции)
б) для работы виджета необходимо выполнить 6-й пункт инструкции
|
|
|
|
в) отредактируйте файл на сервере магазина:
components/com_virtuemart/themes/default/templates/checkout/ get_final_confirmation.tpl.php
|
Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить.
Автоматическое исправление:
|
|
Если у вас магазин версии VirtueMart_1.1.5-COMPLETE_PACKAGE.j15 и в код магазина не вносилось никаких изменений,
тогда можно заменить файл на сервере магазина на исправленный из архива с модулем.
|
|
Ручное исправление (вставьте в файл код, выделенный зеленым ):
|
|
...
...
$q = "SELECT * FROM #__{vm}_state WHERE country_id=".(int)$country_id." AND state_2_code='".$db->f("state")."'";
$dbs->query($q);
$state_name = $dbs->f("state_name");
//==================== edost НАЧАЛО (PickPoint)
$rate_details = explode( "|", $shipping_rate_id );
if ( !empty($_SESSION['pickpoint_id']) ) echo $_SESSION['pickpoint_id'];
else
//==================== edost КОНЕЦ (PickPoint)
echo vmFormatAddress( array('name' => $db->f("first_name")." ".$db->f("last_name"),
'address_1' => $db->f("address_1"),
...
...
|
|
|
|
|
|
г) отредактируйте файл на сервере магазина:
administrator/components/com_virtuemart/classes/ ps_checkout.php
|
Перед исправлением рекомендуется сделать бэкап этого файла, чтобы при необходимости можно было его восстановить.
Автоматическое исправление:
|
|
Если у вас магазин версии VirtueMart_1.1.5-COMPLETE_PACKAGE.j15 и в код магазина не вносилось никаких изменений,
тогда можно заменить файл на сервере магазина на исправленный из архива с модулем.
|
|
Ручное исправление (вставьте в файл код, выделенный зеленым ):
|
|
...
...
case 'CHECK_OUT_GET_SHIPPING_ADDR' :
// The User has choosen a Shipping address
if (empty($d["ship_to_info_id"])) {
$vmLogger->err( $VM_LANG->_('PHPSHOP_CHECKOUT_ERR_NO_SHIPTO',false) );
unset( $_POST['checkout_this_step']);
return False;
}
break;
case 'CHECK_OUT_GET_SHIPPING_METHOD':
// The User has choosen a Shipping method
//==================== edost НАЧАЛО (PickPoint)
$_SESSION['pickpoint_id'] = $_REQUEST['pickpoint_id'];
//==================== edost КОНЕЦ (PickPoint)
if (!$this->validate_shipping_method($d)) {
unset( $_POST['checkout_this_step']);
return false;
}
...
...
...
// Get the IP Address
if (!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
else {
$ip = 'unknown';
}
//==================== edost НАЧАЛО (PickPoint)
if (!empty($_SESSION['pickpoint_id']))
$_POST['customer_note'] .= $_SESSION['pickpoint_id'];
//==================== edost КОНЕЦ (PickPoint)
// Collect all fields and values to store them!
$fields = array(
'user_id' => $auth["user_id"],
'vendor_id' => $ps_vendor_id,
...
...
|
|
|
|
|
|
|
Изменить список стран можно в скрипте генерации адреса доставки:
components/com_virtuemart/shop_image/ps_image/delivery_img/ address.js
|
// var edost_country = new Array("Россия"); // доставка только по России
// var edost_country = new Array("Россия", "Беларусь", "Казахстан", "Украина");
var edost_country = new Array("Россия", "Австралия", "Австрия" ... "Ямайка", "Япония");
// весь список
var edost_region = new Array(["Москва", 0], ["Санкт-Петербург", 0], ["Центральный округ", -1], ...
...
...
|
|
|
|
|