カスタムフォームapiのsubmit時の挙動について

Events happening in the community are now at Drupal community events on www.drupal.org.
sauner's picture

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のトップレ

dokumori's picture

hook_form_alter()で、$formのトップレベルの#submitにコールバックファンクション名の配列を与えてみてはどうでしょう。