您可以通过“ #datepicker_options”键将一些Datepicker选项从php传递给date_popup元素:
<?php
$form['date'] = array(
  '#title' => t('Pick the desired date'),
  '#type' => 'date_popup',
  '#datepicker_options' => array(
    'minDate' => 0,
  ),
);
使用此方法,您可以传递除接受函数作为值的选项之外的几乎所有选项,例如beforeShowDay,这是根据Nikit引用的答案来限制周末或假日的选项:https ://stackoverflow.com/questions/501943/can- 使jQuery UI DatePicker禁用周六周日和假期
因此,需要javascript。首先,您需要从模块代码中包含一个自定义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在我的示例中,这三种情况并不一定要使用相同的文字,即:您可以提供from中的BAZ行为。BAR.jsFOO.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);
您可以在“ 日期限制”模块中找到更完整的示例。