web-dev-qa-db-ja.com

ノード作成フォームをビュー内に埋め込むにはどうすればよいですか

いくつかのフィールドといくつかのリンク項目を持つビューがあります。

リンク項目をクリックすると、リンクに関連付けられたノード作成フォームがビュー内に表示されます(AJAX方法))。

私が考えることができる解決策は、ビュー内にフォームを埋め込むことですが、それを行う方法がわかりませんか?

これを実装する最良の方法は何ですか?

7
kmdhrm

これがあなたを助けることを願って、

Drupal 7では、次の手順で達成できます

  • ノード作成フォームをVIEW内に埋め込むことができます

    • VIEWヘッダーまたは新しいVIEWを作成してVIEW
  • この例では、Views Headerの中に埋め込みます。 Views Header内に埋め込むのがより良いオプションになります。クリックしてビューヘッダーを追加

    enter image description here

  • グローバルを選択:テキスト領域

    enter image description here

  • PHPコードを追加し、テキスト形式をPHPに変更することを忘れないでください)

    enter image description here

  • PHPコード

    
    <?php 
        module_load_include('inc', 'node', 'node.pages');
        $node_form = node_add('node_type');
        print drupal_render($node_form);
    ?>
    

注意 :

  • PHPコード内のnode_type)を置き換えることを忘れないでください。

  • ノードフォームのリダイレクトには、hook_form_alterを使用します。ノードの作成後、フォームはノードの詳細ページにリダイレクトされます。ページにリダイレクトする場合は、$form_state['redirect'] = 'mycustompage';reference を使用します

  • admin/modulesを使用してPHP Filterモジュールを有効にする

enter image description here

  • このモジュールのPermissionsを設定するには、Execute PHP次のようにコード

enter image description here

より良い解決策がある場合は、それを共有してください。

5
inizio

これについては インラインエンティティフォーム をご覧ください。 Commerce Kickstartは、これを製品と製品バリエーションを管理するためのレシピの一部として採用しています。今思い出すことができるよりももっとたくさんあると確信していますが、これが有望であると思われる場合、私は戻ってこの回答を改善します(または、おそらく他の人がこの回答の改善に役立つでしょう)。

潜在的な代替(または補完的な?)モジュールは Entity Views Attach になる可能性があり、これはコマースキックスタートでも採用されていると思います。

1
emjayess

カスタムコードを試して満足している場合は、StackOverflowで同様の質問が行われ、ビュー内にフォームを埋め込むためのかなり広範なソリューションがいくつかありました。あなたがしなければならないのは、あなたのタイプに固有のノード作成フォームのform_idを使用し、サイト内に投稿されたソリューションの1つ here 内に配置することだけです。

1
KyleM

Inizioが投稿したViews Headersソリューションにコメントすることはできません。評判が足りません。

Rules を使用して送信後にフォームのリダイレクトを解決できることを投稿したいと思います。カスタムモジュールthe hook_form_alterを作成する必要はありません。

  • ノードタイプの「新しいコンテンツを保存した後」にトリガーされるルールを作成する
  • 条件を追加し、データを比較して、セレクター[site:current-page:path]がビューパスと等しいことを比較します
  • アクションページのリダイレクトをビューパスに追加する

Form Block とAdvanced Form Blockモジュールも便利かもしれませんが、PHPコードをビューヘッダーに配置すると、追加のモジュールをインストールできなくなります

そして、終わりました!

0
ferriol