DrupalのFrom APIを利用したフォーム作成

Events happening in the community are now at Drupal community events on www.drupal.org.
nobuyuki3's picture

Drupalに少しずつ手を付け始めたPHP、Drupal勉強中の初心者です。
少しずつDrupalを知りたいと手を付け始めていますが、
良く分からない事が多いです(だから馬鹿な質問をお許し下さい)

DrupalのPageにとりあえず試しサンプルでフォームを作ってみようと思って、
ずっと前に購入しておいたDrupal Pro book(これはDrupal5向け)という本で
「完成したフォーラムテストの内容」というものを
そのままDrupal6のpageに入力してみました。

エラーが出て表示されませんでした。
Drupal Pro bookがDrupal5向けだったという事なのかもしれませんが、
これをDrupal6になったから動かなくなってしまったのでしょうか?
また、Drupal7ではもっと変わったのでしょうか?

日本語で調べたらここだけ出てきました。
(ただし、これもDrupal5のようです)
http://perltips.twinkle.cc/drupal/form_api.php

アホな質問かもしれませんが、少しずつ勉強していきたいので、
ご教授頂けましたら嬉しいです。


<?php
function formtest_nameform() {
$from = array ();
 
$form['element_num1'] = array(
  '#title' => t('氏名')
  '#type' => 'textfield',
  '#description' => t('氏名入力')
);

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('送信')

);

return
$form;

}

function
form_to_html() {
$output = drupal_get_form('formtest_nameform');
return
$output;
}

print
form_to_html();

function
formtest_nameform_submit($form_id,$form_values){

$element_num1 = $form_values['element_num1'];
output = '私の名前は' . $element_num1. 'です。';

drupal_set_message($output);
}
?>

エラー内容
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ')'
in /home/sites/heteml/users113/h/i/r/aabbcc.com/includes/common.inc(1696) : eval()'d code on line 6

Comments

初めまして、U-Taroと申します。 Drupal Pro

u7aro's picture

初めまして、U-Taroと申します。

Drupal Pro Bookは持っていないので詳しくは解らないのですが、"'#title' => t('氏名')"の後にカンマが無いのと、"output"の頭にも$が必要です。
また、"print form_to_html();" で直接呼び出してるのも、おそらく動作してない原因だと思います。

ちゃんとhook_menu()を使ってDrupalからformtest_nameform()を呼び出してあげれば動くと思いますよ。今手元に開発環境がないので、憶測で書いてしまいますが下記のようにすれば良いと思います。環境はDrupal 6、モジュール名は formtest が前提です。メニューがキャッシュされていると思いますので、コードを書いたらキャッシュをクリアして http://drupal-path/formtest にアクセスしてみてください。

動かなかったらごめんなさい。

<?php
function formtest_nameform(&$form_state) {
  $from = array ();
  $form['element_num1'] = array(
    '#title' => t('氏名'),
    '#type' => 'textfield',
    '#description' => t('氏名入力')
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('送信'),
  );

  return $form;
}

function formtest_nameform_submit($form, &$form_state){
  $element_num1 = $form_values['element_num1'];
  $output = '私の名前は' . $element_num1. 'です。';

  drupal_set_message($output);
}

/*
* MODULENAME_menu() Drupalが呼び出(フック)します。
*/
function formtest_menu() {
  $items = array();
  $items['formtest'] = array(
    'title' => 'フォームのテスト',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('formtest_nameform'),
    'access callback' => TRUE,
  );
 
  return $items;
}

ちなみにDrupal 6、Drupal 7共にフォームAPIは変わっていますが、引数が違ったりするだけで基本的にhook_validate()してhook_submit()するのには変わりありませんので、他のモジュールや、下記のようなExampleモジュールを見て学習すると良いのではないでしょうか。

http://drupal.org/project/examples

ご回答ありがとうございました。

nobuyuki3's picture

頂いたソースをコンテンツ>ページにそのまま貼り付け(input format PHP code)して、
Cache削除してやってみたのですが、何も表示されませんでした。
http://URL/formtest

根本的なところが分かって無さそうなので、
ちょっと勉強しなおしてこないとなと思いました。
時間を十分にとってみなおしてきます。