私はフォームで編集して削除できる項目があります。これで、すべてのitmsがフィールドセットとしてリストに表示されます。そして、フォームは、この機能を使用して作成されDrupalデータベース内の間違った行を削除/更新する
$venues = db_query('SELECT vid, name, address, postcode, city FROM venues v WHERE v.uid = :uid', array(':uid' => $user->uid));
if($venues->rowCount() != 0) {
foreach($venues as $venue) {
$page['venue_editing_form'][] = drupal_get_form('venue_editor_form', $venue->vid, $venue->name, $venue->address, $venue->postcode, $venue->city);
}
}
:
function venue_editor_form($form, &$form_state, $vid, $vname, $vadd, $vpostc, $vcity) {
$form['#prefix'] = '<div class="vedit">';
$form['#suffix'] = '</div>';
$form['edit_fieldset_'.$vname] = array(
'#type' => 'fieldset',
'#title' => t($vname),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'#attributes' => array('class' => array('venue-edit')),
);
$form['edit_fieldset_'.$vname]['venue_name'] = array(
'#type' => 'textfield',
'#title' => t('Venue name:'),
'#description' => t('Enter the venue name.'),
'#default_value' => $vname,
'#attributes' => array('onfocus' => 'this.value=""')
);
$form['edit_fieldset_'.$vname]['address'] = array(
'#type' => 'textfield',
'#title' => t('Address:'),
'#description' => t('The address of this venue.'),
'#default_value' => $vadd,
'#attributes' => array('onfocus' => 'this.value=""')
);
$form['edit_fieldset_'.$vname]['postcode'] = array(
'#type' => 'textfield',
'#title' => t('Postcode'),
'#description' => t('Enter the postcode for this event, so planB can position it on the map'),
'#default_value' => $vpostc,
'#attributes' => array('onfocus' => 'this.value=""', 'onblur' => 'getLatLong(this)')
);
$form['edit_fieldset_'.$vname]['city'] = array(
'#type' => 'textfield',
'#title' => t('City'),
'#description' => t('The city this venue is in.'),
'#default_value' => $vcity,
'#attributes' => array('onfocus' => 'this.value=""')
);
$form['edit_fieldset_'.$vname]['edit_submit'] = array(
'#type' => 'submit',
'#value' => t('Submit changes'),
'#validate' => array('venue_creation_form_validate')
);
$form['edit_fieldset_'.$vname]['delete_venue'] = array(
'#type' => 'submit',
'#value' => t('Delete venue'),
'#submit' => array('venue_form_delete')
);
$form['edit_fieldset_'.$vname]['venueid'] = array(
'#type' => 'value',
'#value' => $vid
);
return $form;
}
そして提出ハンドラの1つ:
function venue_form_delete($form, &$form_state) {
$deleted = db_delete('venues')
->condition('vid', $form['#venueid'], '=')
->execute();
drupal_set_message('Venue deleted successfully.');
}
フィールドセットは、このメソッドを使用して作成されていますさて、問題は、どの会場の削除ボタンを押しても、Drupalは常に最初のものを削除することですリストのもののうちの1つ。 $form['#venueid']
は何らかの理由で、送信ハンドラのリストの最初の会場に常に設定されていますが、フォームの生成時にメッセージを印刷すると、それぞれのフォームに異なるIDが割り当てられます。
誰もこの問題を以前に持っていましたか? (大手
$form['#venueid'] = $vid;
これは単に「作ら」形式のプロパティに値を代入します。
どこから来たのですか?あなたは元気? – SpaceBeers
vidは、すべての会場の詳細を取得するデータベースクエリから来る会場IDです。次に、foreachループを使用してすべての結果を調べ、drupal_get_form( 'venue_editor_form'、$ venue-> vid ...) – KerrM
質問を読み返して、複数のフィールドセットと複数のSubmit /削除ボタン(会場ごとに1つのフィールドセット)? –