양식을 편집하고 삭제할 수있는 항목이 있습니다. 이제 모든 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;
}
후 제출 핸들러 중 하나
function venue_form_delete($form, &$form_state) {
$deleted = db_delete('venues')
->condition('vid', $form['#venueid'], '=')
->execute();
drupal_set_message('Venue deleted successfully.');
}
필드 셋은이 방법으로 생성 된 이제 문제는 어떤 장소의 삭제 버튼을 눌러도 Drupal은 항상 첫 번째 삭제 버튼을 삭제한다는 것입니다. 목록에있는 것들 중. $form['#venueid']
은 어떤 이유로 든 제출 처리자 목록의 첫 번째 개최지로 항상 설정되지만 양식을 생성 할 때 메시지를 인쇄하면 각 양식마다 다른 ID가 있습니다.
이전에이 문제가 발생 했습니까? (주요
$form['#venueid'] = $vid;
이 그냥 '만들어'형태의 속성에 값을 할당합니다
어디서 오는가? 알았 니? – SpaceBeers
vid는 모든 장소의 세부 정보를 얻기 위해 데이터베이스 쿼리에서 온 장소 ID입니다. 그런 다음 foreach 루프를 사용하여 모든 결과를 확인하고 drupal_get_form ('venue_editor_form', $ venue-> vid ...) – KerrM
질문을 다시 읽으면 여러 필드 세트와 여러 개의 제출/삭제 버튼 (즉, 장소 당 하나의 필드 세트)? –