[PHP-users 25749] Re: Html_Quick_Form チェックボックスの確認 画面について

Tadashi Jokagi ml @ elf.no-ip.org
2005年 6月 7日 (火) 11:07:01 JST


      ぢょ〜@よくきたなです.

T.Hさんの「[PHP-users 25746] Html_Quick_Form チェックボックスの確認 画面について」から
>お世話になります。T.Hと申します。
>
>PHP初心者でとてもつまらない質問でしたらすいません。
>
>「まるごとPHP vol.1」を購入して、Html_Quick_FormとHTML_Quick_Form

      書いた人です.ページ数なさすぎでしたが(苦笑

>   // フォームの生成
>   function addForms(){

      引数を追加.例えば「$confirm = FALSE;」などとしておく.

>
>        //ニックネーム
>        $this->addElement("text","nick_name","ニックネーム:
>",array('size'=>40));
>
>

      ここから

>        //性別
>        $sex[] =& $this->createElement( "radio",NULL,NULL, "男性", "1");
>        $sex[] =& $this->createElement( "radio",NULL,NULL, "女性", "2");
>        $this->addGroup( $sex, "sex", "性別:");
>
>        //好きな観光地
>        $ck[] = $this->createElement('checkbox','ck_01',null,'東京');
>        $ck[] = $this->createElement('checkbox','ck_02',null,'名古屋');
>        $ck[] = $this->createElement('checkbox','ck_03',null,'京都');
>        $ck[] = $this->createElement('checkbox','ck_04',null,'大阪');
>        $ck[] = $this->createElement('checkbox','ck_05',null,'広島');
>        $ck[] = $this->createElement('checkbox','ck_06',null,'福岡');
>
>        $this->addGroup($ck,"ck_answer","好きな観光地は?:","");

    ここまでを $confirm の状態で切り替え

if ( $confirm == TRUE) {
    $this->addElement( "text", "confirm_sex", ...);    //  性別
    $this->addElement( "text", "confirm_state", ...);  //  観光地
} else {
    //  既存の処理
}

>
>
>        //全要素にtrimフィルターを適用
>        $this->applyFilter('__ALL__','trim');
>
>        //空文字チェック
>        $this->addRule( "nick_name", "ニックネームを入力して下さい。",
>"required",NULL,"client");
>
>

    ここから

>        $this->addRule( "sex", "性別が選択されていません",
>"required",NULL,"client");
>        $this->addRule( "ck_answer", "好きな観光地は少なくとも一つは選択して
>下さい", "required",NULL,"client");

    ここまでも同様.趣味によっては上の条件分岐とまとめてもいいかも.

>
>        //内容チェック
>        $this->addRule( "nick_name", "ニックネームは全角で10文字までです。",
>"maxlength", 20, "client");
>
>    }//end of addForms()

      頭に戻って

> class Page_Account_Credentials extends HTML_QuickForm_Page{
> 
>     function buildForm(){
> 
>         $this->_formBuilt = true;
> 
>         $this->addElement("header", "title", "テストフォーム");
> 
>         $this->addForms();

      確認画面じゃないので「$this->addForms( FALSE);」

>class Page_Confirm_Information extends Page_Account_Credentials{
>
>   function buildForm()
>   {
>
>
>    $this->_formBuilt = true;
>
>
>//$this->setDefaults($_SESSION['_regWizard_container']['values']['page1']);
>//setDefaultsメソッドだと、書き直すと更新されない?
>
>$this->setConstants($_SESSION['_regWizard_container']['values']['page1']);
>//setConstantsメソッドだと、更新される

      要素を取り出して HTML_QuickForm_element::setValue() で直接設定
    してもいいと思います.

http://pear.php.net/manual/ja/package.html.html-quickform.html-quickform-element.setvalue.php

      関係ないですけど個人的にはセッションを直指定で取り出しは恐いの
    でオススメできません(特に非公開部分の仕様変更はある日突然勝手に起
    こります) HTML_QuickForm_Controller::container() でどうぞ.

http://pear.php.net/manual/ja/package.html.html-quickform-controller.html-quickform-controller.container.php

>    //フォームの生成
>    $this->addForms();

      ここを確認用フォームなので「$this->addForms( TRUE);」


      まとめると,

>3.確認画面での出力については、以下の通りです。
>
><現在の出力>
>
>ニックネーム:○○○○
>
>性別:()男性(x)女性
>
>好きな観光地:[x]東京[]名古屋[x]京都[]大阪[]広島[]九州
>
><出力したいフォーマット>
>
>ニックネーム:○○○○
>
>性別:女性
>
>好きな観光地:東京 京都

    出力する画面内容が違うので違う構成のフォームを作るというだけです.

-- 
----.----1----.----2----.----3----.----4----.----5----.----6----.----7
Tadashi Jokagi/Shibuya city mailto:elf @ elf.no-ip.org
YokukitanaII http://elf.no-ip.org/
Yokukita blog http://blog.poyo.jp/
Yokukita wiki http://wiki.poyo.jp/


PHP-users メーリングリストの案内