In Drupal 7 habe ich ein Formular, in dem ich Folgendes tun möchte:
- Zeigen Sie eine Liste mit Optionen in einer einfachen zweispaltigen Tabelle an
- Durch Auswahl einer Aktion aus einer Dropdown-Liste wird AJAX ausgelöst und die Optionen in der Tabelle ersetzt
Ich habe Code geschrieben und Drupal sendet nur Werte an die AJAX, wenn Sie zum ersten Mal eine Auswahl treffen. Funktioniert dies nicht bei Formularelementtypen? Beachten Sie, dass die Seite auch andere Formulare enthält, die Formular-IDs jedoch ebenso wie die Formularfelder eindeutig sind.
$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' => '',
);
Im AJAX-Rückruf werden dann Daten zurückgegeben, wobei #markup auf das Thema ('Tabelle') der Ergebnisse gesetzt ist. Es funktioniert nur beim ersten Mal, ich sehe die POST-Daten in der Firebug-Konsole. Wählen Sie eine andere Dropdown-Option, meine Tabelle wird nicht aktualisiert.
Habe ich hier etwas falsch gemacht?
Bearbeiten: Scheint, als würde der POST es schaffen, aber die Antwort ist leer, sollte es aber nicht sein.
Edit 2: Ajax Callback:
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'];
}
Grundsätzlich frage ich bei der Auswahl eines Monats / Jahres nach Daten (innerhalb einer Feldsammlung).
delivery_date_weekends()
?