Drupal/Ubercart Проверьте, есть ли определенный товар в корзине при оформлении заказа
У меня есть один определенный товар, который при определенных обстоятельствах должен быть в корзине. Я просматривал документацию по api Ubercart и не вижу никаких зацепок, которые были бы очевидным местом, чтобы увидеть, существует ли определенный товар до оформления заказа.
Я мог бы использовать крючок hook_add_to_cart для добавления специального товара всякий раз, когда добавляется первый товар, но я обеспокоен тем, что посетитель может удалить товар, а затем завершить покупку без необходимого товара.
Любой предложения, как убедиться, что специальный товар находится в корзине при оформлении заказа?
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 нет. Вы также можете посмотреть в продуктовых наборах, но у меня нет большого опыта в этом.
Из того, что вы сказали, похоже, что модуль набора продуктов может быть очень полезен для изучения как способ обеспечения того, чтобы любые товары, связанные с основным продуктом, хранились в корзине.
Набор продуктов входит в состав ubercart, и вы найдете его на странице модулей в разделе "Ubercart - дополнительно". Если это не годится, тогда мы можем подумать об использовании API:)
Старый вопрос, но я нашел отличное решение.
Функция Hook_uc_cart_item_delete() функционирует специально для определенных объектов, когда они удаляются. Вы можете просто установить этот крючок в своем модуле, проверить, не удаляется ли конкретный объект, зависящий от другого элемента, а затем использовать uc_cart_remove_item() для элемента, который вы хотите удалить.