Налаштуйте дні, на які можна натиснути спливаюче меню Календар


10

Я створюю форму в Drupal 7 за допомогою API форми. Зараз я можу створити звичайне поле для введення календаря із таким кодом:

   $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 - це рішення, я буду вдячний за будь-які підказки, як це зробити ... У календарі є таблиця, але комірки таблиці не мають ідентифікатора чи чогось, що могло б допомогти мені знайти та відключити їх на основі правила. ..

Дякую.


1
Ця відповідь "[Як відключити вихідні дні] [1]" допоможе вам відключити вихідні та деякі дні. [1]: stackoverflow.com/questions/501943 / ...
Никит

Відповіді:


8

Ви можете передати деякі параметри Datepicker від php до елемента date_popup за допомогою клавіші '#datepicker_options':

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

За допомогою цього методу ви можете передавати практично будь-який варіант, окрім тих, які приймають функцію як значення, як beforeShowDay, необхідну для обмеження вихідних або святкових днів відповідно до відповіді, на яку посилається Нікіт: /programming/501943/can- the-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в моїх прикладах не повинно бути таким же , буквально, тобто: ви можете вказати 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);

Ви можете знайти більш повний приклад у модулі обмеження дати .


Дякую, Джонгеттен! Я успішно встановив minDate, і він відключається всі минулі дні. Це чудовий початок для мене. Цікаво, чи можу я встановити щось на кшталт maxDate, оскільки я хочу, щоб увімкнено лише діапазон приблизно 15 днів. Я можу бачити, що є атрибут 'fromTo', але не має підказки щодо того, що він буде робити. Моя ідея - відключити всі дати в минулому (зроблено) і всі дати в майбутньому (приблизно 15 днів з цього часу). У середині я перевірю документацію javascript для вибору дати, щоб побачити, як окремо відключити деякі дні відкритих дверей.
Маркос Буарке

1
так, є також maxDate: api.jqueryui.com/datepicker/#option-maxDate
jonhattan

Дякую, чомусь переглянувши документацію поля date_popup, я не зміг знайти інформацію про параметр maxDate. Це працювало для мене і обмежувало календар maxDate: '#datepicker_options' => масив ('minDate' => 0, 'maxDate' => 30,),
Маркос Буарк

jonhattan, я прошу просити ще раз. Я тягну за волосся, намагаючись виконати користувацьку функцію. Я реалізував вашу модель, і вона чудово працює для мене. Але тепер я хочу виконати власну функцію, щоб дозволити лише конкретні дати. Я бачу, ви запропонували свята як вправу для читача ;-) Цей читач майже божевільний намагається вирішити цю проблему. Якщо це не величезна додаткова робота для вас, чи не проти ви розмістити повідомлення про те, як би ви вирішили це? Не турбуйтеся про деталі, мені просто потрібна загальна допомога для здійснення дзвінка на customFunction (дата). Дякую!
Маркос Буарке

Маркос, я оновив свою відповідь простим прикладом використання спеціальної функції.
jonhattan

0

Я використовував модуль обмеження дати. Це забезпечує і можливість обмеження дати на кількість параметрів, таких як фіксована дата, відносна дата тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.