1

開始時刻と終了時刻を組み合わせたカレンダーを使用する引っ越し業者の予約フォームを作成しています。Formidable Proを使用してタイムピッカーを作成しました。これにより、時間フィールドの「一意」をチェックして、選択した日付に自動的に削除することができます。ただし、開始時刻と終了時刻の間の範囲内から時刻が自動的に削除されるわけではありません(つまり、誰かが午前1時から午前3時までトラックを借りることを選択した場合、将来のオプションから削除するには午前1時、午前2時、午前3時が必要ですが、今は削除します。午前1時と午前3時のみを削除します)。オプションから中間時間を削除するためにajaxを作成する必要があります。どこから始めたらいいのかわからない。これは現在のajax_time_options関数です。正しい方向へのプッシュをいただければ幸いです。

function ajax_time_options(){
    global $frmpro_settings, $frmdb, $wpdb;

    //posted vars = $time_field, $date_field, $step, $start, $end, $date, $clock
    extract($_POST);

    $time_key = str_replace('field_', '', $time_field);
    $date_key = str_replace('field_', '', $date_field);
    if (!preg_match('/^\d{4}-\d{2}-\d{2}$/', trim($date)))
        $date = FrmProAppHelper::convert_date($date, $frmpro_settings->date_format, 'Y-m-d');
    $date_entries = FrmEntryMeta::getEntryIds("fi.field_key='$date_key' and meta_value='$date'");

    $opts = array('' => '');
    $time = strtotime($start);
    $end = strtotime($end);
    $step = explode(':', $step);
    $step = (isset($step[1])) ? ($step[0] * 3600 + $step[1] * 60) : ($step[0] * 60);
    $format = ($clock) ? 'H:i' : 'h:i A';

    while($time <= $end){
        $opts[date($format, $time)] = date($format, $time);
        $time += $step;
    }

    if($date_entries and !empty($date_entries)){
        $used_times = $wpdb->get_col("SELECT meta_value FROM $frmdb->entry_metas it LEFT JOIN $frmdb->fields fi ON (it.field_id = fi.id) WHERE fi.field_key='$time_key' and it.item_id in (". implode(',', $date_entries).")");

        if($used_times and !empty($used_times)){
            $number_allowed = apply_filters('frm_allowed_time_count', 1, $time_key, $date_key);
            $count = array();
            foreach($used_times as $used){
                if(!isset($opts[$used]))
                    continue;

                if(!isset($count[$used]))
                    $count[$used] = 0;
                $count[$used]++;

                if((int)$count[$used] >= $number_allowed)
                    unset($opts[$used]);
            }
            unset($count);
        }
    }

    echo json_encode($opts);
    die();
}    
4

0 に答える 0