カレンダーの日時入力フォームの年月日の並び(Moodle2.6以降)

カレンダーの日時入力フォームの年月日の並び(Moodle2.6以降)

- Tatsuya Shirai の投稿
返信数: 0

 Moodle2.6から,MDL-18375の改良により日時のセレクター周りのコードが大きく変更になりました.てっきりこれにより年・月・日の並びが自動的に言語パックを参考にして修正されるのかと思ったのですが…甘かったですね.

 Moodle2.5までは,lib/form/datetimeselector.php/dateselector.php辺りに対して喜多先生が以前に提案したコードで日・月・年ではなく,年・月・日の順にプルダウンメニューが並ぶように改良していました.Moodle2.6からはdatetimeselector.php, dateselector.phpの該当箇所がバッサリとどこかに消えています.どこか.探したところ,

calendar/type/gregorian/classes/structure.phpの中にフォームの並び順に関するコードがありました.具体的には,function get_date_order()の戻り値です.

 さて,以前の喜多先生のコードを再利用してMoodle2.6に適用すると,以下のようになりました.

function get_date_order()

    public function get_date_order($minyear = null, $maxyear = null) {
        $dateinfo = array();
// (Shirai006): QuickFormを用いている箇所での年月日の並び順を選択した言語によって自動的に並べ直す改良(喜多先生版) (2009/04/08)
// (Shirai006): ここからコメントアウト
//      $dateinfo['day'] = $this->get_days();
//      $dateinfo['month'] = $this->get_months();
//      $dateinfo['year'] = $this->get_years($minyear, $maxyear);
// (Shirai006): ここから追加
        preg_match_all('/%[dBmY]/', get_string("strftimedate"), $dmatches ); //t-kita 20090407
        $dmatches0 = $dmatches[0];
        if (count($dmatches0)!=3){ $dmatches0 = array('%d','%B','%Y'); }
        foreach ($dmatches0 as $dpiece){
            if ($dpiece=='%d'){
                $dateinfo['day'] = $this->get_days();
            }elseif (($dpiece=='%B') || ($dpiece=='%m')){
                $dateinfo['month'] = $this->get_months();
            }elseif ($dpiece=='%Y'){
                $dateinfo['year'] = $this->get_years($minyear, $maxyear);
            }
        }
// (Shirai006): ここまで追加

        return $dateinfo;
    }

このような感じでしょう.配列に入れた順番でフォームのプルダウンメニューが並んで表示されます.既出でしょうか?