web-dev-qa-db-ja.com

コマース注文が更新されたときのフックは何ですか?

コマース注文が更新されたときにフック名を検索していますか?

実際、私は、コマース注文が変更されたときにいくつかの操作を実行する必要があるモジュールをプログラムしました。たとえば、オーダーステータスが変更されたとき、または選択したオーダーのラインアイテムが変更されたとき。

コマース注文が変更されたときのフック名は何ですか?

3
Mehrdad201

Commerceはそのための明示的なフックを提供していません( これらは注文に対して定義するフックです )。

コマースオーダーはエンティティであるため、次を使用する hook_entity_update() を探しています。

挿入時にエンティティに作用します。

4
Clive

commerce_order_status_update() のドキュメントには次のように書かれています:

更新中の注文ステータスに特化した明示的なルールイベントまたはフックはありませんが...

hook_commerce_order_presave() を使用することは可能です:

/**
 * Implements hook_commerce_order_presave().
 */
function my_module_commerce_order_presave($order) {
  if ($order->status != $order->original->status) {
    drupal_set_message("The order status changed from {$order->original->status} to {$order->status}");
  }
}

$orderオブジェクトがあり、そのステータスがデータベースに保存されているものから変更されている場合は、別の場所で使用するためのオプションのヘルパー関数を次に示します。

/**
 * Given an order object, this returns FALSE if the order status has not
 * changed. If it has changed, it returns an associative array with the
 * following keys: new_order_status, old_order_status
 */
function my_module_order_status_changed($order) {
  $result['new_order_status'] = $order->status;
  $result['old_order_status'] = db_select('commerce_order', 'co')
    ->fields('co', array('status'))
    ->condition('co.order_id', $order->order_id)
    ->execute()
    ->fetchField();
  if ($result['new_order_status'] == $result['old_order_status']) {
    return FALSE;
  }
  return $result;
}
5

試してみてください:hook_commerce_order_presave($ order);

保存する前に注文データを準備できます。

1
Seb