多くのフィールドを持つコンテンツタイプがあります。エンドユーザーはこのタイプのコンテンツを作成する必要があるため、オプションの大部分を知らなくてもコンテンツアイテムを作成して編集できるように、簡略化したフォームを提供したいと思います。次に、複雑さに飛び込みたい人は、それらを公開する高度なフォームを持つことができます。
表示モードは、私がやろうとしていることのように見えたので、hook_entity_info_alter
を使用してカスタム表示モードを作成し、node/add/my-content-type
が使用する表示モードを制御する方法を考え始めました。コードを掘り下げた後、ビューモードはnode_view
によって使用され、コンテンツアイテムの追加または編集には代わりにdrupal_get_form
を使用することに気付きました。
フォームへのさまざまな「ビュー」に対してさまざまなフィールドタイプとグループ化構成を許可する「フォームモード」はありますか?
Panels とページマネージャ(- Chaos Tools の一部)を使用している場合は、node/add
フォームを有効化/上書きして node_edit ページマネージャーハンドラーと個々のフィールドを表示するパネルレイアウトの作成。
特定のコンテンツタイプの作成にのみ反応するようにバリアントを設定し、必要に応じてフォームフィールドを配置するだけです。これにより、すべてのフォームフィールドを分割し、一般的なフォームペインを提供して、見逃したフィールドを追加できるようになります。
レタリオンの重要な注意礼儀
私がいつもページに一般的なフォームを置くという事実のために私が気づかなかったことは、すべてのフィールドを出力しない場合、「form apiはそれを「ユーザー」と解釈することですこれらのフィールドの内容を削除しました "、空の値を返します。これにより、既存のデータが失われる可能性があるため、注意してください。
フォームが権限ベースの場合は フィールド権限 を試すか、折りたたまれたフィールドセットやタブなどで フィールドグループ を使用して、権限ベースでない場合は最初にフィールドを非表示にすることもできます。
私はあなたのために働くことができると私が信じているいくつかのオプションがあります...
http://drupalize.me/videos/rearrange-node-edit-form
Flexiformモジュールはこの機能を提供します。 http://www.drupal.org/project/flexiform
https://www.drupal.org/project/form_mode_manager を使用して、コアD8に実装されたフォームモードを使用できます
数ヶ月前にD8コアに「フォームモード」が追加されたと思います。
Coreでのフォーム編集の表示モードに直接相当するものはありません。
一般に、D7でフォームを変更するには、フォーム変更を使用します。
現在のところ私には十分ですが、エンティティの参照などを適切に処理しない部分的な解決策は、hook_form_alter
でビューモードの構成を "借用"することです。
function MODULE_form_FORM_ID_alter(&$form, &$form_state, $form_id) {
// Since this is specific to FORM_ID, I don't need to extract the entity type
// from the form / form_state
$type = 'the_entity_type';
$view_mode = custom_logic_here();
foreach (array_keys($form) as $key) {
$instance = field_read_instance('node', $key, $type);
if (isset($instance['display']) &&
isset($instance['display'][$view_mode]) &&
$instance['display'][$view_mode]['type'] === 'hidden') {
unset($form[$key]);
}
}