Ubercart 3更新购物车中的商品数量

时间:2014-05-30 06:17:35

标签: php drupal-7 cart ubercart

使用Drupal 7 Ubercart 3(7.x-3.6)。

梗概:  我有一种产品类型(我们称之为“设计”),它附带了另外两种产品(“文字”和“装饰”)。一个“设计”可以有多种与之相关的“文字”或“点缀”,并且它们与“设计ID”分组。

问题: 当客户在购物车表单视图中更新“设计”的数量时,我还想更新任何关联的“文本”或“装饰”数量。 我已经使用了hook_uc_cart_item_update来实现这一点,它确实有效 - 但只是第一次你改变'design'的数量。在第一次更新后,对“设计”数量的任何后续更新仅更新“设计”数量。 我最终选择了匹配的产品,将它们放在一个阵列中,将它们从购物车中取出,然后用更新的“设计”产品中的数量将它们重新添加。

function hook_uc_cart_item_update($entity) { 
     // The Design nid
if ($entity->nid == 512) { 
    $dcID = $entity->data['attributes'][22];
    $itemQty = $entity->qty;
    settype($itemQty, "integer"); 
    $cartID = $entity->cart_id;
    $items = uc_cart_get_contents();
    $pArray = array();
    foreach ($items as $n => $item) {
            // The nids of text and embellishment
        if ($item->nid == 35 || $item->nid == 3) { 
                   // We have a matching design id
            if ($item->data['attributes']['22'] == $dcID) {     
                $p = array('nid' => $item->nid, 'qty' => $itemQty, 'data' => array('attributes' => $item->data['attributes']));
                array_push($pArray, $p); 
                uc_cart_remove_item($item->nid, $item->cart_id, $item->data); 
            }   
        }
    } 
    foreach ($pArray as $n => $item) {
      uc_cart_add_item($item['nid'], $item['qty'], $item['data'], $cartID, NULL, FALSE, FALSE);
    }
  }
}

我不明白为什么数值仅在第一次有效。 Devel显示传递的值是正确的。此外,如果有一种更简单的方法可以实现这一目标,我愿意接受建议。

0 个答案:

没有答案