Авторизация



Лицензионный софт
Dr.Web сканер online
Donate
Yandex
 
Yandex
Введите сумму: 
 руб.
счёт 410011559727938
 
Сейчас на сайте
  • [Bot]
Сейчас на сайте:
  • 1 гость
  • 1 робот
Новые пользователи:
  • Barbarasfign
  • DennisMism
Всего пользователей: 117
Статистика
mod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_countermod_vvisit_counter
mod_vvisit_counterToday73
mod_vvisit_counterYesterday224
mod_vvisit_counterThis week297
mod_vvisit_counterLast week1402
mod_vvisit_counterThis month5342
mod_vvisit_counterLast month5908
mod_vvisit_counterAll days364443

Online (20 minutes ago): 2
Your IP: 54.225.39.142
,
Today: Сен 26, 2017
Алгоритм действий:

1. Добавить в базу данных таблицу для связки оплаты с доставкой

CREATE TABLE `#__vm_shipping_rate_payment_method_xref` (`shipping_rate_payment_method_id` INTEGER NOT NULL DEFAULT NULL AUTO_INCREMENT, `shipping_rate_id` INTEGER NOT NULL,`payment_method_id` INTEGER NOT NULL, PRIMARY KEY (`shipping_rate_payment_method_id`));

2. Правим шаблон вывода тарифа доставки для добавления вариантов оплаты

Для Virtuemart версии 1.1.3 примерно в строку 57 файла shipping.rate_form.php вставляем код:


_(‘PHPSHOP_ORDER_PRINT_PAYINFO_LBL’) .": ".$VM_LANG->_(‘PHPSHOP_MULTISELECT’) ?>
payment_method_multiple_list("shipping_rate_payment_method[]", $db->f("shipping_rate_id")); ?>


Метод $ps_shipping->payment_method_multiple_list мы опишем пожже.

3. Теперь нам нада поправить файл класа ps_payment_method

Для этого находим файл ps_payment_method.php и делаем следующее.

3.1 Правим function delete_record, исправляем тело метода на

global $db;
$ps_vendor_id = $_SESSION["ps_vendor_id"];
$q = ‘DELETE from #__{vm}_payment_method WHERE payment_method_id=’.(int)$record_id.’ AND ‘;
$q .= "\nvendor_id=’$ps_vendor_id’";
$db->query($q);
$db->query("DELETE FROM #__{vm}_shipping_rate_payment_method_xref WHERE payment_method_id=".$record_id);
return True;


3.2 Правим function list_method

Исправляем

$q = "SELECT * from #__{vm}_payment_method WHERE ";
$q .= "vendor_id=’$ps_vendor_id’ AND ";
$q .= "shopper_group_id=’$default_shopper_group_id’ ";
if ($ps_shopper_group->get_id() != $default_shopper_group_id)
$q .= "OR shopper_group_id=’".$ps_shopper_group->get_id()."’ ";
$q .= "ORDER BY list_order";
$db->query($q);


на

$shipping_rate_id = explode("|",urldecode($GLOBALS['vars']['shipping_rate_id']));
$shipping_rate_id = $shipping_rate_id[count($shipping_rate_id)-1];

$q = "SELECT DISTINCT pm.* from #__{vm}_payment_method as pm, #__{vm}_shipping_rate_payment_method_xref as srpm ";
$q .= " WHERE ";
$q .= " srpm.shipping_rate_id=".$shipping_rate_id;
$q .= " AND srpm.payment_method_id=pm.payment_method_id ";
$q .= " AND pm.vendor_id=’$ps_vendor_id’ ";
$q .= " AND pm.shopper_group_id=’$default_shopper_group_id’ ";
if ($ps_shopper_group->get_id() != $default_shopper_group_id)
$q .= "OR pm.shopper_group_id=’".$ps_shopper_group->get_id()."’ ";
$q .= "ORDER BY pm.list_order";
$db->query($q);



Правим function list_payment_radio

Заменяем

