web-dev-qa-db-ja.com

フォーム編集用の同等の表示モードはありますか?

多くのフィールドを持つコンテンツタイプがあります。エンドユーザーはこのタイプのコンテンツを作成する必要があるため、オプションの大部分を知らなくてもコンテンツアイテムを作成して編集できるように、簡略化したフォームを提供したいと思います。次に、複雑さに飛び込みたい人は、それらを公開する高度なフォームを持つことができます。

表示モードは、私がやろうとしていることのように見えたので、hook_entity_info_alterを使用してカスタム表示モードを作成し、node/add/my-content-typeが使用する表示モードを制御する方法を考え始めました。コードを掘り下げた後、ビューモードはnode_viewによって使用され、コンテンツアイテムの追加または編集には代わりにdrupal_get_formを使用することに気付きました。

フォームへのさまざまな「ビュー」に対してさまざまなフィールドタイプとグループ化構成を許可する「フォームモード」はありますか?

6
Peter Taylor

1-パネル/ページマネージャ

Panels とページマネージャ(- Chaos Tools の一部)を使用している場合は、node/addフォームを有効化/上書きして node_edit ページマネージャーハンドラーと個々のフィールドを表示するパネルレイアウトの作成。

特定のコンテンツタイプの作成にのみ反応するようにバリアントを設定し、必要に応じてフォームフィールドを配置するだけです。これにより、すべてのフォームフィールドを分割し、一般的なフォームペインを提供して、見逃したフィールドを追加できるようになります。

レタリオンの重要な注意礼儀

私がいつもページに一般的なフォームを置くという事実のために私が気づかなかったことは、すべてのフィールドを出力しない場合、「form apiはそれを「ユーザー」と解釈することですこれらのフィールドの内容を削除しました "、空の値を返します。これにより、既存のデータが失われる可能性があるため、注意してください。


2-単独フィールド/フィールドcontrib

フォームが権限ベースの場合は フィールド権限 を試すか、折りたたまれたフィールドセットやタブなどで フィールドグループ を使用して、権限ベースでない場合は最初にフィールドを非表示にすることもできます。

4
Chapabu

私はあなたのために働くことができると私が信じているいくつかのオプションがあります...

http://drupalize.me/videos/rearrange-node-edit-form

https://drupal.org/project/msnf

https://drupal.org/project/mforms

1
Bryan Casler

Flexiformモジュールはこの機能を提供します。 http://www.drupal.org/project/flexiform

1
user17454

https://www.drupal.org/project/form_mode_manager を使用して、コアD8に実装されたフォームモードを使用できます

0
woprrr

数ヶ月前にD8コアに「フォームモード」が追加されたと思います。

Coreでのフォーム編集の表示モードに直接相当するものはありません。

一般に、D7でフォームを変更するには、フォーム変更を使用します。

0
David Meister

現在のところ私には十分ですが、エンティティの参照などを適切に処理しない部分的な解決策は、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]);
    }
}
0
Peter Taylor