1

編集:私の「配列クロール」スキルが十分ではなかったようです。提案に感謝します。さらに、二重の「==」ではなく、単純な「=」を使用して $discounttype 条件をチェックしていたことがわかりました。同じコード ブロックに 3 時間頭を悩ませていると、頭がおかしくなり、最も明白なエラーを見逃すと思います。

まず最初に、私は Drupal 6 を使用しています。

次のマークアップを使用してフォームを作成しました。

$form["cart_".$index] = array(
'#type' => 'image_button',
'#src'=> 'files/imghome/sidebar-add-demo.gif',
'#attributes' => array('rel' => '#item', 'class' => 'buybutton', 'title' => $discounttype),
'#prefix'=>'<p class="renewprop">'.$newren.' for '.$node_abb->field_tipo_abb_value.':</p><p class="renewblock"><span class="pricetag">'.$node_abb->field_prezzo_value.''.$discounttype.'</span>',
'#suffix' =>'</p>' ,
'#submit' =>array('usercp_form_submit'),
);

この図からわかるように、フォームは正しくレンダリングされます: http://cl.ly/3D2C2h1t1m2B351L1T31 (€ 記号の横の N と R の値は、実際には $discounttype 変数の値です。確認用です)

各白いボックスは、基本的に前述のフォームのインスタンスです。

送信ごとに $discounttype 変数の値を渡す必要があるため、送信ボタンのタイトルとして設定することにしました。

私の問題は、submit 関数自体で、#attributes 配列に含まれる「タイトル」属性の値にアクセスできないことです。主な理由は、おそらく正しい構文がわからないためです。

これまで私は試しました

$foo = $form_values['attributes']['title'];
$foo = $form_values['#attributes']['title'];
$foo = $form_values['attributes']['#title'];

他のすべての可能な組み合わせですが、おそらく私のやり方が間違っているだけです。回答を探して Web をクロールしているのに実際には 1 時間かかりましたが、何か思いつきました。

4

2 に答える 2

0

まず、フォーム要素 ID を指定する必要があります。で送信ボタンにアクセスできます$form_state["cart_".$index]['#attributes']['title']; が、実際には非表示フィールド ('#type' => 'hidden') を使用しないのはなぜですか?

于 2011-06-15T07:56:13.853 に答える
0

$form_stateの代わりに使用する必要があると思います$form_values。これを試してください:

$foo = $form_state['clicked_button']['#attributes']['title'];

Drupal の開発中はDevel モジュールを使用することをお勧めします。これは開発中に非常に役立つツールであり、ページの読み込み時に実行されるすべてのクエリを確認したり、デバッグへのリダイレクトを停止したりできます

于 2011-06-14T17:08:19.943 に答える