कैलेंडर पॉपअप पर क्लिक किए जाने वाले दिनों को अनुकूलित करें


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]" उत्तर आपको सप्ताहांत और कुछ दिनों को अक्षम करने में मदद करेगा। [१]: stackoverflow.com/questions/501943/…
निकित

जवाबों:


8

आप '#datepicker_option' के माध्यम से php से date_popup तत्व के लिए कुछ Datepicker विकल्प पास कर सकते हैं :

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

इस पद्धति के साथ आप लगभग किसी भी विकल्प को पारित कर सकते हैं, लेकिन जो एक फ़ंक्शन को मान के रूप में स्वीकार करते हैं, जैसे beforeShowDay, निकित द्वारा संदर्भित उत्तर के अनुसार सप्ताहांत या छुट्टियों को प्रतिबंधित करने की आवश्यकता है: /programming/501943/can- -jQuery-ui-datepicker-जा निर्मित करने वाली अक्षम-शनिवार और रविवार और holid

इसलिए, जावास्क्रिप्ट की आवश्यकता है। सबसे पहले आपको अपने मॉड्यूल कोड से एक कस्टम 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.jsFOO.module

अद्यतन: कस्टम दिनों की उपलब्धता के लिए उपरोक्त का विस्तार करने के लिए, मापदंडों द्वारा प्राप्त दिन के लिए सही / गलत लौटने वाले फ़ंक्शन को जोड़ें।

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

आप डेट रिस्ट्रिक्शन मॉड्यूल में अधिक पूर्ण उदाहरण पा सकते हैं ।


धन्यवाद, जॉनहट्टन! मैंने सफलतापूर्वक मिनडेट सेट किया है और यह पिछले सभी दिनों को निष्क्रिय कर देता है। मेरे लिए यह शानदार शुरुआत है। मुझे आश्चर्य है कि अगर मैं एक अधिकतमडॉट जैसा कुछ सेट कर सकता हूं, जैसा कि मैं केवल कुछ 15 दिनों की श्रेणी को सक्षम रखना चाहता हूं। मैं देख सकता हूं कि 'fromTo' विशेषता है, लेकिन इसका कोई सुराग नहीं है कि यह क्या करने जा रहा है। मेरा विचार है कि सभी तिथियों को भूतकाल (किया) और भविष्य में सभी तिथियों को निष्क्रिय कर दिया जाए (अब से 15 दिन बाद ())। बीच में, मैं तारीख पिकर जावास्क्रिप्ट दस्तावेज की जांच करूंगा कि यह देखने के लिए कि व्यक्तिगत रूप से कुछ खुले दिनों को कैसे निष्क्रिय किया जाए।
मार्कोस बुर्के

1
हां, एक मैक्सडेट भी है: api.jqueryui.com/datepicker/#option-maxDate
jonhattan

धन्यवाद, किसी कारण के लिए, जब मैं date_popup क्षेत्र के प्रलेखन में देख रहा था तो मुझे अधिकतम विकल्प पर जानकारी नहीं मिल सकी। इसने मेरे लिए काम किया और कैलेंडर को अधिकतम सीमा तक सीमित कर दिया: '#datepicker_options' => सरणी ('minDate' => 0, 'maxDate' => 30),
मार्कोस बुर्के

jonhattan, मैं फिर से पूछने के लिए माफी चाहता हूँ। मैं एक कस्टम फ़ंक्शन को निष्पादित करने के लिए अपने बालों को खींच रहा हूं। मैंने आपका मॉडल लागू किया है और यह मेरे लिए बहुत अच्छा है। लेकिन अब मैं केवल विशिष्ट तिथियों की अनुमति देने के लिए एक कस्टम फ़ंक्शन निष्पादित करना चाहता हूं। मैं देख रहा हूं कि आपने छुट्टियों को पाठक के लिए एक अभ्यास के रूप में सुझाया है ;-) यह पाठक लगभग इस समस्या को हल करने की कोशिश कर रहा है। यदि यह आपके लिए बहुत बड़ा अतिरिक्त काम नहीं है, तो क्या आपको यह पोस्ट करने का मन है कि आप इसे कैसे हल करेंगे? विवरण के बारे में परेशान मत करो, मुझे कस्टमफंक्शन (तिथि) पर कॉल करने के लिए बस एक समग्र सहायता की आवश्यकता है। धन्यवाद!
मार्कोस बुर्के

मार्कोस, मैंने एक कस्टम फ़ंक्शन के उपयोग का एक सरल उदाहरण के साथ अपना जवाब अपडेट किया है।
jonhattan

0

मैंने दिनांक प्रतिबंध मॉड्यूल का उपयोग किया है। यह निर्धारित तिथि, सापेक्ष तिथि आदि जैसे मापदंडों की संख्या पर तारीख को प्रतिबंधित करने का विकल्प प्रदान करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.