私はDrupalに不慣れです。そして、簡単に見えることは明らかに忘却に抽象化されています。
調査フォームを表示するモジュールを作成しました。データを収集してデータベースに保存し、サイトの管理者が収集したデータを表示できるようにしたいと考えています。
これを行う「Drupal方法」とは何ですか?
前もって感謝します!
<?php
function member_survey_menu() {
$items['member_survey'] = array(
'title' => t('Member Survey'),
'page callback' => 'member_survey_form',
'access arguments' => array('access content'),
);
return $items;
}
function member_survey_form(){
$output = drupal_get_form('member_survey_my_form');
return $output;
}
function member_survey_my_form($form_state){
# the options to display in our form radio buttons
$options1 = array(
'Strongly Agree' => t('Strongly Agree'),
'Agree' => t('Agree'),
'Neutral' => t('Neutral'),
'Disagree' => t('Disagree'),
'Strongly Disagree' => t('Strongly Disagree'),
);
# the options to display in our form radio buttons
$options2 = array(
'Very Satisfied ' => t('Very Satisfied '),
'Satisfied' => t('Satisfied '),
'Neither Satisfied or Dissatisfied' => t('Neither Satisfied or Dissatisfied'),
'Dissatisfied ' => t('Dissatisfied '),
'Very Dissatisfied ' => t('Very Dissatisfied '),
);
$form['knowledgable'] = array(
'#type' => 'radios',
'#title' => t('Question 1'),
'#options' => $options1,
//'#default_value' => $options['Neutral'],
);
$form['satisfied'] = array(
'#type' => 'radios',
'#title' => t('Question 4'),
'#options' => $options2,
//'#default_value' => $options['Neutral'],
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
return $form;
}
// Validate the form submission
function member_survey_my_form_validate($form, &$form_state){
if(empty($form_state['values']['knowledgable']) ||
empty($form_state['values']['satisfied'])
){
form_set_error('knowledgable',t('Please respond to all questions, thank you!'));
}
}
?>
必要なのは、フォーム送信ハンドラーです。これは、フォームが送信されるときに呼び出される関数です。デフォルトでは、Drupalは、フォームビルドハンドラーにちなんだ名前に "_submit"が追加された関数を使用します。この場合、その関数はmember_survey_my_form_submit()
であり、 member_survey_my_form_validate()
に渡される同じパラメーター。
データの保存に関しては、最初に、データの保存に使用するデータベーステーブルの構造を決定する必要があります。特に、使用する主キーを決定する必要があります。
フォームが調査用であることを考慮し、各ユーザーが調査のみを送信できるとすると、ユーザーIDを主キーとして使用します。データベーステーブルは、次のような構造になります。
コードについては、ユーザーがアンケートを編集することは許可されていないと想定しています。そのユーザーIDのデータがすでにある場合、コードはデータの保存を回避します。
function member_survey_my_form_submit($form, &$form_state) {
$values = $form_state['values'];
$values['uid'] = $GLOBALS['user']->uid;
if (!db_result(db_query("SELECT 1 FROM {survey} WHERE uid = %d", array($values['uid'])))) {
// There isn't a database row for that user.
drupal_write_record('survey', $values);
}
}
「survey」をデータベーステーブル名に置き換えます。
具体的な答え:sumbit hook
データを保存します。フォームの提出を参照してください: http://drupal.org/node/751826
一般的な回答:データの作成、テーマ設定、検証、送信、保存、およびDrupal 6つのフォーム:フォームAPIクイックスタートガイド http://drupal.org/node/751826
データを取得するには、次のガイダンスを使用できます。
db_queryドキュメンテーション http://api.drupal.org/api/drupal/includes--database.pgsql.inc/function/db_query/6
データベース抽象化層 http://api.drupal.org/api/drupal/includes--database.inc/group/database/6
また、サンプルモジュールを確認することもできます http://drupal.org/project/examples 具体的には、モジュールdbtng_exampleからデータベースのサンプルへ、またはpage_exampleから静的ページを作成して、取得した情報を追加します。 dbtng_exampleモジュールはDrupal 7専用ですが、このモジュールを確認すると、Drupal 6.で確認する内容についてのアイデアが増えることになります。
また、モジュールを使用してフォームを構築し、データを取得する方法についてのチュートリアル/例に飛び込む「モジュール開発者ガイド」も役立ちます http://drupal.org/developing/modules
あなたがまだアンサーを探しているかどうかはわかりませんが、 Webformモジュール があなたのケースをカバーします。ドキュメントから:
Webformは、Drupalで調査を行うためのモジュールです。送信後、ユーザーには電子メールの「領収書」が送信されるだけでなく、管理者に通知が送信されます。結果はExcelまたは他のスプレッドシートアプリケーションにエクスポートできます。 Webformはまた、いくつかの基本的な統計レビューを提供し、その機能を拡張するための広範なAPIを備えています。
DBに保存されているデータを確認するには、データベースにログインしてクエリを実行しますSELECT * FROM webform_submitted_data;
。
最初にインストールファイルを作成します。フォームのスキーマを作成します。次に.module
- file、フォームの送信ハンドラに挿入クエリを書き込みます:
function _my_component_add_form_store_edit_submit($form, &$form_state) {
if(isset($form_state['values']['cid'])) {
db_update('mid_components')
->fields(array(
'title' => $form_state['values']['human_name'],
'machine_name' => $form_state['values']['name'],
'description' => $form_state['values']['description'],
'options' => $form_state['values']['wizard_key'],
))
->condition('cid', $form_state['values']['cid'] )
->execute();
drupal_set_message(t('Record has been updated.'));
}
else {
// Here u can insert Your custom form values into your custom table.
db_insert('mid_components')
->fields(array(
'title' => $form_state['values']['human_name'],
'machine_name' => $form_state['values']['name'],
'description' => $form_state['values']['description'],
'options' => $form_state['values']['wizard_key'],
))->execute();
drupal_set_message("successfully saved details.");
}
//$form_state['redirect'] = 'admin/people/survey';
}
これは、DRUPAL 6フォーム、モジュール、およびテーブルに関するPERFECTシリーズのチュートリアルです。私は、それが非常に役立つと思います: http://webemania.com/blog/how- to-create-custom-form-in-drupal