0

私はuc_addresses送信機能にフックしようとしていますが、非常に混乱するようになりました。これは Drupal 6 で実行されている Ubercart であることに注意してください。したがって、フックすることに興味があるuc_addresses.module内のコードを分離しました。

function uc_addresses_get_address_form_submit($form, &$form_state) {
  global $user;

  $address_user = $form['stored_values']['#value']['user'];
  $address = $form['stored_values']['#value']['address'];
  $view = $form['stored_values']['#value']['view'];

  if ($form_state['clicked_button']['#value'] == t('Delete address')) {
      cache_clear_all();
      $form_state['redirect'] =
    array('user/'. $address_user->uid .'/addresses/' . $address->aid . '/delete');
  }
  else {
    if (!$address) {
      $address = new stdClass();
      $address->uid = $address_user->uid;
    }

    $valid = TRUE;
    foreach (element_children($form_state['values']['panes']) as $pane_id) {
      $func = _address_pane_data($pane_id, 'callback');
      $isvalid = $func('process', $address, $form_state['values']['panes'][$pane_id]);
      if ($isvalid === FALSE) {
    $_SESSION['expanded_panes'][] = $key;
    $valid = FALSE;
      }
    }
    if ($view == 'edit') { // Update database
      _uc_addresses_db_update_address($address);
    }
    elseif ($view == 'new' || $view == 'add') { // Insert into datebase
      _uc_addresses_db_add_address($address);
    }
    $form_state['redirect'] = array('user/'. $address_user->uid .'/addresses');
  }
}

目標は、送信されたフォーム値の一部をデータベースにコピーすることです。値がテーブルに書き込まれた後にフックが発生することを確認する必要があるため、それ自体が問題になる可能性があります。だから私の質問は、このフォームが送信された後にフック関数を発生させたい場合、フック関数はどのように見えるべきですか?

4

1 に答える 1

0

愚かなことに、uc_addresses のドキュメントにフックに関するセクションがたくさんあることを知りませんでした。ドキュメントへのリンク。フォーム送信にフックしたいこの特定のケースでは、hook_uc_addresses_address_insert()andを使用することをお勧めしhook_uc_addresses_address_update()ます。

于 2012-12-13T16:27:29.940 に答える