Trong Drupal 7, tôi có một hình thức mà tôi muốn làm như sau:
- Hiển thị danh sách các tùy chọn trong bảng hai cột đơn giản
- Chọn một hành động từ danh sách thả xuống sẽ kích hoạt AJAX và thay thế các tùy chọn trong bảng
Tôi có mã được viết và Drupal chỉ đăng các giá trị lên AJAX vào lần đầu tiên bạn chọn. Điều này chỉ không hoạt động trên các loại 'mặt hàng'? Lưu ý, cũng có các biểu mẫu khác trên trang, nhưng ID biểu mẫu là duy nhất như các trường biểu mẫu.
$form['new_date'] = array(
'#type' => 'select',
'#title' => 'Delivery Date',
'#options' => $date,
'#ajax' => array(
'callback' => 'delivery_date_weekends',
'wrapper' => 'dates-ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
$form['date_weekend'] = array(
'#type' => 'item',
'#prefix' => '<div id="dates-ajax">',
'#suffix' => '</div>',
'#markup' => '',
);
Sau đó, trong cuộc gọi lại AJAX, dữ liệu được trả về với #markup được đặt thành chủ đề ('bảng') của kết quả. Nó chỉ hoạt động lần đầu tiên, tôi thấy dữ liệu POST trong bảng điều khiển Fireorms. Chọn một tùy chọn thả xuống khác, bảng của tôi không cập nhật.
Tôi đã làm điều gì sai ở đây?
Chỉnh sửa: có vẻ như POST đang thực hiện, nhưng phản hồi trống, nhưng không nên.
Chỉnh sửa 2: Gọi lại Ajax:
function delivery_date_weekends($form, $form_state) {
$query = new EntityFieldQuery();
$result = $query->entityCondition('entity_type', 'field_collection_item')
->propertyCondition('item_id', $form_state['values']['rates'])
->fieldCondition('field_delivery_basis', 'value', 'Weekly', '=');
$startmonth = strtotime(date('m', $form_state['values']['new_date']).'/01/'.date('Y'));
$endmonth = strtotime('+1 month', $startmonth);
$query->fieldCondition('field_delivery_date_period', 'value', $startmonth, '>=')
->fieldCondition('field_delivery_date_period', 'value', $endmonth, '<=');
$result = $query->execute();
if ($result) {
$headers = array(
array('data' => 'Weekend', 'class' => 'tableHeader-processed'),
array('data' => '', 'class' => 'tableHeader-processed'),
);
$rates = entity_load('field_collection_item', array_keys($result['field_collection_item']));
foreach ($rates as $key => $rate) {
if ($rate->field_delivery_available['und'][0]['value']) {
$rows[] = array('data' => array(date('M j, Y', $rate->field_delivery_date_period['und'][0]['value']), array('data' => 'delivery link', 'class' => array('fee'))));
} else {
$rows[] = array('data' => array(date('M j, Y', $rate->field_delivery_date_period['und'][0]['value']), array('data' => 'Not Available!')));
}
}
$form['booking_weekend']['#markup'] = theme('table', array('header' => $headers, 'rows' => $rows, 'sticky' => FALSE));
} else {
$form['booking_weekend']['#markup'] = 'No delivery weekends exist for this month. Please select another date.';
}
return $form['booking_weekend'];
}
Về cơ bản khi một tháng / năm được chọn, tôi đang truy vấn ngày (bên trong bộ sưu tập trường).
delivery_date_weekends()
không?