$q = "SELECT payment_method_id,payment_method_discount, payment_method_discount_is_percent, payment_method_name from #__{vm}_payment_method WHERE ";
$q .= "(enable_processor=’$selector’) AND ";
$q .= "payment_enabled=’Y’ AND ";
$q .= "vendor_id=’$ps_vendor_id’ AND ";


На

$shipping_rate_id = explode("|",urldecode($GLOBALS['vars']['shipping_rate_id']));
$shipping_rate_id = $shipping_rate_id[count($shipping_rate_id)-1];

$q = "SELECT DISTINCT pm.payment_method_id, payment_method_discount, payment_method_discount_is_percent, payment_method_name";
$q .= " FROM #__{vm}_payment_method as pm, #__{vm}_shipping_rate_payment_method_xref as srpm";
$q .= " WHERE ";
$q .= " (enable_processor=’$selector’) ";
$q .= " AND payment_enabled=’Y’ ";
$q .= " AND vendor_id=’$ps_vendor_id’ ";
$q .= " AND srpm.shipping_rate_id=".$shipping_rate_id;
$q .= " AND srpm.payment_method_id=pm.payment_method_id ";
$q .= " AND ";


Именно этот кусок кода дает возможность выводить только зависимые способы оплаты

4. Теперь примемся за класс доставки ps_shipping.php

Добавляем в него метод, который выводит список способов оплаты в административной части (редактирование тарифов доставки) и дает нам возможность сделать привязку из админ-панели.

function payment_method_multiple_list($select_name, $shipping_rate_id) {
global $VM_LANG;
$db = new ps_DB;
if(!empty($shipping_rate_id)){
$q = "SELECT pm.payment_method_id = srpm.payment_method_id as pm_selected, pm.* ";
$q .= "FROM #__{vm}_payment_method as pm, #__{vm}_shipping_rate_payment_method_xref as srpm ";
$q .= "WHERE srpm.shipping_rate_id=".$shipping_rate_id." AND pm.payment_method_id = srpm.payment_method_id ";
$q .= "UNION ";
$q .= "(SELECT 0 as pm_selected, pm.* ";
$q .= "FROM #__{vm}_payment_method as pm ";
$q .= "WHERE pm.payment_method_id not in (SELECT payment_method_id FROM #__{vm}_shipping_rate_payment_method_xref WHERE shipping_rate_id =".$shipping_rate_id.")) ";
$q .= "ORDER BY payment_method_name ASC, payment_method_id ASC ";
} else {
$q = "SELECT 0 as pm_selected, pm.* FROM #__{vm}_payment_method as pm";
}

еcho "\n";
$db->query($q);
while ($db->next_record()) {


еcho "\n";
}
еcho "\n";
return True;

}


И еще находим в файле ps_shipping.php в функции rate_update условие
if(!empty($d["shipping_rate_country"])) {
for($i=0;$i if ($d["shipping_rate_country"][$i] != "") {
$country_str .= $d["shipping_rate_country"][$i] . ";";
}
}
chop($country_str,";");
}


Сразу после условия вставляем

$db->query("DELETE FROM #__{vm}_shipping_rate_payment_method_xref WHERE shipping_rate_id=".$d["shipping_rate_id"]);
if(!empty($d["shipping_rate_payment_method"])) {
$values ="";
for($i=0;$i if($values != ""){
$values.=", ";
}
if ($d["shipping_rate_payment_method"][$i] != "") {
$values .= "(". $d["shipping_rate_id"].", ".$d["shipping_rate_payment_method"][$i] . ")";
}
}
$db->query("INSERT INTO #__{vm}_shipping_rate_payment_method_xref (shipping_rate_id, payment_method_id) VALUES ".$values);
}


Все, теперь заходим в админ-панель, тарифы доставки и производим связку так как надо нам.

 

Комментарии 

 
#1 kirlik 18.12.2013 12:02
Как я понимаю способ работать будет до ближайшего обновления? ((
Цитировать