Я использую Drupal 7 с Commerce, хотя это не имеет большого значения, я думаю.
Там есть крюк (функция) hook_entity_update()
это называется, когда сущность (моя корзина) обновляется.
Я хочу пересчитать мою доставку в этом хуке, проблема в том, что он снова сохраняет сущность после пересчета доставки, и поэтому он снова вызывает хук, и я застреваю в бесконечном цикле.
Что было бы лучшим способом решить что-то вроде этого?
Я думал об использовании простой переменной $ _SESSION, такой как $ _SESSION [‘update’], и установил ее в TRUE в начале ловушки, затем снова установил ее в FALSE в конце ловушки и запретил запуск функции с возврат в начале, если переменная установлена в true? Я не уверен, что это хорошее решение?
Использование переменной сеанса, потому что это форма, и функция, кажется, вызывается несколько раз при отправке.
Не уверен, что обычная переменная будет работать?
Одна проблема, с которой я уже столкнулся, заключается в том, что переменная каким-то образом не сбрасывается в конце функции, и поэтому функция больше не вызывается …
Использование переменной сессии, похоже, работает.
Глупая функция как-то вызывается как 7 раз при нажатии одной кнопки …
Добавил это в начале функции:
// Check if entity is a commerce_order
if ($type != 'commerce_order') {
return;
}
// Only apply if order is still in cart
if ($entity->status != 'cart') {
return;
}
if (isset($_SESSION['bab_checkout']['updating']) &&
$_SESSION['bab_checkout']['updating'] === true) {
return;
}
$_SESSION['bab_checkout']['updating'] = true;
И тогда это в конце функции:
// We're done updating
$_SESSION['bab_checkout']['updating'] = false;
Все еще удивляетесь, если нет лучшего решения?
Других решений пока нет …