กำหนดวันที่สามารถคลิกบนป๊อปอัพปฏิทิน


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 เป็นวิธีแก้ปัญหาฉันขอขอบคุณคำแนะนำใด ๆ เกี่ยวกับวิธีการทำเช่นนั้น ... ปฏิทินเป็นตาราง แต่เซลล์ตารางไม่มี ID หรือบางสิ่งบางอย่างที่สามารถช่วยฉันค้นหาและปิดใช้งานพวกเขาตามกฎ ..

ขอบคุณ.


1
คำตอบ "[วิธีการปิดการใช้งานวันหยุดสุดสัปดาห์] [1]" คำตอบนี้จะช่วยให้คุณปิดการใช้งานวันหยุดสุดสัปดาห์และบางวัน [1]: stackoverflow.com/questions/501943/…
Nikit

คำตอบ:


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กับที่จำเป็นในการ จำกัด วันหยุดสุดสัปดาห์หรือวันหยุดตามคำตอบที่อ้างอิงโดย Nikit: /programming/501943/can- ที่ jQuery-UI-datepicker กำลังจะทำเพื่อ disable-วันเสาร์และวันอาทิตย์และ holid

ดังนั้นจำเป็นต้องมีจาวาสคริปต์ ก่อนอื่นคุณต้องรวมไฟล์ js ที่กำหนดเองจากรหัสโมดูลของคุณ:

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

และระบุรหัสบางส่วนFOO.jsเพื่อขยายการตั้งค่าตามโมดูล date_popup ด้วยตัวเลือกของเราเอง

นี่คือตัวอย่างที่เพิ่มตัวเลือกพื้นฐานเพื่อปิดใช้งานวันหยุดสุดสัปดาห์สำหรับวิดเจ็ต datepicker ทั้งหมดในหน้า:

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

คุณสามารถค้นหาตัวอย่างที่สมบูรณ์มากขึ้นในโมดูลการจำกัด วันที่


ขอบคุณโจฮันสัน! ฉันได้ตั้งค่า minDate เรียบร้อยแล้วและจะปิดการใช้งานทุกวันที่ผ่านมา นี่คือจุดเริ่มต้นที่ดีสำหรับฉัน ฉันสงสัยว่าฉันสามารถตั้งค่าบางอย่างเช่น maxDate ได้หรือไม่เพราะฉันต้องการเปิดใช้งานช่วง 15 วันเท่านั้น ฉันเห็นได้ว่ามีคุณลักษณะ 'fromTo' แต่ไม่มีเงื่อนงำเกี่ยวกับสิ่งที่กำลังจะทำ ความคิดของฉันคือการปิดการใช้งานวันที่ทั้งหมดในอดีต (เสร็จสิ้น) และวันที่ทั้งหมดในอนาคต (ประมาณ 15 วันนับจากนี้ ()) ตรงกลางฉันจะตรวจสอบเอกสารจาวาสคริปต์ตัวเลือกวันที่เพื่อดูวิธีปิดใช้งานแต่ละวันที่เปิด
Marcos Buarque

1
ใช่นอกจากนี้ยังมี maxDate: api.jqueryui.com/datepicker/#option-maxDate
jonhattan

ขอบคุณด้วยเหตุผลบางอย่างเมื่อฉันดูเอกสารของฟิลด์ date_popup ฉันไม่พบข้อมูลเกี่ยวกับตัวเลือก maxDate สิ่งนี้ใช้ได้กับฉันและ จำกัด ปฏิทินไว้ที่ maxDate: '#datepicker_options' => อาร์เรย์ ('minDate' => 0, 'maxDate' => 30,),
Marcos Buarque

jonhattan ฉันขอโทษที่จะถามอีกครั้ง ฉันดึงผมของฉันพยายามที่จะใช้ฟังก์ชั่นที่กำหนดเอง ฉันใช้โมเดลของคุณและมันใช้งานได้ดีสำหรับฉัน แต่ตอนนี้ฉันต้องการเรียกใช้ฟังก์ชันที่กำหนดเองเพื่ออนุญาตเฉพาะวันที่ที่ระบุเท่านั้น ฉันเห็นคุณได้แนะนำวันหยุดเป็นแบบฝึกหัดสำหรับผู้อ่าน ;-) ผู้อ่านคนนี้เกือบจะบ้าคลั่งที่พยายามแก้ไขปัญหานี้ หากไม่ใช่งานเพิ่มเติมที่ยิ่งใหญ่สำหรับคุณคุณคิดว่าคุณจะแก้ปัญหานี้ได้อย่างไร ไม่ต้องกังวลเกี่ยวกับรายละเอียดฉันแค่ต้องการความช่วยเหลือโดยรวมในการโทรไปยัง customFunction (วันที่) ขอบคุณ!
Marcos Buarque

มาร์กอสฉันได้อัปเดตคำตอบของฉันด้วยตัวอย่างง่ายๆของการใช้ฟังก์ชันที่กำหนดเอง
jonhattan

0

ฉันใช้โมดูล จำกัด วันที่ ข้อเสนอนี้และตัวเลือกเพื่อ จำกัด วันที่ตามจำนวนพารามิเตอร์เช่นวันที่คงที่วันที่ญาติ ฯลฯ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.