web-dev-qa-db-ja.com

カスタムフォームを作成する場合、どのようにしてデータをdrupal dbに保存し、表示用に取得しますか?

私は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!'));
    }

} 

?>
3
kylex

必要なのは、フォーム送信ハンドラーです。これは、フォームが送信されるときに呼び出される関数です。デフォルトでは、Drupalは、フォームビルドハンドラーにちなんだ名前に "_submit"が追加された関数を使用します。この場合、その関数はmember_survey_my_form_submit()であり、 member_survey_my_form_validate()に渡される同じパラメーター。

データの保存に関しては、最初に、データの保存に使用するデータベーステーブルの構造を決定する必要があります。特に、使用する主キーを決定する必要があります。
フォームが調査用であることを考慮し、各ユーザーが調査のみを送信できるとすると、ユーザーIDを主キーとして使用します。データベーステーブルは、次のような構造になります。

  • 田畑
    • uid
    • 知識のある
    • 満足
  • 主キー
    • uid

コードについては、ユーザーがアンケートを編集することは許可されていないと想定しています。そのユーザー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」をデータベーステーブル名に置き換えます。

2
kiamlaluno

具体的な答え: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

2
cigotete

あなたがまだアンサーを探しているかどうかはわかりませんが、 Webformモジュール があなたのケースをカバーします。ドキュメントから:

Webformは、Drupalで調査を行うためのモジュールです。送信後、ユーザーには電子メールの「領収書」が送信されるだけでなく、管理者に通知が送信されます。結果はExcelまたは他のスプレッドシートアプリケーションにエクスポートできます。 Webformはまた、いくつかの基本的な統計レビューを提供し、その機能を拡張するための広範なAPIを備えています。

DBに保存されているデータを確認するには、データベースにログインしてクエリを実行しますSELECT * FROM webform_submitted_data;

1
Xaerxess

最初にインストールファイルを作成します。フォームのスキーマを作成します。次に.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'; 
}
1
Sugandh Khanna

これは、DRUPAL 6フォーム、モジュール、およびテーブルに関するPERFECTシリーズのチュートリアルです。私は、それが非常に役立つと思います: http://webemania.com/blog/how- to-create-custom-form-in-drupal

0
Hasan Hafiz