Posted by ilohas_1020 on January 13, 2011 at 10:13am
お世話になっております。
formAPI submitでコールされる関数に引数をつけたいです。
function AAA_form() {
$form['btndDelList'.$i] = array(
'#type' => 'submit',
'#value' => t('Test'),
'#submit' => array('BBB'),←←←ここで呼ぶ関数に引数をつけたい
);
return $form;
}
function BBB($form, $form_state){
//処理
}
上記のコードで
@@呼び出し元@@
'#submit' => array('BBB',$test)
@@呼び出し先@@
function BBB($form, $form_state,$test){
と変えてやってみましたがダメでした。
よろしくお願い致します。
Comments
初めまして、U-Taroと申します。 formの#subm
初めまして、U-Taroと申します。
formの#submitには引数を渡すことはできないので、通常はフォームの配列に#type => valueを使って値を埋め込みます。
送信された値はBBB関数で、$form_state['values']['hoge']と言う配列で使用できます。
function hoge_form($form) {
$form['hoge'] =array(
'#type' => 'value',
'#value' => 'いれたい値',
);
$form['btndDelList'.$i] = array(
'#type' => 'submit',
'#value' => t('Test'),
'#submit' => array('BBB'),
);
return $form;
}
function BBB($form, $form_state){
$hoge = $form_state['values']['hoge'];
}
ちなみに#submit => array('BBB',$test)と言う書き方ですと、BBB関数が呼び出された後に$testに入っている文字列の名前の関数が呼び出されてしまいます。
こんにちは、
こんにちは、 ilohas_1020さん
Drupalではフォームがサブミットされる際は必ず、hook_submit()が行われます。
なので
<?php
function AAA_form(){
$form['food'] = array(
'#type' => 'textfield',
'#title' => t('好きな食べ物は?'),
'#default_value' => '麻婆豆腐',
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
$form[’submit’] = array(
'#type' => 'submit',
'#value' => t('送信しちゃう'),
);
return $form;
}
?>
のサブミット時にtextfieldに記入された好きな料理の値が勝手に変更されたりした場合に、麻婆豆腐が最高だと伝えるには
function BBB() の変数名を function AAA_submit に変更しこう書きます。
<?php
function AAA_submit($form, &$form_state){
if($form_state['values']['food'] != '麻婆豆腐' or $form_state['values']['food'] != 'マーボードウフ') {
$form_state['values']['food'] = '麻婆豆腐';
}
drupal_set_message($form_state['values']['food'].'が好きなたべものなんですね!');
}
?>
また、この場合はAAAからBBB(_submit)に引数を渡す場合は
<?php
function AAA_form(){
$form['drink'] = array(
'#type' => 'hidden',
'#value' => 'コーラ',
);
return $form;
}
function AAA_submit($form, &$form_state){
drupal_set_message($form_state['values']['drink'].'は飲み過ぎないように');
}
?>
といったhidden属性で値を渡すか、
form変数に直接、入れる値を入れることで参照できます。
<?php
function AAA_form(){
$form['drink'] = 'ペプシ';
return $form;
}
?>
form_apiの値や変数に関しては、hook_submit()こちらのAPIリファレンスを参考にしてください。
※今日は昼も夜もマーボードウフだったのでつい。
U-Taroさん、jun784さん お世話になっております
U-Taroさん、jun784さん
お世話になっております。
ご回答ありがとうございます。
お二人のやり方でやったところ出来ました。
ありがとうございます。
基本的なことばかりを聞いてしまい申し訳ないです。
あともう1つなのですが
フォームの配列に文字列を入れた場合は上手くいくのですが
数字の場合だとダメでした。
キャストすればいいだけなのですが、
勉強のため教えて頂ければ幸いです。
よろしくお願い致します。
こんにちは、ilohasさん。 数字の場合はダメだとの事で
こんにちは、ilohasさん。
数字の場合はダメだとの事ですが、データの型が文字列(string型)に変換されてしまってダメという事ですかね?
もしそうだとしたらphpではあまり問題にはならないと思いますし、もしデータが取得出来ないのでしたら他の問題が考えられます。
ダメな状況をもう少し詳しく書いていただければ、回答を得られやすいと思いますよ
U-Taroさん お世話になっております。 曖昧な質問にな
U-Taroさん
お世話になっております。
曖昧な質問になってしまいすいませんでした。
もう一度、よく調べてみました。
数字の場合、exit関数で表示されないので出来ないと
思い込んでいました。
しかし型チェックをしてみると整数型となっておりました。
また1を代入した際に、受け取る側で1として受け取っているかをif文で
判定したところ正常に動作していました。
@@データ代入の部分@@
$form['rows'] = array(
'#type' => 'hidden',
'#value' => 1,←ここが'1'だとexit関数で表示されるが1だと表示さない
);
@@データ表示の部分@@
$var = $form_state['values']['rows'];
if($var == 1){
print("1です");←これを表示した
}else{
print("それ以外");
}
exit($var);
こんばんは、ilohasさん。 確かexit関数は文字型じ
こんばんは、ilohasさん。
確かexit関数は文字型じゃないと表示されないんですよね XD
蛇足ですが、モジュールを開発される時は devel モジュールをインストールされることをお勧めします。
このモジュールが有効な状態だと dpm() と言うデバッグに便利な関数が使えます。dpm($var)みたいな使い方ができて、型が配列の場合でも見やすいですし、結果はDrupalのメッセージとして出力されるので、ページを跨る様な処理のときにも有効ですよ。
U-Taroさん お世話になっております。 なるほど、そう
U-Taroさん
お世話になっております。
なるほど、そういう原因だったのですね。
あとdevel モジュールという便利な物があるのですね
早速使ってみたいと思います。
色々とありがとうございました。