Появилась несколько иная задача, но похожая. Уверен, будет полезна форумчанам.
Идея переписать weight_countries на предмет включения\выключения способа доставки на производителя товара. Тем магазинам, кто торгует, например не со своего склада, а со склада производителей - реальный выход.
В плагине weight_countries уще существует привязка по категориям:
$cat_cond = true;
if($method->categories or $method->blocking_categories){
if($method->categories)$cat_cond = false;
if(!is_array($method->categories)) $method->categories = array($method->categories);
if(!is_array($method->blocking_categories)) $method->blocking_categories = array($method->blocking_categories);
foreach($cart->products as $product){
if(array_intersect($product->categories,$method->categories)){
$cat_cond = true;
}
if(array_intersect($product->categories,$method->blocking_categories)){
$cat_cond = false;
break;
}
}
}
Попытался сделать по образу и подобию:
//start manufacturer
$man_cond = true;
if($method->manufacturer or $method->blocking_manufacturer){
if($method->manufacturer)$man_cond = false;
if(!is_array($method->manufacturer)) $method->manufacturer = array($method->manufacturer);
if(!is_array($method->blocking_manufacturer)) $method->blocking_manufacturer = array($method->blocking_manufacturer);
foreach($cart->products as $product){
if(array_intersect($product->virtuemart_manufacturer_id,$method->manufacturer)){
$man_cond = true;
}
if(array_intersect($product->virtuemart_manufacturer_id,$method->blocking_manufacturer)){
$man_cond = false;
break;
}
}
}
//stop manufacturer
$allconditions = (int) $weight_cond + (int)$zip_cond + (int)$nbproducts_cond + (int)$orderamount_cond + (int)$country_cond + (int)$cat_cond + (int)$man_cond;
if($allconditions === 7){
//end hack
Ну и соответственно в XML плагина:
<field name="manufacturer" value_field="mf_name" type="manufacturer" multiple="true" size="10" default="" label="bla-bla"
description=""/>
<field name="blocking_manufacturer" value_field="mf_name" type="manufacturer" multiple="true" size="10" default="bla-bla" label="bla-bla"
description=""/>
Теперь, в таблицу БД #__virtuemart_shipmentmethods
записывает нужного нам производителя:
shipment_logos=""|show_on_pdetails="1"|categories=[
]|blocking_categories=""|manufacturer=[
"7"
]|blocking_manufacturer=[
""
]|countries=""
Осталось две беды:
1. В админке можно выбрать только одного производителя на данный вид доставки, а хочется поставить несколько, как и категории.
(решено чуть позже, не знаю правильно или нет: добавим multiple="multiple" в /fields/manufacturer.php)
и
2.:
Если в корзине 2 товара разных производителей, то получаем два вида доставки.
Можно ли сделать так, что на весь такой заказ выводился способ доставки с наибольшей стоимостью (shipment_cost=max)?
Заранее благодарен за совет.