web-dev-qa-db-ja.com

Webフォームの送信でノードを作成する方法は?

Drupal 7を使用して、「Title」、「Text」、「Image」フィールドでコンテンツタイプ「NewArticle」を作成しました。ユーザーには「NewArticle」を作成する権限がありますが、 「NewArticle」を作成するために管理バーを表示する方法が好きではありません。

代わりに、 Webforms を使用したいと思います。私の目標は、コンテンツタイプ「NewArticle」とまったく同じフィールドを持つWebフォームを作成することです。ユーザーがフォームに入力して送信すると、送信された情報を使用して新しいノード「NewArticle」が作成されます。

これどうやってするの?これを可能にするモジュールはありますか?何も見つかりません...

6
Jeroen

Webformsモジュールを使用して新しいノードを作成する代わりに、ユーザーがMY-SITE/node/add/CONTENT-TYPEで直接ノードを作成できるようにすることをお勧めします。 Webフォームからデータをハッキングしようとすると、状況が不必要に複雑になるだけです。他のユーザーに対してツールバーを非表示にし、新しいコンテンツを追加する権限を付与します。最後に、テンプレートファイルを使用してノードフォームをニーズに合わせ、CSSでスタイルを設定します。

7
Jeroen

Webform Default Fields このモジュールを使用すると、同じWebformフィールドを持つノードの多くを簡単に作成できます。それは、返信フォーム、一種の品質フィードバック制御、またはあなたの心があなたに示唆するもので、求人が空いている場合に適用できます。

複数のWebフォーム対応コンテンツタイプを作成できるため、それぞれに異なるデフォルトフィールドをアタッチできます。

(or)

Webformレポート モジュールは、Webformの送信ごとに新しいノードを作成します。ビューを使用してデータを取得し、要件に合わせてカスタマイズできます。

このモジュールにより、ユーザーは、webformモジュールによって収集されたデータに基づいて、シンプルで動的なレポートを作成できます。レポート基準を含む新しいノードタイプが追加され、表示されるデータはWebフォームが送信されると自動的に更新されます。データは、レポート基準を変更せずに、閲覧者の好みに応じてソートできます。

3
Bala

これを可能にするモジュールはありますか?

はい、あります。これには Rules モジュールを使用できます。例として、このルール(ルールエクスポート形式)を検討してください。

{ "rules_create_a_node_from_webform_data" : {
    "LABEL" : "Create a node from webform data",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "webform_rules", "rules" ],
    "ON" : { "webform_rules_submit" : [] },
    "IF" : [
      { "webform_has_id" : {
          "form_id" : [ "form_id" ],
          "selected_webform" : { "value" : { "webform-client-form-191" : "webform-client-form-191" } }
        }
      }
    ],
    "DO" : [
      { "drupal_message" : { "message" : "The webform submitted contains these fields:\r\n\u003C\/ul\u003E\r\n\u003Cli\u003Ethe field labeled \u0022[data:demoform_title-title]\u0022 which has value \u0022[data:demoform_title-value-raw]\u0022.\u003C\/li\u003E\r\n\u003Cli\u003E the field labeled \u0022[data:demoform_text-title]\u0022 which has value \u0022[data:demoform_text-value-raw]\u0022.\u003C\/li\u003E\r\n\u003Cli\u003E the field labeled \u0022[data:demoform_number-title]\u0022 which has value \u0022[data:demoform_number-value-raw]\u0022.\u003C\/li\u003E\r\n\u003Cli\u003E the field labeled \u0022[data:demoform_option-title]\u0022 which has value \u0022[data:demoform_option-value-raw]\u0022.\u003C\/li\u003E\r\n\u003C\/ul\u003E" } },
      { "variable_add" : {
          "USING" : { "type" : "text", "value" : "[data:demoform_text-value-raw]" },
          "PROVIDE" : { "variable_added" : { "var_demoform_text" : "Form variable text" } }
        }
      },
      { "variable_add" : {
          "USING" : { "type" : "text", "value" : "[data:demoform_number-value-raw]" },
          "PROVIDE" : { "variable_added" : { "var_demoform_number_text" : "Form variable number text" } }
        }
      },
      { "data_convert" : {
          "USING" : { "type" : "integer", "value" : [ "var-demoform-number-text" ] },
          "PROVIDE" : { "conversion_result" : { "var_demoformvar_number" : "Form variable number" } }
        }
      },
      { "variable_add" : {
          "USING" : { "type" : "text", "value" : "[data:demoform_option-value-raw]" },
          "PROVIDE" : { "variable_added" : { "var_demoform_option" : " Form variable option" } }
        }
      },
      { "entity_create" : {
          "USING" : {
            "type" : "node",
            "param_type" : "article",
            "param_title" : "[data:demoform_title-value-raw]",
            "param_author" : [ "user" ]
          },
          "PROVIDE" : { "entity_created" : { "article_created" : "Created article" } }
        }
      },
      { "data_set" : {
          "data" : [ "article-created:body:value" ],
          "value" : [ "var-demoform-text" ]
        }
      },
      { "data_set" : {
          "data" : [ "article-created:field-free-format-nr" ],
          "value" : [ "var-demoformvar-number" ]
        }
      },
      { "data_set" : {
          "data" : [ "article-created:field-optionlist" ],
          "value" : [ "var-demoform-option" ]
        }
      },
      { "data_set" : { "data" : [ "article-created:comment" ], "value" : "0" } },
      { "entity_save" : { "data" : [ "article-created" ], "immediate" : "1" } },
      { "drupal_message" : { "message" : "A new article got created, with nid=[article-created:nid] and url=[article-created:url]" } }
    ]
  }
}

ルールと Webform に少し慣れている人は誰でも、送信されたWebフォームに含まれているデータにアクセスするのはしばしば困難であることを知っています。主な理由は、ルールアクションの作成時にそれらを選択するために使用できないためです。

ただし、それらを導入することにより、var-demoformvar-...変数(上記のルールのように)を使用すると、一般的なルールマジックを実行できます。このすべての詳細については、 私の回答 から " ルールを使用してWebフォームからノー​​ドを作成する方法? "を参照してください。

0
Pierre.Vriens

入会したばかりなのでコメントできませんでした。

しかし、Jeroenの回答に加えて、これは、送信を追跡して詳細なレポートを取得するまで、非常にうまく機能します。

しかし、この方法を使用したい場合は、 Advanced Form Block を提案することもできます。これにより、ノード追加フォームをブロックに挿入して、1つのページに挿入するだけで、必要がなくなります。ノード追加フォームに直接リンクし、サイトのすべてのスタイルを維持することもできます:)

誰かがこれを理解できる場合は、ステップアップしてください!

0
Alex Caputo

Migrate Node-to-Webform モジュールを使用して、ノードをWebform送信に移行することもできます。これについての引用は次のとおりです(モジュールのプロジェクトページから):

ノード(Drupal 6)をWebフォーム送信(Drupal 7)に移行します。例えばタイプ「article」のすべてのノードを取得し、ノードごとに1つの送信を作成して、Webフォームに入力します。

0
user30654