drupal 6.xにてカスタムフォームAPIを作成しています。
そこでhook_elementsの#submitで指定したfunctionがコールされないという問題が発生しており、解決策をご教授ください
hook_elementsにて以下のようにカスタムフォームを定義しています。
<?php
function hoge_elements() {
$type['hoge_upload'] = array(
'#input' => TRUE,
'#process' => array('hoge_process'),
'#pre_render' => array('hoge_pre_render'),
'#element_validate' => array('hoge_validate'),
'#submit' => array('hoge_submit'),
'#executes_submit_callback' => TRUE,
);
return $type;
}
?>このコードを実行した場合、#process, #pre_render, #element_validateで指定したfunctionは実行されますが、#submitのみが実行されません。
実現したい動作は、カスタムノードのhook_form内にこのエレメントを配置して、ノードの「保存」ボタン押下時hook_insert(update)が実行される前に#submitで指定したfunction内でdbにinsert(update)処理を行いたいと思っています。
http://api.drupal.org/api/function/hook_elements/6
ここを読む限り、上記のコードで問題ないようなのですが、何かほかに記述する必要があるのでしょうか。
form.incを見てみたところ、1044行目に以下のコードがあります。
<?php
if (isset($form['#submit'])) {
$form_state['submit_handlers'] = $form['#submit'];
}
?>カスタムノードを作成して、hook_form内にこのエレメントを配置した場合、
上記のコードによって、submit_handlersが 'node_form_submit' に上書きされてしまいます。
また、form.inc 1035行目で_form_button_was_clicked()でクリックされたボタンの判定を行っているので
ノードの「保存」ボタン押下時にエレメントの#submitで指定したfunctionを実行することはできないのでしょうか。
なにか解決策をご存じでしたら、教えてください。
よろしくお願いします。
Comments
hook_form_alter()で、$formのトップレ
hook_form_alter()で、$formのトップレベルの#submitにコールバックファンクション名の配列を与えてみてはどうでしょう。