¿Puedo adjuntar un widget jquery.ui.datepicker a un elemento de formulario utilizando la api de formulario?

7

Tengo un elemento de forma genérico:

$form['date'] = array(
    '#type' => 'textfield',
    '#title' => t( 'Date' ),
);

Que quiero agregar el jquery ui datepicker a este elemento. ¿Hay alguna manera de hacer esto a través del formulario api, o debo agregar lo siguiente usando drupal_add_js:

$('#edit-date').datepicker();

¿O hay otra forma aún mejor?

meriial
fuente

Respuestas:

4

Puede usar after_build en su formulario para llamar a una función que contiene drupal_add_js

digital
fuente
Nunca había usado '#after_build' antes, pero funcionó. Para otras personas que son nuevas en esta propiedad de API de formulario, toma una matriz de nombres de funciones que se llaman con $ element y $ form_state como parámetros. Práctico para agregar js personalizados a un elemento específico. También busqué definir mi propio elemento (a la fecha del proyecto) pero decidí que era excesivo.
meriial
Usó sus consejos aquí para armar covenantdesign.com/blog/…
Joshua Stewardson
4

Una solución mucho más fácil para esto es instalar los módulos emergentes de Fecha y Fecha y usar el siguiente elemento api de formulario para obtener instantáneamente un elemento emergente de fecha. No se necesitan js adicionales incluidos.

$form['date'] = array(
  '#type' => 'date_popup',
  '#title' => t('Date'),
  '#date_format' => 'd/m/Y',
);

El atributo #date_format acepta una cadena con formato de fecha PHP que se utiliza como formato de entrada para el campo de fecha.

jefe principal
fuente
4

El proyecto Date contiene un módulo (date_popup.module) que implementa un elemento de formulario date_popup. date_popup.module para Drupal 6 definió la función date_popup_load () , pero la función no está presente en la versión para Drupal 7 del módulo, ni es una función central de Drupal.

Lo que hizo la función fue incluir los archivos JavaScript necesarios.

  $path = drupal_get_path('module', 'date_popup');
  if (module_exists('jquery_ui')) {
    jquery_ui_add('ui.datepicker');
    global $language;
    if ($language->language != 'en') {
      jquery_ui_add("i18n/ui.datepicker-{$language->language}");
    }
  }
  if (variable_get('date_popup_timepicker', 'default') == 'default') {
    drupal_add_js($path . '/lib/jquery.timeentry.pack.js');
  }

La función equivalente presente en la versión Drupal 7 del módulo es date_popup_add () , que contiene el siguiente código.

drupal_add_library('system', 'ui.datepicker');
drupal_add_library('date_popup', 'timeentry');

// Add the wvega-timepicker library if it's available.
$wvega_path = date_popup_get_wvega_path();
if ($wvega_path) {
  drupal_add_js($wvega_path . '/jquery.timepicker.js');
  drupal_add_css($wvega_path . '/jquery.timepicker.css');
} 

Esa función se llama desde date_popup_element_process () , que es la función #proceso utilizada desde el campo de formulario date_popup. Puede escribir una función #process que contenga un código similar al ejecutado desde esa función y adjuntarla al campo de formulario al que desea agregar el selector de fecha.

kiamlaluno
fuente
Esto funcionó de maravilla para mis propósitos, que era agregar un selector de fecha personalizado a un formulario web.
RevNoah