캘린더 팝업에서 클릭 할 수있는 요일 사용자 정의


10

양식 API를 사용하여 Drupal 7에서 양식을 작성 중입니다. 지금은 다음 코드를 사용하여 일반 캘린더 입력 필드를 만들 수 있습니다.

   $form['services_tab']['schedule_datepicker'] = array(
    '#title' => t('Pick the desired date'),
    '#type' => 'date_popup',
    '#date_year_range' => '0:0',
    '#date_format' => 'Y-m-d',
    '#prefix' => '<div id="datepicker-schedule">',
    '#suffix' => '</div>',
  );

지금은 아름다운 캘린더 팝업이 나타납니다. 내가 달성하려는 것은 다음과 같은 규칙에 따라 특정 날짜를 활성화 또는 비활성화하는 것입니다. 모든 토요일과 일요일을 비활성화하십시오. 공휴일 목록을 기준으로 특정 날짜에서 클릭 상태를 제거 할 수도 있습니다.

이것은 PHP 코딩으로 달성 할 수 있습니까, 아니면 jQuery로 수행해야합니까? jQuery가 해결책 인 경우, 그 방법에 대한 힌트를 주시면 감사하겠습니다 ... 달력은 테이블이지만 테이블 셀에는 규칙을 기반으로 테이블을 찾고 비활성화하는 데 도움이되는 ID 또는 무언가가 없습니다. ..

감사합니다.


1
이 "[주말을 비활성화하는 방법] [1]"답변은 주말과 며칠을 비활성화하는 데 도움이됩니다. [1] : stackoverflow.com/questions/501943/…
Nikit

답변:


8

'#datepicker_options'키를 통해 PHP에서 date_popup 요소로 Datepicker 옵션 을 전달할 수 있습니다 .

<?php
$form['date'] = array(
  '#title' => t('Pick the desired date'),
  '#type' => 'date_popup',
  '#datepicker_options' => array(
    'minDate' => 0,
  ),
);

이 방법을 사용하면 거의 모든 옵션을 전달할 수 있지만 beforeShowDayNikit가 참조하는 답변에 따라 주말 또는 공휴일을 제한하는 데 필요한 옵션을 값으로 허용하는 옵션을 전달할 수 있습니다 . /programming/501943/can- jquery-ui-datepicker는 사용할 수 없음-토요일-일요일-공휴일

따라서 자바 스크립트가 필요합니다. 먼저 모듈 코드에서 사용자 정의 js 파일을 포함해야합니다.

<?php
drupal_add_js(drupal_get_path('module', 'FOO') . '/FOO.js');

FOO.js자체 옵션으로 date_popup 모듈에서 설정 한 설정을 확장하는 코드를 제공하십시오 .

다음은 페이지의 모든 날짜 선택 위젯에 주말을 사용하지 않도록 설정하는 기본 옵션을 추가하는 예입니다.

(function ($) {
Drupal.behaviors.FOO = {
  attach: function (context) {
    for (var id in Drupal.settings.datePopup) {
      Drupal.settings.datePopup[id].settings.beforeShowDay = $.datepicker.noWeekends;
    }
  }
};
})(jQuery);

휴일까지 연장은 독자에게 연습으로 남습니다. :)

참고 : 세 가지 발행 수 FOO내 예제는, 즉 같은 문자 일 필요는 없습니다 : 당신이 제공 할 수 BAZ에서 동작을 BAR.js에서 FOO.module.

업데이트 : 사용자 정의 일 가용성을 위해 위의 내용을 확장하려면 매개 변수가 수신 한 날에 대해 true / false를 반환하는 함수를 추가하십시오.

(function ($) {
Drupal.behaviors.FOO = {
  attach: function (context) {
    for (var id in Drupal.settings.datePopup) {
      Drupal.settings.datePopup[id].settings.beforeShowDay = checkDate;
    }
  }
};

function checkDate(date) {
  if ((date.getDate() % 2) == 0) {
    return [false, 'Even days not available'];
  }
  else {
    return [true, 'Odd days are fine'];
  }
}
})(jQuery);

날짜 제한 모듈 에서보다 완전한 예를 찾을 수 있습니다 .


Jonhattan 감사합니다! minDate를 성공적으로 설정했으며 모든 지난 일이 비활성화됩니다. 이것은 나에게 큰 시작이다. 약 15 일 동안 만 범위를 유지하기 위해 maxDate와 같은 것을 설정할 수 있는지 궁금합니다. 'fromTo'속성이 있음을 알 수 있지만 수행 할 작업에 대한 단서가 없습니다. 내 생각은 과거의 모든 날짜 (완료)와 미래의 모든 날짜 (지금부터 15 일 정도)를 비활성화하는 것입니다. 중간에는 날짜 선택기 자바 스크립트 설명서에서 일부 공개 일을 개별적으로 비활성화하는 방법을 확인합니다.
Marcos Buarque

1
예, maxDate도 있습니다 : api.jqueryui.com/datepicker/#option-maxDate
jonhattan

어떤 이유로 든 date_popup 필드의 설명서를 볼 때 maxDate 옵션에 대한 정보를 찾을 수 없었습니다. 이것은 나를 위해 일한과 maxDate에 일정 제한 : '#datepicker_options'=> 배열 ( 'minDate'=> 0, 'maxDate'=> 30)
마르코스 Buarque

jonhattan, 다시 물어봐서 죄송합니다. 사용자 정의 기능을 실행하려고 머리카락을 당기고 있습니다. 나는 당신의 모델을 구현했고 그것은 나를 위해 잘 작동합니다. 그러나 이제는 특정 날짜 만 허용하도록 사용자 정의 함수를 실행하고 싶습니다. 나는 당신이 휴일을 독자들을위한 운동으로 제안했다고 본다. 큰 추가 작업이 아니라면 어떻게 해결할 수 있습니까? 세부 사항을 신경 쓰지 말고 customFunction (date)을 호출하기 위해 전반적인 도움이 필요합니다. 감사합니다!
Marcos Buarque

Marcos, 나는 커스텀 함수 사용법에 대한 간단한 예제로 대답을 업데이트했습니다.
jonhattan

0

날짜 제한 모듈을 사용했습니다. 고정 날짜, 상대 날짜 등과 같은 매개 변수 수에 따라 날짜를 제한하는 옵션을 제공합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.