私のウェブサイト(D6)には「クイックお問い合わせフォーム」(ウェブフォームを使用)があり、ユーザーがウェブフォームの送信ボタンをクリックすると同時に新しいノードを作成する必要があります。
ユーザーが送信ボタンをクリックしたときに、Webフォームから値を取得し、ノードに値を挿入するにはどうすればよいですか。
これを行う方法を教えてください!
これは、カスタムモジュールを作成することで実現できます。モジュールには2つの機能があります。
モジュールを作成する前に、コアノードモジュールとCCKを使用して、Webフォームと同じフィールドをすべて含むコンテンツタイプを作成する必要があります。
以下の例では、モジュールの名前を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;
}
}
これは、ノードを作成する主な機能です。
<?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のドキュメントを参照してください。