hook_form_alter を使用してノードにフィールドを追加しましたが、問題なく表示されますが、もちろん、そのフィールドに入力されたデータも保存されるようにしたいと考えています。これが起こるために私は何をしなければなりませんか?
1 に答える
フォームを変更するときは、フォーム送信ハンドラもモジュールに追加する必要があります。そうすれば、フォームが送信されるときにモジュールが呼び出され、追加したフィールドの値を保存できます。
複数のボタンがある場合は、実行する必要がある特定のボタンに送信ハンドラーを追加することをお勧めします。たとえば、フォームに「保存」と「削除」という 2 つの送信ボタンがあるとします。送信ハンドラーを追加すると$form[#submit][] = "my module_form_submit";
、「削除」ボタンをクリックしても送信ハンドラーが呼び出されます。
フォーム ボタンで報告されているように、カスタム #submit および #validate ハンドラーを定義できます。
すべてのフォームは、ユーザーがデータを送信するときに実行される検証および送信ハンドラーのリストを含む「#validate」および「#submit」プロパティを持つことができます。以前は、フォームに複数の送信ボタンがあり、さまざまなアクション (レコードの更新と削除など) を開始する場合、受信した $form_values['op'] でクリックされたボタンの名前を確認してから、別のコードを実行する必要がありました。その値に基づいています。
必要に応じて、個々のフォーム ボタンに #validate および #submit プロパティを定義できるようになりました。
特定のボタンを使用してフォームを送信すると、デフォルトのフォームレベルのものではなく、その検証および送信ハンドラーが使用されます。ボタン レベルで何も指定されていない場合は、代わりにフォーム レベルのハンドラーが使用されます。
さらに、フォーム値の 'op' 要素は非推奨であり、レポートに依存するべきではありません。
上で説明したように、各ボタンには「#validate」および「#submit」機能を関連付けることができます。したがって、フォームを送信し、通常のハンドラー
$form_id_validate
と$form_id_submit
ハンドラーを呼び出すボタンが 1 つ必要です。別の検証または送信機能を呼び出す必要がある追加のボタンには、ボタン固有の機能が必要です。また、Drupal 5.x のフォームに複数のボタンがある場合にクリックされるボタンに対応するフォーム値の「op」要素は、もはや依存すべきではなく、存在しない可能性があることにも注意してください。