Was ist der Unterschied zwischen drupal_get_form()
und drupal_retrieve_form()
? Kann jemand den Unterschied erklären? Ich schaue auf die API, aber die Beschreibung scheint mir ähnlich zu sein.
Was ist der Unterschied zwischen drupal_get_form()
und drupal_retrieve_form()
? Kann jemand den Unterschied erklären? Ich schaue auf die API, aber die Beschreibung scheint mir ähnlich zu sein.
Antworten:
Der Unterschied besteht darin, dass drupal_get_form()
das automatische Abrufen, Verarbeiten und Anzeigen eines gerenderten HTML-Formulars für Module behandelt wird, während drupal_retrieve_form()
das strukturierte Array zurückgegeben wird, das ein Formular definiert.
drupal_get_form()
prüft zunächst mit form_get_cache () , ob das Formular im Formularcache vorhanden ist ; Wenn es nicht vorhanden ist, ruft es drupal_retrieve_form () und drupal_prepare_form () auf .
drupal_get_form()
ruft drupal_process_form () auf , die Funktion, die drupal_validate_form () aufruft und die Übermittlungshandler mit form_execute_handlers () aufruft .
Das Rendern erfolgt von drupal_process_form()
, das form_builder () aufruft .
In den meisten Fällen drupal_get_form()
ist die Funktion zu verwenden, wie im folgenden Code.
function node_menu() {
$items['admin/content'] = array(
'title' => 'Content',
'description' => 'Find and manage content.',
'page callback' => 'drupal_get_form',
'page arguments' => array('node_admin_content'),
'access arguments' => array('access content overview'),
'weight' => -10,
'file' => 'node.admin.inc',
);
// …
return $items;
}
Das einzige Modul, das ich gefunden habe und das drupal_retrieve_form()
direkt aufruft, ist das Mollom-Modul in mollom_moderate () , das es zum automatischen Senden eines Formulars verwendet. Der Code könnte drupal_form_submit () verwenden , aber (wie ein Kommentar sagt): "Programmatische Formularübermittlungen können die Schaltfläche / Aktion zum Senden des primären Formulars nicht automatisch verwenden, daher müssen wir uns ähneln drupal_form_submit()
."
$form_id = $form_info['delete form'];
$form_state = form_state_defaults();
// We assume that all delete confirmation forms take the fully loaded
// entity as (only) argument.
$messages[] = "Attempt to load $form_info[entity] entity via entity_load().";
$entities = entity_load($data->entity, array($data->id));
$form_state['build_info']['args'][] = $entities[$data->id];
$form = drupal_retrieve_form($form_id, $form_state);
$form_state['values'] = array();
$form_state['values']['mollom']['feedback'] = '';
// Take over the primary submit button of confirm_form().
$form_state['values']['op'] = $form['actions']['submit']['#value'];
$form_state['input'] = $form_state['values'];
$form_state['programmed'] = TRUE;
// Programmed forms are always submitted.
$form_state['submitted'] = TRUE;
// Reset form validation.
$form_state['must_validate'] = TRUE;
form_clear_error();
drupal_prepare_form($form_id, $form, $form_state);
drupal_process_form($form_id, $form, $form_state);
$result = $form_state['executed'];
drupal_retrieve_form()
dass Ihr Code auf das aktualisierte Dokument zugreifen kann,$form_state
wenn es als Referenz übergeben wird. Geben Sie jedochdrupal_get_form()
nur das$form
und nicht den Status zurück.