Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > PEAR > HTML_quickform
HTML_quickform Forum d'entraide pour la bibliothèque HTML_quickform du framework PEAR, permettant de manipuler des formulaires en PHP. Avant de poster -> tutoriels QuickForm
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/11/2007, 16h29   #1
Invité de passage
 
Inscription : juillet 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 15
Points : 3
Points : 3
Par défaut [QuickForm] Créer une prévisualisation avant la soumission du formulaire

bonjour à tous,
j'ai un épineux pb :
je voudrais pouvoir faire une "preview" (genre un freeze du formulaire) avant soumission du formulaire... et je ne trouve pas
sur le net j'ai vu ça
Citation:
I always implement the input flow of quickform as follow:
1. user input
2. validate and freeze the form and prompt for confirmation or return for more editing
3. proceed to process the form
oki donc c'est possible... mais personne ne dis comment
j'ai creuser - et me suis embourbé - du côté de quickform_controller
pareil... aucun exemple ou ressource sur le sujet à part ça :
Citation:
Hi

I'm a newbie to Quickform Controlller and I am trying to create a multistep form with a preview step before submitting the form.

I need help creating the preview step in the form wizard.

I have look at the examples and googled for a solution but I can't seem to locate any examples.

If anyone can help me with a solution. I would GREATLY appreciate it.

Thanks in advance.
tout pareil que moi !!! encore
une réponse... pas top... enfin a pas compris....
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 class foo extends HTML_QuickForm_Page {
var freeze = false;
 
function buildFormPage1 () {
The form of // 1st page
}
 
function buildFormPage2 () {
The form of // 2nd page
}
 
function buildFormPage3 () {
The form of // 3rd page
}
}
 
class FormPage1 extends foo {
function buildForm () {
$this->buildFormPage1 ();
// Prev/Next and the like is made
}
}
 
class FormPage2 extends foo {
It makes //FormPage1 like
}
 
class FormPage3 extends foo {
It makes //FormPage1 like
}
 
class FormConfirm extends foo {
function buildForm () {
$this->freeze = true;
$this->buildForm1 ();
$this->buildForm2 ();
$this->buildForm3 ();
}
}
 
class ActionDisplay HTML_QuickForm_Action {
function _renderForm (&$page) {
if ($page->isFreeze == true) {
$page->freeze ();
}
// usual processing
si kelkun à une piste ou +tot une sol...
parce que c'est MEGA URGENT
merci
Ni;co) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2007, 00h07   #2
Invité de passage
 
Inscription : juillet 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 15
Points : 3
Points : 3
bon, ben je me réponds...
si ça peut aider quelqu'un d'autre...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
<?php
require_once 'HTML/QuickForm/Controller.php';
require_once 'HTML/QuickForm/Action/Next.php';
require_once 'HTML/QuickForm/Action/Back.php';
require_once 'HTML/QuickForm/Action/Jump.php';
require_once 'HTML/QuickForm/Action/Display.php';
 
session_start();
class Page1 extends HTML_QuickForm_Page{
 
	var $preview = false;
 
	function isConfirmedForm ($bool){
         $this->preview =  $bool;
    }
 
    function buildForm(){
		$this->_formBuilt = true;
		$this->addElement('text','nom','Nom :');
 
		if ($this->preview) {
	   		$values = $this->controller->exportValues('page1');
			$this->loadValues($values);
          	        $this->freeze(); 
			$buttons[] =& $this->createElement('submit',   $this->getButtonName('back'), '<< retour');
			$buttons[] = &HTML_QuickForm::createElement('submit', 'next', 'suite >>');
		} else {
	   		$buttons[] = &HTML_QuickForm::createElement('reset', null, 'Reset');
	   		$buttons[] = &HTML_QuickForm::createElement('submit', 'next', 'suite >>');
		}
                $this->addGroup($buttons, null, null, '&nbsp;', false);
	        $this->setDefaultAction('next');
	}
 
}
//formulaire simple
$page1 = new Page1('page1');
//construction de la preview
$page1Preview = new Page1('page1Preview'); 
$page1Preview->isConfirmedForm(true);
$controller = new HTML_QuickForm_Controller('test', true); 
$controller->addPage($page1); 
$controller->addPage($page1Preview);
$controller->addAction('display', new HTML_QuickForm_Action_Display());
$controller->run();
?>
c'est de la bidouille
j'avais pensé à procéder plus "proprement" avec un truc du genre
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
require_once 'HTML/QuickForm/Controller.php';
require_once 'HTML/QuickForm/Action/Next.php';
require_once 'HTML/QuickForm/Action/Back.php';
require_once 'HTML/QuickForm/Action/Jump.php';
require_once 'HTML/QuickForm/Action/Display.php';
 
session_start();
[...]
class PagePreview extends HTML_QuickForm_Page{
    function buildForm(){
		$this->_formBuilt = true;
		$this->addElement('header','','preview');
		$page =& $this->controller->getPage('page1');
		$page->buildForm();
		$values = $this->controller->exportValues('page1');
		$page->loadValues($values);
		$page->freeze();
    //creation d'un élément de type 'static' pour afficher la preview du form
		$this->addElement('static', 'testStatic', '', $page->toHTML());
		$this->addElement('submit',     $this->getButtonName('submit'), 'Fin');
		$this->setDefaultAction('next');
	}
}
 
 
$page1 = new Page1('page1');
$page1Preview = new Page1('page1Preview');
$page1Preview->isConfirmedForm(true);
$page2 = new PagePreview('page2');
$controller = new HTML_QuickForm_Controller('test'); 
$controller->addPage($page1); 
$controller->addPage($page1Preview);
$controller->addPage($page2);
$controller->addAction('display', new HTML_QuickForm_Action_Display());
$controller->addAction('next', new HTML_QuickForm_Action_Next());
$controller->addAction('back', new HTML_QuickForm_Action_Back());
$controller->addAction('jump', new HTML_QuickForm_Action_Jump());
$controller->addAction('process', new ActionProcess());
$controller->run();
?>
sauf que qd je dumpe les values via l'ActionProcess()...
ben ça ne marche pas sous IE7
par contre ça a l'air de marcher sous firefox...
'faut réflechir... mais il se fait tard pour mon pov' neuronne
pis faudrait surcharger toHtml() pour nettoyer <form [...] </form> de l'élément static...
si quelqu'un est un peu + frais...
Ni;co) est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2008, 00h07   #3
Invité de passage
 
