Submitted by lezath on
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.
Une idée ? :)
Permalien Soumis par lezath le 13 Décembre, 2012 - 09:35
Une idée ? :)
Le truc c’est que les
Permalien Soumis par Aya le 13 Décembre, 2012 - 13:26
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
Permalien Soumis par lezath le 17 Décembre, 2012 - 15:15
"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.