Bonjour,
J’utilise Ubercart et je souhaiterais faire une modification lors de la validation d’un formulaire dont l’id est ‘uc_object_attributes_form’.
J’ai donc recherché logiquement la fonction ‘uc_object_attributes_form_submit’ pour faire mes modifications.
Je l’ai bien trouvée, dans le fichier uc_attribute.admin.inc
Mais aucune de mes modifs n’est prise en compte même si je commente la totalité de la fonction submit, je n’ai même pas un message d’erreur.
J’ai essayé de vider le cache, de faire un cron mais rien n’y fait.
A quelle moment une fonction submit est-elle appelée ?
Comment faire pour que mes modifs soient prises en compte.
Sinon est-il possible de créer un module et de faire un hook sur la fonction form_submit ?
Merci de votre aide.
- Vous devez vous identifier ou créer un compte pour écrire des commentaires

Oui c’est possible :
Tu crée ton module et via le hook_form_FORM_ID_alter tu peux modifier un formulaire et donc son processus de validation.
exemple un module toto
donc ta fonction sera déclaré comme suit :
function toto_form_uc_object_attributes_form_alter(&$form, &$form_state) {$form["#submit"][]='ma_fonction_de_submit'
}
Par contre cette fonction de submit sera executée après la fonction de submit du formulaire définie par ubercart…
Si tu veux la faire executer avant il faut faire un
array_unshift($form["#submit"], 'ma_fonction_de_submit');beho
61
merci beho pour ta réponse.
A quel endroit dois-je placer
<?phparray_unshift($form["#submit"], 'ma_fonction_de_submit');
?>
?
Sais-tu pourquoi si je désactive la fonction frm_submit dans le fichier d’origine ça fonctionne toujours ?
selinav
1242
Dans ton hook_form_FORM_ID_alter
En gros dans le hook tu redéfinis ton formulaire (tu peux ajouter et supprimer des champs, tu peux ajouter des fonctions de validation et des fonctions de soumissions
<?phpfunction hook_form_FORM_ID_alter(&$form, &$form_state) {
// Modification for the form with the given form ID goes here. For example, if
// FORM_ID is "user_register" this code would run only on the user
// registration form.
// Add a checkbox to registration form about agreeing to terms of use.
$form['terms_of_use'] = array('#type' => 'checkbox',
'#title' => t("I agree with the website's terms and conditions."),
'#required' => TRUE,
);
// je supprime le champs ayant l'id un_champ_que_je_veux_supprimer
unset($form['un_champ_que_je_veux_supprimer']);
// j'ajoute la fonction de validation : ma_fonction_de_validation
$form['#validate'][] = 'ma_fonction_de_validation';
// j'ajoute une fonction de validation qui sera executer avant la fonction de validation par défaut
array_unshift($form["#submit"], 'ma_fonction_de_submit');
}
?>
beho
61
Concernant le fait que cela fonctionne même après validation, c’est peut être un problème de cache…
Sinon lors de la déclaration d’un formulaire avec l’api drupal si la fonction de submit déclarée dans le tableau $form est commentée je pense qu’il devrait générer une erreur
beho
61
moi aussi je pensais avoir un message d’erreur même après avoir vidé le cache.
Ma fois j’ai fait le module qui fonctionne impeccable, mais dans mon cas c’est dommage de faire un module car la fonction submit d’origine fait un insert
et mon module fait un delete alors qu’il m’aurait fallu commenter 2 lignes de code…
Merci encore
selinav
1242