4

私のウェブサイト(D6)には「クイックお問い合わせフォーム」(ウェブフォームを使用)があり、ユーザーがウェブフォームの送信ボタンをクリックすると同時に新しいノードを作成する必要があります。

ユーザーが送信ボタンをクリックしたときに、Webフォームから値を取得し、ノードに値を挿入するにはどうすればよいですか。

これを行う方法を教えてください!

4

2 に答える 2

4

これは、カスタムモジュールを作成することで実現できます。モジュールには2つの機能があります。

  1. HOOK_form_alter-既存のWebフォームに送信機能を追加します。
  2. カスタム関数-送信されたWebフォームから値を取得してノードを作成するカスタム関数(HOOK_form_alterから呼び出されます)。

モジュールを作成する前に、コアノードモジュールとCCKを使用して、Webフォームと同じフィールドをすべて含むコンテンツタイプを作成する必要があります。

HOOK_form_alter

以下の例では、モジュールの名前をMODULENAMEに、スイッチケースのXXXをWebフォームのIDに置き換えます。この関数は、MODULENAME_create_nodeをWebフォームの送信関数配列に追加します。以下でMODULENAME_create_nodeを定義します。

<?php
function MODULENAME_form_alter(&$form, $form_state, $form_id) {
  switch ($form_id) {

    case 'webform_client_form_XXX' :
    $first = array_shift($form['#submit']);
    array_unshift($form['#submit'], $first, 'MODULENAME_create_node');

    break;

  }
}

MODULENAME_create_node

これは、ノードを作成する主な機能です。

<?php
function MODULENAME_create_node() {
  // Load all of the data submitted via the webform into a keyed array ($data)
  $data = array();
  foreach ($form_state['values']['submitted_tree'] as $key => $value) {
    $data[$key] = $value;
  }

  // The node_save() function (called later in this function) call
  // node_access_check, which means that anonymous calls to this function will
  // not be successful. Top get around this, we load user1 while executing this
  // function, then restore the user back to the original state at the end of
  // the function.
  global $user;
  $original_user = $user;
  $user = user_load(1);

  // Initialize the new node with default stuff
  $node = new stdClass();
  $node->type = 'YOUR_CONTENT_TYPE';
  $node->created = time();
  $node->changed = $node->created;
  $node->status = 1;
  $node->promote = 0;
  $node->sticky = 0;
  $node->format = 1;
  $node->uid = $user->uid;

  // You'll need to customize this based on what you named your webform and CCK fields.
  // Remember that all of the webform data is available and stored in the $data array.
  $node->title = $data['title'];
  $node->field_myfield1[0]['value'] = $data['myfield1'];
  $node->field_myfield2[0]['value'] = $data['myfield2'];

  //Save the node
  node_save($node);

  //Set the user state back to the original
  $user = $original_user;

}

モジュールの情報ファイルも作成する必要があります。慣れていない場合は、情報ファイルの作成に関するDrupalのドキュメントを参照してください。

于 2013-01-02T16:12:50.207 に答える