[РЕШЕНО]Как запустить свой submit обработчик для кнопки save and continue в Ubercart

Главные вкладки

Аватар пользователя Xermit Xermit 22 августа 2010 в 23:00

Я через hook_form_alter добавляю в форму редактирования определенного типа материала свое поле для ввода, при этом оно по сути виртуальное, так как добавляется через $form['#after_build']

для этого чтобы перекинуть значение этого поля для preview и save мне надо назначить свой submit обработчик что я и делаю вызовом в form_alter метода

$form['buttons']['preview']['#submit'] = array_merge(array('jmenu_form_build_preview'), $form['buttons']['preview']['#submit']);
  $form['buttons']['submit']['#submit'] = array_merge(array('jmenu_form_build_submit'), $form['buttons']['submit']['#submit']);

Все бы ничего, все замечательно, только вот Ubercart добавляет свою кнопку

if (uc_product_is_product_form($form)) {
    $form['buttons']['save_continue'] = array(
      '#type' => 'submit',
      '#value' => t('Save and continue'),
      '#weight' => 7,
      '#submit' => array('node_form_submit', 'uc_product_save_continue_submit'),
    );
  }

при этом на то, что в форме кроме node_form_submit могут быть накинуты другие дополнительные обработчики им все равно.

В результате когда открывается на редактирование нода с товаром, то появляются три кнопки, save and continue, preview, delete

и естественно когда пользователь нажмет save and continue содержиоме моего временного поле исчезнет навсегда, так как не будет вызван прежде мой обработчик до node_form_submit

Вот хочу узнать, может я чего накосячил не так понял.

В документации много написано про то как надо создать свой модуль в нем функции module_submit(...) и будет вам счастье, только оно что-то не настает, учитывая что я не завожу свой тип материала, а просто дополняю своими полями ноду определенного типа, например.

Кроме этого, в моем модуле, функция alter у меня называется так:

jmenu_form_testgood_node_form_alter

,где jmenu название моего модуля form_alter это hook, testgood тип моего узла, который на самом деле ubercart_product+ мои cck поля

и почему-то срабатывает именно это название (jmenu_form_testgood_node_form_alter), а не jmenu_node_form_form_alter, так как id формы редактирования ноды в drupal = node-form мне совсем не понятно.

но это так,к слову

а вот как впендюрить свой обработчик пока не знаю, ну разве что кроме как отпатчить uc_product.module, так как на мой взгляд они не совсем корректно создали свою кнопку все таки.

и кнопки этой в $form массиве при вызове моего хука form_alter тоже не наблюдается почему-то, иначе бы я внедрил для кнопки save_continue свой submit обработчик, а так даже не знаю что делать.

Комментарии

Аватар пользователя glu2006 glu2006 23 августа 2010 в 7:30

Поставьте своему модулю вес к примеру 200 чтобы он вызывался после модуля uc_product и счастье к Вам вернется.

Аватар пользователя Xermit Xermit 25 августа 2010 в 22:46

Спасибо, что откликнулись, применил способ от Vinogradov, так как пораскинув мозгами понял что мне в общем то не важен порядок вызова обработчиков, стандартный же обработчик не форму новую строит, а просто должен решить что делать, в моем случае я просто перекидываю данные из одного поля в другое не более.
Всем спасибо еще раз.