Inscription : juillet 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 15
Points : 3
Points : 3
la suite... Méthode 2 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
require_once 'HTML/QuickForm/Controller.php';
require_once 'HTML/QuickForm/Action/Next.php';
require_once 'HTML/QuickForm/Action/Back.php';
require_once 'HTML/QuickForm/Action/Jump.php';
require_once 'HTML/QuickForm/Action/Display.php';
 
class monForm extends HTML_QuickForm_Page { //page 1
 
	function buildForm(){
		$this->_formBuilt = true;
		$this->addElement('text', 'test', 'Test');
 
		$buttons[] = &HTML_QuickForm::createElement('reset', null, 'Effacer');
		$buttons[] = &HTML_QuickForm::createElement('submit', 'next', 'Continuer >>');
	    	$this->addGroup($buttons, 'validButtons', '', '&nbsp', false);
 
		$this->setDefaultAction('next');
	}
 
}
 
class maPreview extends HTML_QuickForm_Page { //page preview
 
	function buildForm(){
		$this->_formBuilt = true;//constructeur
		$prev =& $this->controller->getPage($this->controller->getPrevName($this->getAttribute('id')));//recupération de la page précédente
		$mesDatas = $this->controller->exportValues ($prev->getAttribute('id'));//et des datas
 
		$this->addElement('static', 'recuptest', 'Test récupéré',$mesDatas['test']);//affichage de la saisie effectué en page 1 dans champs test
 
		$buttons[] =& $this->createElement('submit',   $this->getButtonName('back'), '<< Modifier');
		$buttons[] = &HTML_QuickForm::createElement('submit', 'next', 'Valider >>');
	    	$this->addGroup($buttons, 'validButtons', '', '&nbsp', false);
 
		$this->setDefaultAction('next');
	}
 
}
 
$page1 = new monForm ('page1');
$page1Preview = new maPreview ('page1Preview');
 
//construction du controller
$controller = new HTML_QuickForm_Controller('cmd');
 
//ajout des pages 
$controller->addPage($page1); 
$controller->addPage($page1Preview);
 
//affectation des actions
$controller->addAction('display', new HTML_QuickForm_Action_Display());
$controller->addAction('next', new HTML_QuickForm_Action_Next());
$controller->addAction('back', new HTML_QuickForm_Action_Back());
$controller->addAction('jump', new HTML_QuickForm_Action_Jump());
$controller->addAction('process', new ActionProcess());
 
//lancement du controller
$controller->run();
 
?>
ah bah vi...
sinon toujours la méthode "j'm'étends mes classes" de notre ami anglophone... et le freeze... (moi ça avait bugg... toujours pas compris pourquoi... d'ailleurs) qui en toute logique DOIT MARCHER !
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class foo extends HTML_QuickForm_Page {
var freeze = false;
 
function buildFormPage1 () {
The form of // 1st page
}
 
function buildFormPage2 () {
The form of // 2nd page
}
 
function buildFormPage3 () {
The form of // 3rd page
}
}
 
class FormPage1 extends foo {
function buildForm () {
$this->buildFormPage1 ();
// Prev/Next and the like is made
}
}
 
class FormPage2 extends foo {
It makes //FormPage1 like
}
 
class FormPage3 extends foo {
It makes //FormPage1 like
}
 
class FormConfirm extends foo {
function buildForm () {
$this->freeze = true;
$this->buildForm1 ();
$this->buildForm2 ();
$this->buildForm3 ();
}
}
 
class ActionDisplay HTML_QuickForm_Action {
function _renderForm (&$page) {
if ($page->isFreeze == true) {
$page->freeze ();
}
// usual processing
Ni;co) est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h07.


 
 
 
 
Partenaires

Hébergement Web