スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    multiple select boxでのhierselect(@symfony)

    0
      現在開発中のシステム、この機会に色々と機能を見直してるので、色々実験もしてます。

      Pearを使っていた頃にはなかったmultipleセレクトボックスのhierselectなんてものを作ってみました^^;

      基本的にはmultipleなしのhierselectと同じなんですが、ちょっとだけ違います。
      ■Areaテーブル@DB
      id: integer 主キー
      pref: varchar 都道府県名
      city: varchar 市町村名
      これは前と全く同じ。

      ■actions > actions.class.php

      //★Form用のアクションは前と全く同じです★
      public function executeForm()
      {
      if($this->getRequest()->getMethod()!=sfRequest::POST)
      {
      //1つ目のselect用に都道府県リストを用意
      $c= new Criteria();
      $c->setDistinct();
      $c->addAscendingOrderByColumn(AreaPeer::ID);
      $this->prefs= AreaPeer::doSelect($c);

      //javascript無効なブラウザ用の手当に使う市町村リストを用意
      $c2= new Criteria();
      $c2->addAscendingOrderByColumn(AreaPeer::ID);
      $this->areas= AreaPeer::doSelect($c2);
      }
      else
      {
      //送信後の処理(DB登録とか)をここに書く
      }
      }

      public function executeGetArea()
      {
      //ajaxからのリクエストのみ許可
      if($this->getRequest()->isXmlHttpRequest()){
      //DBのprefカラムが指定した都道府県になっている市町村のリストを取得
      $c=new Criteria();
      $c->addAscendingOrderByColumn(AreaPeer::ID);
      /*★ここ重要!★今度は一つ目のselect boxから来るパラメータが「,」区切りの文字列で渡される(予定)なので、配列に直した上でCriteriaのWHERE条件をINに。*/
      $c->add(AreaPeer::PREF, explode(',',$this->getRequestParameter('pref')), Criteria::IN);
      $this->areas=AreaPeer::doSelect($c);
      }
      }
      ■templates > formSuccess.php

      (オブジェクトヘルパー使用の宣言)
      (javascriptヘルパー使用の宣言)
      (フォームタグ開始の宣言)

      <?php echo select_tag('pref',objects_for_select($prefs,'getPref','getPref'),
      array(
      'multiple'=>'multiple',
      'onChange'=>remote_function(array(
      'update' => 'cities',
      'url' => 'hoge/getarea',
        /*★withにつけるパラメータ用にprefエレメントの値をまとめて取ってくるJavascriptに変更(prottype.jsを使用してます)★*/
      'with' => "'pref=' + Form.Element.getValue(prefs)"
      ))
      )) ?>
      <span id="cities">
      <?php echo select_tag('area_id',objects_for_select($areas,'getId','getCity'),array('multiple'=>'multiple')) ?>
      </span>

      (submitとかresetとか)
      </form>

      ■templates > getAreaSuccess.php
      <?php echo select_tag('area_id',objects_for_select($areas,'getId','getCity'),array('multiple'=>'multiple')) ?>


      ■■いらんと思うけど解説■■
      やりたいことは、
      1.フォームを表示すると、都道府県と市町村のselect boxがある。この時点では都道府県・市町村どちらも全国全ての都道府県・市町村がある。

      2.都道府県のselect boxで何か選ぶと、市町村のselect boxは、自動的に(ajaxがここで働く)選ばれた都道府県に対応する市町村だけに絞り込まれる。
      というもの。

      …と、ここまではmultipleなしの場合と一緒。
      今回は、複数の都道府県を指定して→その2つ以上の都道府県に属する市町村をまとめて呼び出したいというわけでした。

      multiple無しのhier select boxは所在地等に適してますが、multipleのhier select boxは何らかのサービスの対象地域なんかにいいと思います。どうでしょ^^


      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 17:20
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        コメントする








           
        この記事のトラックバックURL
        トラックバック

        PR

        calendar

        S M T W T F S
        1234567
        891011121314
        15161718192021
        22232425262728
        293031    
        << October 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM