Drupal/Ubercart Проверьте, есть ли определенный товар в корзине при оформлении заказа


У меня есть один определенный товар, который при определенных обстоятельствах должен быть в корзине. Я просматривал документацию по api Ubercart и не вижу никаких зацепок, которые были бы очевидным местом, чтобы увидеть, существует ли определенный товар до оформления заказа.

Я мог бы использовать крючок hook_add_to_cart для добавления специального товара всякий раз, когда добавляется первый товар, но я обеспокоен тем, что посетитель может удалить товар, а затем завершить покупку без необходимого товара.

Любой предложения, как убедиться, что специальный товар находится в корзине при оформлении заказа?

Author: Icode4food, 2010-09-23

3 answers

Вы можете создать модуль и запустить что-то вроде:

function mymodule_init() {
   if (preg_match('/checkout/', request_uri()) {
      $items = uc_cart_get_contents();
      foreach ($items as $item) {
         // code
      }
   }
}

, который откроется на странице оформления заказа и загрузит содержимое корзины. Каждый раз, когда они попадают на страницу оформления заказа, uc_cart_get_contents() возвращает содержимое корзины.

Http://www.ubercart.org/docs/api/uc_cart_get_contents

Возможно, есть лучшие способы сделать то, что вы хотите, например, использовать условное действие, чтобы предотвратить оформление заказа, если товар B находится в корзине, а товара A нет. Вы также можете посмотреть в продуктовых наборах, но у меня нет большого опыта в этом.

 2
Author: Kevin, 2010-09-23 20:40:52

Из того, что вы сказали, похоже, что модуль набора продуктов может быть очень полезен для изучения как способ обеспечения того, чтобы любые товары, связанные с основным продуктом, хранились в корзине.

Набор продуктов входит в состав ubercart, и вы найдете его на странице модулей в разделе "Ubercart - дополнительно". Если это не годится, тогда мы можем подумать об использовании API:)

 2
Author: hookd, 2010-09-23 20:08:54

Старый вопрос, но я нашел отличное решение.

Функция Hook_uc_cart_item_delete() функционирует специально для определенных объектов, когда они удаляются. Вы можете просто установить этот крючок в своем модуле, проверить, не удаляется ли конкретный объект, зависящий от другого элемента, а затем использовать uc_cart_remove_item() для элемента, который вы хотите удалить.

 2
Author: Patrick Burch, 2013-07-31 06:53:47