====== Расчет веса товаров в корзине ======
Данное решение позволяет модифицировать расчет веса товаров в корзине при расчете стоимости доставки, решение учитывает установленный вес товаров, вес, заданный через свойство в группе и вес по умолчанию.
Установка решения.
- Добавляем следующий контроллер._Shop = $oShop;
$this->_setShopCarts();
$this->defaultWeight = 200; // Вес в граммах
}
public function getItemWeight(Shop_Cart_Model $oShopCart)
{
$oShopGroupPropertyList = Core_Entity::factory('Shop_Group_Property_List', $this->_Shop->id);
$oWeightProperty = $oShopGroupPropertyList->Properties->getByTagName('average_weight');
$itemWeight = (float) $oShopCart->Shop_Item->weight;
if (!$itemWeight && $oWeightProperty)
{
$oShopGroup = $oShopCart->Shop_Item->Shop_Group;
do
{
$aoWeightPropertyValues = $oWeightProperty->getValues($oShopGroup->id);
if (count($aoWeightPropertyValues))
{
$itemWeight = (float) $aoWeightPropertyValues[0]->value;
}
$oShopGroup = $oShopGroup->getParent();
}
while (!$itemWeight && ($oShopGroup && $oShopGroup->id));
}
if (!$itemWeight)
{
$itemWeight = $this->defaultWeight;
}
return $itemWeight;
}
public function getTotalWeight()
{
$totalWeight = 0;
foreach ($this->_ShopCarts as $oShopCart)
{
if ($oShopCart->Shop_Item->id && $oShopCart->postpone == 0)
{
$totalWeight += $this->getItemWeight($oShopCart) * $oShopCart->quantity;
}
}
return $totalWeight;
}
protected function _setShopCarts()
{
$this->_ShopCarts = Shop_Cart_Controller::instance()->getAll($this->_Shop);
}
}
- В ТДС корзины при расчете способов доставки после вызова ''$Shop_Delivery_Controller_Show->setUp'' добавляем следующий код:$oShopItemWeightController = new Shop_Item_Weight_Controller($oShop);
$oShopItemWeightController
->groupProperty('average_weight')
->defaultWeight(3000);
$Shop_Delivery_Controller_Show
->totalWeight(
$oShopItemWeightController->getTotalWeight()
);