Предотвратить бесконечный цикл на функцию обновления, которая обновляет себя?

Я использую Drupal 7 с Commerce, хотя это не имеет большого значения, я думаю.

Там есть крюк (функция) hook_entity_update() это называется, когда сущность (моя корзина) обновляется.

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

Что было бы лучшим способом решить что-то вроде этого?

Я думал об использовании простой переменной $ _SESSION, такой как $ _SESSION [‘update’], и установил ее в TRUE в начале ловушки, затем снова установил ее в FALSE в конце ловушки и запретил запуск функции с возврат в начале, если переменная установлена ​​в true? Я не уверен, что это хорошее решение?

Использование переменной сеанса, потому что это форма, и функция, кажется, вызывается несколько раз при отправке.
Не уверен, что обычная переменная будет работать?

Одна проблема, с которой я уже столкнулся, заключается в том, что переменная каким-то образом не сбрасывается в конце функции, и поэтому функция больше не вызывается …

0

Решение

Использование переменной сессии, похоже, работает.
Глупая функция как-то вызывается как 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;

Все еще удивляетесь, если нет лучшего решения?

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector