it-swarm.com.de

Passen Sie Tage an, auf die in einem Kalender-Popup geklickt werden kann

Ich erstelle ein Formular in Drupal 7 mit der Formular-API. Im Moment kann ich ein gewöhnliches Kalender-Eingabefeld mit dem folgenden Code erstellen:

   $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>',
  );

Im Moment kann ich das schöne Kalender-Popup anzeigen lassen. Ich versuche, bestimmte Daten zu aktivieren oder zu deaktivieren, basierend auf einer Regel wie: Alle Samstage und Sonntage deaktivieren; oder entfernen Sie sogar den Klickstatus von bestimmten Daten basierend auf einer Liste von Nationalfeiertagen ...

Ist dies etwas, das mit PHP Codierung) erreicht werden kann, oder muss es mit jQuery durchgeführt werden? Falls jQuery die Lösung ist, würde ich mich über Hinweise dazu freuen ... Der Kalender ist eine Tabelle, aber Tabellenzellen haben keine ID oder etwas, das mir helfen könnte, sie basierend auf einer Regel zu finden und zu deaktivieren ...

Vielen Dank.

10
Marcos Buarque

Sie können einige Datepicker-Optionen von PHP an das date_popup-Element über den Schlüssel '#datepicker_options' übergeben:

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

Mit dieser Methode können Sie fast jede Option übergeben, außer denjenigen, die eine Funktion als Wert akzeptieren, wie beforeShowDay, die erforderlich ist, um Wochenenden oder Feiertage gemäß der Antwort von Nikit einzuschränken: https: // stackoverflow.com/questions/501943/can-the-jquery-ui-datepicker-be-made-to-disable-saturdays-and-sundays-and-holid

Daher ist Javascript erforderlich. Zuerst müssen Sie eine benutzerdefinierte js-Datei aus Ihrem Modulcode einfügen:

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

und geben Sie in FOO.js Code ein, um die vom date_popup-Modul festgelegten Einstellungen um unsere eigenen Optionen zu erweitern.

Hier ist ein Beispiel, das die grundlegende Option zum Deaktivieren von Wochenenden für alle Datepicker-Widgets auf der Seite hinzufügt:

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

Die Verlängerung auf Feiertage bleibt dem Leser als Übung überlassen :)

Hinweis: Die drei Vorkommen von FOO in meinen Beispielen müssen nicht dasselbe Literal sein, dh Sie können in BAR.js Von FOO.module.

Update: Um das oben Gesagte für die Verfügbarkeit benutzerdefinierter Tage zu erweitern, fügen Sie einfach eine Funktion hinzu, die true/false für den von den Parametern empfangenen Tag zurückgibt.

(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);

Ein vollständigeres Beispiel finden Sie im Modul Datumsbeschränkungen .

8
jonhattan

Ich habe das Modul "Datumsbeschränkungen" verwendet. Dies bietet und Option, um das Datum auf die Anzahl der Parameter wie festes Datum, relatives Datum usw. zu beschränken.

0
cchanana