Posted by nobuyuki3 on March 28, 2011 at 3:03pm
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);
}
?>
<?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
初めまして、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
ご回答ありがとうございました。
頂いたソースをコンテンツ>ページにそのまま貼り付け(input format PHP code)して、
Cache削除してやってみたのですが、何も表示されませんでした。
http://URL/formtest
根本的なところが分かって無さそうなので、
ちょっと勉強しなおしてこないとなと思いました。
時間を十分にとってみなおしてきます。