Je crée un formulaire dans Drupal 7 avec l'API de formulaire. À l'heure actuelle, je peux créer un champ de saisie de calendrier ordinaire avec le code suivant:
$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>',
);
En ce moment, je peux faire apparaître la belle fenêtre de calendrier. Ce que j'essaie d'atteindre, c'est d'activer ou de désactiver certaines dates en fonction d'une règle comme: désactiver tous les samedis et dimanches; ou même supprimer l'état du clic à des dates spécifiques sur la base d'une liste de fêtes nationales ...
Est-ce quelque chose qui peut être réalisé avec le codage PHP, ou doit-il être fait avec jQuery? Dans le cas où jQuery est la solution, j'apprécierais des conseils sur la façon de le faire ... Le calendrier est un tableau, mais les cellules du tableau n'ont pas d'ID ou quelque chose qui pourrait m'aider à les trouver et à les désactiver en fonction d'une règle. ..
Je vous remercie.
Réponses:
Vous pouvez passer certaines options Datepicker de php à l'élément date_popup via la clé '#datepicker_options':
Avec cette méthode, vous pouvez passer presque toutes les options, sauf celles qui acceptent une fonction comme valeur, comme
beforeShowDay
celle requise pour restreindre les week-ends ou les jours fériés selon la réponse référencée par Nikit: /programming/501943/can- le-jquery-ui-datepicker-be-made-to-disable-samedi-et-dimanche-et-holidPar conséquent, javascript est requis. Vous devez d'abord inclure un fichier js personnalisé à partir du code de votre module:
et fournir du code
FOO.js
pour étendre les paramètres définis par le module date_popup avec nos propres options.Voici un exemple qui ajoute l'option de base pour désactiver les week-ends pour tous les widgets de sélecteur de dates de la page:
Étendre aux vacances est laissé au lecteur comme exercice :)
Remarque: les trois occurrences de
FOO
dans mes exemples n'ont pas besoin d'être le même littéral, c'est-à-dire: vous pouvez fournir unBAZ
comportement dansBAR.js
fromFOO.module
.Mise à jour: pour étendre ce qui précède pour la disponibilité des jours personnalisés, ajoutez simplement une fonction renvoyant vrai / faux pour le jour reçu par les paramètres.
Vous pouvez trouver un exemple plus complet dans le module Restrictions de date .
la source
J'ai utilisé le module Restrictions de date. Cela permet de limiter la date sur le nombre de paramètres comme la date fixe, la date relative, etc.
la source