D7コアによる新しいコンテンツタイプの作成は、直感的で高速で見栄えが良いです。 dbテーブルと単純な検証について心配する必要はありません。ウィジェットやディスプレイなどがあります。実際にフォーム(company_node_form)を作成しています。
例:
カスタムコンテンツタイプ:会社
フィールドグループ:会社の住所(垂直タブ)
フィールドグループ:会社の連絡先(垂直タブ)
フィールドグループ:プライバシー(垂直タブ)
質問
カスタムモジュール「my_module」を使用して代替を追加してAJAX動作追加または編集中コンテンツタイプを提供する方法、つまり「電話がある」場合にのみ「電話」フィールドを表示する方法チェックされているか、テキストが表示されます "申し訳ありませんが、選択した国の企業を追加する権限がありません。
感嘆符
上記のフォームはmy_module内でコーディングするのが非常に簡単であることを知っていますが、コーディングの代わりにコアノードコンストラクターを使用してそのフォームを構築したいと考えています。
この機能をノードフォームに追加するには、条件付きフィールドモジュール- http://drupal.org/project/conditional_fields を使用します。前のフィールドの入力がいくつかの基準を満たす場合にのみ特定のフィールドが表示されるようにするには、フィールドの依存関係を作成する必要があります。
フォームの変更をトリガーする要素に '#ajax'配列を追加するには、モジュールに hook_form_alter() を実装する必要があります。 #ajax要素には、置換するフォームの部分のHTML IDを指定する「wrapper」および「callback」要素と、置換されるフォームの部分を返すモジュール内の関数が含まれます。
たとえば、要素「my-element」を置き換える必要がある場合は、
'#prefix' => '<div id="my-element-id">',
'#suffix' => '</div>'
キー 'my-element'を持つフォーム配列に。置換をトリガーする要素は、
'#ajax' => array(
'wrapper' => 'my-element-id',
'callback' => 'my_callback',
'method' => 'replace',
),
これがコールバック関数です:
function my_callback($form, &$form_state) {
return $form['my-element'];
}
Hook_form_alter()は、要素を非表示/表示し、$ form_state(ajaxコールバックが発生したときに読み取る)に応じてカスタムメッセージングを生成します。
@sel_spaceが言及したように、最初にフォームをビルドするときにhook_form_alterトリガーが1回。 #after_buildを使用して独自のコールバックを追加できると思います。
単純なAjax機能については、 #states
フォームAPI。
/**
* Implements hook_form_alter().
*/
function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'MYNODETYPE_node_form') {
$form['field_telephone_number']['#states'] = array(
'visible' => array(
':input[name="field_has_phone"]' => array('checked' => TRUE),
),
);
}
}