Я через hook_form_alter добавляю в форму редактирования определенного типа материала свое поле для ввода, при этом оно по сути виртуальное, так как добавляется через $form['#after_build']
для этого чтобы перекинуть значение этого поля для preview и save мне надо назначить свой submit обработчик что я и делаю вызовом в form_alter метода
$form['buttons']['submit']['#submit'] = array_merge(array('jmenu_form_build_submit'), $form['buttons']['submit']['#submit']);
Все бы ничего, все замечательно, только вот Ubercart добавляет свою кнопку
при этом на то, что в форме кроме 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 обработчик, а так даже не знаю что делать.
Комментарии
Поставьте своему модулю вес к примеру 200 чтобы он вызывался после модуля uc_product и счастье к Вам вернется.
<?php
$form['#submit'] []= 'your_function';
?>
Спасибо, что откликнулись, применил способ от Vinogradov, так как пораскинув мозгами понял что мне в общем то не важен порядок вызова обработчиков, стандартный же обработчик не форму новую строит, а просто должен решить что делать, в моем случае я просто перекидываю данные из одного поля в другое не более.
Всем спасибо еще раз.