Submit formulaire

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je rencontre actuellement un problème avec l'association d'un block à une page contenant déjà un formulaire.
Je souhaite validé et soumettre le formulaire présent dans le block (exemple : un simple champ texte qui sera obligatoire à la saisie) via le submit du formulaire de la page courante.
Lorsque je clique sur le bouton du formulaire de la page courante, il valide seulement le formulaire de la page mais pas le champ présent dans le formulaire affiché par le block.
Si ce n'est pas possible (c'est à dire s'il faut obligatoirement un submit sur le block) est-ce-qu'il y aurait une solution de contournement sachant qu'il faut laisser le choix au webmaster de placer le block (avec le groupe de champs à ajouter au formulaire) où il souhaite.

Merci de votre aide.

<?php

function exempletest_menu(){
   
$items = array();

    $items['block_dans_formulaire'] = array(
           
'title' => 'champText_required_form/block',
           
'page callback' => 'drupal_get_form',
           
'page arguments' => array('champ_text_form'),
           
'access callback' => TRUE,
    );
    return
$items;
}

function exempletest_block_info() {

  $blocks['formulaire_text'] = array(
         
'info' => t('formulaire champ texte'),
         
'status' => 1,                
          
'region' => 'contenu',  
          
'weight' => '-100',
 
   );
 
$blocks['formulaire_text_block2'] = array(
          
'info' => t('formulaireBlock2 champ texte'),
           
'status' => 1,                 
         
'region' => 'contenu',  
          
'weight' => '-100',
 
   );
 return
$blocks;
}

function exempletest_block_view($delta = '') {
   
$block = array();

 switch ($delta) {

     case 'formulaire_text':   
             
$block['subject'] = 'block submit';
           
$block['content'] = drupal_render(drupal_get_form('form_text'));
           break;
         case
'formulaire_text_block2':
             
$block['subject'] = 'block2 submit';
              
$block['content'] = drupal_render(drupal_get_form('champ_textBlock2_form'));
                break;
    }

 return $block;
}

function block_render($module, $block_id) {
   
   
$block = block_load($module, $block_id);
   
$block_content = _block_render_blocks(array($block));
   
$build = _block_get_renderable_array($block_content);
   
$block_rendered = drupal_render($build);
    return
$block_rendered;
}

function exempletest_form_alter(&$form, &$form_state, $form_id) {
/*
dsm($_POST);*/
   
if($form['#form_id'] = 'form_text'){
    }
    if(
$form['#form_id'] = 'champ_text_form'){
    }
    if(
$form['#form_id'] = 'champ_textBlock2_form'){
    }   
}

function exempletest_page_alter(&$page) {

}

//Formulaire de la page courante
function champ_text_form($form, &$form_state){
   
$form = array();

    $form['monTextepage'] = array(
           
'#type' => 'textfield',
           
'#title' => 'Mon champ texte de la page courante',
           
'#required' => true,

    );
    $form['submit'] = array(
           
'#type' => 'submit',
           
'#value' =>'envoyer',
           
'#validate' => array('champ_text_form_validate'),
           
'#submit' => array('champ_text_form_submit')
    );

    return $form;
}

function champ_text_form_submit($form, &$form_state){
}

function champ_text_form_validate($form, &$form_state){
   
$form_state['complete form']['errors'] = array(
           
'#markup' => theme('status_messages', array('display' => 'error')),
           
"#weight" => -500,
    );
}

//block
function champ_textBlock2_form($form, &$form_state){
   
$form = array();

    $form['monTextepa'] = array(
           
'#type' => 'textfield',
           
'#title' => 'Mon champ texte du block2',
           
'#required' => true,
    );
   
$form['monTextepatttt'] = array(
           
'#type' => 'textfield',
           
'#title' => 'Mon champ ajouté',
           
'#required' => true,
   
    );   
 
   
/*$form['submit'] = array(
            '#type' => 'hidden',
            '#value' =>'envoyer',
            '#validate' => array('form_text_form_validate'),
            '#submit' => array('form_text_form_submit')
    );*/
   
return $form;
}

/*function champ_textBlock2_form_submit($form, &$form_state){
}

function champ_textBlock2_form_validate($form, &$form_state){
    $form_state['complete form']['errors'] = array(
            '#markup' => theme('status_messages', array('display' => 'error')),
            "#weight" => -500,
    );
}*/

//block
function form_text($form, &$form_state){
   
$form = array();

    $form['monText'] = array(
           
'#type' => 'textfield',
           
'#title' => 'Mon champ texte',
           
'#required' => true,           
            );
   
    return
$form;
}
?>

Pour résumer, j'aimerai un seul bouton qui serait placé sur le formulaire de la page courante qui me valide et soumette tous les formulaires (blocks + formulaires de page) présents dans la page affichée.

Forum : 
Version de Drupal : 

Le truc c'est que les form_state sont différents selon les formulaires et donc que tu ne pourras pas récupérer les valeurs de tes champs dans le formulaire se situant dans le bloc.

Peut être faudrait-il faire plus de test dans la fonction form_alter afin de rajouter les champs à ton formulaire de base (en les plaçant dans un fieldset peut être pour bien les voir) lorsque qu'un administrateur décide de mettre en place des champs supplementaires dans le formulaire.

Cordialement,
AyA

"Le truc c’est que les form_state sont différents selon les formulaires" c'est bien ça le problème, je dois rester dans le principe de blocs à placer où l'on veut (pas que dans le contenu ...). Pas grave, chaque bloc aura son bouton 'valider'. Merci quand même pour cette suggestion.