Bir Takvim açılır penceresinde tıklanabilecek günleri özelleştirin


10

Form API ile Drupal 7'de bir form oluşturuyorum. Şu anda, aşağıdaki kodla sıradan bir takvim giriş alanı oluşturabilirim:

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

Şu anda güzel takvim açılır penceresini görüntüleyebilirim. Ben elde etmeye çalışıyorum ne gibi bir kurala dayalı belirli tarihleri ​​etkinleştirmek veya devre dışı bırakmak: tüm Cumartesi ve Pazar devre dışı bırakmak; veya ulusal bayramlar listesine göre tıklama durumunu belirli tarihlerden kaldırın ...

Bu PHP kodlaması ile gerçekleştirilebilecek bir şey mi, yoksa jQuery ile mi yapılması gerekiyor? JQuery çözüm ise, bunun nasıl yapılacağına dair herhangi bir ipucu için teşekkür ederiz ... Takvim bir tablodur, ancak tablo hücrelerinin bir kurala dayalı olarak bunları bulup devre dışı bırakmama yardımcı olabilecek bir kimliği veya başka bir şeyi yoktur. ..

Teşekkür ederim.


1
Bu "[Hafta sonları nasıl devre dışı bırakılır] [1]" yanıtı, hafta sonlarını ve bazı günleri devre dışı bırakmanıza yardımcı olacaktır. [1]: stackoverflow.com/questions/501943/…
Nikit

Yanıtlar:


8

Bazı Datepicker seçeneklerini php'den date_popup öğesine '#datepicker_options' anahtarı ile iletebilirsiniz:

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

Bu yöntemle beforeShowDay, Nikit tarafından atıfta bulunulan cevaba göre hafta sonlarını veya tatilleri kısıtlamak için gerekli olan gibi , bir işlevi değer olarak kabul edenlerden başka bir seçeneği geçebilirsiniz: /programming/501943/can- -jquery-ui-datepicker-yapılacak-için-devre dışı-cumartesi-ve-pazar-ve-holid

Bu nedenle, javascript gereklidir. Öncelikle modül kodunuzdan özel bir js dosyası eklemeniz gerekir:

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

ve FOO.jsdate_popup modülü tarafından ayarlanan ayarları kendi seçeneklerimizle genişletmek için bazı kodlar sağlayın .

Aşağıda, sayfadaki tüm tarih seçici widget'ları için hafta sonlarını devre dışı bırakma temel seçeneğini ekleyen bir örnek verilmiştir:

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

Tatil günlerine uzan okuyucuya alıştırma olarak bırakılır :)

Not: Üç oluşumları FOObenim örneklerde, yani aynı değişmezi olması gerekmez: Bir sağlayabilir BAZdavranışı BAR.jsdan FOO.module.

Güncelleme: Özel günlerin kullanılabilirliği için yukarıdakileri genişletmek için parametreler tarafından alınan gün için true / false döndüren bir işlev eklemeniz yeterlidir.

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

Tarih Kısıtlamaları modülünde daha eksiksiz bir örnek bulabilirsiniz .


Teşekkür ederim Jonhattan! MinDate'i başarıyla ayarladım ve son günleri devre dışı bıraktı. Bu benim için harika bir başlangıç. Sadece 15 günlük bir aralığı etkin tutmak istediğim için maxDate gibi bir şey ayarlayıp ayarlayamayacağımı merak ediyorum. Bir 'fromTo' özelliği olduğunu görebiliyorum, ancak ne yapacağına dair hiçbir ipucum yok. Benim fikrim, geçmiş (tamamlandı) ve gelecekteki tüm tarihleri ​​(bundan 15 gün sonra) devre dışı bırakmaktır. Ortada, bazı açık günlerin nasıl ayrı ayrı devre dışı bırakılacağını görmek için tarih seçici javascript belgelerini kontrol edeceğim.
Marcos Buarque

1
evet, ayrıca bir maxDate var: api.jqueryui.com/datepicker/#option-maxDate
jonhattan

Nedense, date_popup alanının belgelerine bakarken maxDate seçeneği hakkında bilgi bulamadım. Bu benim için çalıştı ve takvimi bir maxDate ile sınırladı: '#datepicker_options' => dizi ('minDate' => 0, 'maxDate' => 30,),
Marcos Buarque

tekrar sormam için özür dilerim. Özel bir işlevi yerine getirmeye çalışırken saçımı çekiyorum. Modelinizi uyguladım ve benim için harika çalışıyor. Ancak şimdi yalnızca belirli tarihlere izin vermek için özel bir işlev yürütmek istiyorum. Tatilleri okuyucu için bir egzersiz olarak önerdiğinizi görüyorum ;-) Bu okuyucu bu sorunu çözmeye çalışırken neredeyse çılgın. Bu sizin için büyük bir ek iş değilse, bunu nasıl çözeceğinizi bildirmek ister misiniz? Ayrıntılar hakkında rahatsız etmeyin, sadece customFunction (tarih) çağrısı yapmak için genel bir yardıma ihtiyacım var. Teşekkür ederim!
Marcos Buarque

Marcos, cevabımı özel bir fonksiyonun kullanımıyla ilgili basit bir örnekle güncelledim.
jonhattan

0

Tarih Kısıtlamaları modülünü kullandım. Bu, sabit tarih, Göreli tarih vb. Gibi parametrelerin sayısı üzerindeki tarihi kısıtlama seçeneği sunar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.