tetsunosukeのnotebook

tetsunosukeのメモです

QFCで確認+送信なウィザード

<?php

/**
 * Simpleな確認画面を出すフォーム
 */
require_once 'HTML/QuickForm/Controller.php';
require_once 'HTML/QuickForm/Action/Display.php';

// Start the session

session_start();
// 1st input page
class InputPage extends HTML_QuickForm_Page
{
    function buildForm()
    {
        $this->_formBuilt = true;
        $this->addElement('header', 'input_header','Input your information');
        
        $this->addElement('text','username','username:', array('size' => 30, 'maxlength' => 70));
        $this->addElement('text','email','email:', array('size' => 30, 'maxlength' => 70));
        
        $buttons[0] =& HTML_QuickForm::createElement('reset', 'cancel', 'Cancel');
        $buttons[1] =& HTML_QuickForm::createElement('submit', $this->getButtonName('next'), 'Confirm >>');
        $this->addGroup($buttons, 'buttons', '', '&nbsp', false);

        $this->setDefaultAction('next');
    }
        
}
// 2nd confirm page
class ConfirmPage extends HTML_QuickForm_Page
{

    function buildForm()
    {        
        $this->_formBuilt = true;
        $this->addElement('header', 'data_header', 'Your personal data');
        $post = $this->controller->exportValues('page1');
        $this->setDefaults(
            array(
                'username' => $post['username'],
                'email' => $post['email']
            )
        );        
        $this->addElement('static', 'username', 'username :');        
        $this->addElement('static', 'email', 'email :');   
        

    
        $prevnext[] =& $this->createElement('submit',   $this->getButtonName('back'), '<< 戻る');
        $prevnext[] =& $this->createElement('submit',   $this->getButtonName('next'), '送信');
        $this->addGroup($prevnext, 'buttons', '', '&nbsp;', false);
               

        $this->setDefaultAction('next');
    }
}
// レンダラを使って画面定義を行う。

class ActionDisplay extends HTML_QuickForm_Action_Display
{
    function _renderForm(&$page) 
    {
        $renderer =& $page->defaultRenderer();

        // $page->setRequiredNote('<font color="#FF0000">*</font> shows the required fields.');
        // $page->setJsWarnings('Those fields have errors :', 'Thanks for correcting them.');
        
        $renderer->setFormTemplate(
            '<table width="450" border="0" cellpadding="3" cellspacing="2" bgcolor="#CCCC99"><form{attributes}>{content}</form></table>'
        );
        $renderer->setHeaderTemplate(
            '<tr><td style="white-space:nowrap;background:#996;color:#ffc;" align="left" colspan="2"><b>{header}</b></td></tr>'
        );
        $renderer->setGroupTemplate(
            '<table><tr>{content}</tr></table>', 'name'
        );
        $renderer->setGroupElementTemplate(
            '<td>{element}<br /><span style="font-size:10px;"><!-- BEGIN required --><span style="color: #f00">*</span><!-- END required --><span style="color:#996;">{label}</span></span></td>', 'name'
        );

        $page->accept($renderer);
        echo $renderer->toHtml();
    }
}
// 実際に行うActionを定義
// とりあえず送信されてきた情報を表示するとかしてみるよ。

class ActionProcess extends HTML_QuickForm_Action
{
    function perform(&$page, $actionName)
    {   
        $values = $page->controller->exportValues();
        echo '<pre>';
        var_dump($values);
        echo '</pre>';
    }
}
$wizard =& new HTML_QuickForm_Controller('regWizard', true);
$wizard->addPage(new InputPage('page1'));
$wizard->addPage(new ConfirmPage('page2'));

$wizard->addAction('display', new ActionDisplay());
$wizard->addAction('process', new ActionProcess());

$wizard->run();
?>