====== Form API ====== La gestion des formulaires dans drupal est un poil complexe quand on sort des cas simples :-/ Un petit memo pour se souvenir de comment tout ça fonctionne donc ! Le workflow en image http://drupal.org/node/165104 Mais quand y'a un pb de validation, ou bien quand on fait juste un preview, ça peut se compliquer un peu (parce que l'on récupère un form du cache, +/- déjà construit s'il y a eu des requetes ajax qui ont fait des build et des set_cache). Ce que j'ai remarqué, c'est que si une requete ajax fait du form_get_cache/form_builder/form_set_cache, mes fonctions after_build ne seront plus appelées après le post du form complet... Reprenons donc le cycle fapi... drupal_get_form : * si POST => form_get_cache * sinon => * drupal_retrieve_form * construction du form (hooks _form & _forms) * drupal_prepare_form * hook_element * hook_form_alter * $form['#post'] = $_POST; * drupal_process_form * reset $form_state['values'] * form_builder passe sur chaque element récursivement * hook_element * _form_builder_handle_input_element * _after_build * si post drupal_validate_form * si post et pas d'erreur au _validate et pas de rebuild => _submit et clear cache * !#programmed && !rebuild && !storage => drupal_redirect_form * si #cache => form_set_cache * si $form_state['storage'] ou ($form_state['rebuild'] et $form_state['process_input'] et !form_get_errors) => drupal_rebuild_form *return drupal_render_form