Меняем select на textfield в webform datapicker

Создаём webform-calendar.tpl.php со следующим содержимым:

<?php
$idKey = str_replace('_', '-', $component['form_key']);
?>
<input 
     type="text" 
     value="<?php echo date('d.m.Y')?>" 
     id="edit-submitted-<?php print $idKey ?>" 
     class="form-text <?php print implode(' ', $calendar_classes); ?>" 
     alt="<?php print t('Open popup calendar'); ?>" 
     title="<?php print t('Open popup calendar'); ?>" />


Добавляем следующее правило в стили:

.webform-container-inline.webform-datepicker  div.form-item.form-type-select {
    display: none;
}


И остаётся подправить вывод даты в поле в Drupal.webform.datepicker.
Создадим новый файл webform.datepicker.format.fix.js со следующим содержимым:

Drupal.webform = Drupal.webform || {};
 
  Drupal.webform.datepicker = function (context) {
    $('div.webform-datepicker').each(function () {
      var $webformDatepicker = $(this);
      var $calendar = $webformDatepicker.find('input.webform-calendar');
 
      // Ensure the page we're on actually contains a datepicker.
      if ($calendar.length == 0) {
        return;
      }
 
      var startDate = $calendar[0].className.replace(/.*webform-calendar-start-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
      var endDate = $calendar[0].className.replace(/.*webform-calendar-end-(\d{4}-\d{2}-\d{2}).*/, '$1').split('-');
      var firstDay = $calendar[0].className.replace(/.*webform-calendar-day-(\d).*/, '$1');
      // Convert date strings into actual Date objects.
      startDate = new Date(startDate[0], startDate[1] - 1, startDate[2]);
      endDate = new Date(endDate[0], endDate[1] - 1, endDate[2]);
 
      // Ensure that start comes before end for datepicker.
      if (startDate > endDate) {
        var laterDate = startDate;
        startDate = endDate;
        endDate = laterDate;
      }
 
      var startYear = startDate.getFullYear();
      var endYear = endDate.getFullYear();
 
      // Set up the jQuery datepicker element.
      $calendar.datepicker({
        dateFormat: 'dd.mm.yy',
        yearRange: startYear + ':' + endYear,
        firstDay: parseInt(firstDay),
        minDate: startDate,
        maxDate: endDate,
        onSelect: function (dateText, inst) {
          var date = dateText.split('.');
          $webformDatepicker.find('select.year, input.year').val(+date[0]).trigger('change');
          $webformDatepicker.find('select.month').val(+date[1]).trigger('change');
          $webformDatepicker.find('select.day').val(+date[2]).trigger('change');
        },
        beforeShow: function (input, inst) {
          // Get the select list values.
          var year = $webformDatepicker.find('select.year, input.year').val();
          var month = $webformDatepicker.find('select.month').val();
          var day = $webformDatepicker.find('select.day').val();
 
          // If empty, default to the current year/month/day in the popup.
          var today = new Date();
          year = year ? year : today.getFullYear();
          month = month ? month : today.getMonth() + 1;
          month = (parseInt(month, 10) < 10 ) ? ('0'+month) : (month);
 
          day = day ? day : today.getDate();
          day = (parseInt(day, 10) < 10 ) ? ('0'+day) : (day);
          // Make sure that the default year fits in the available options.
          year = (year < startYear || year > endYear) ? startYear : year;
 
          // jQuery UI Datepicker will read the input field and base its date off
          // of that, even though in our case the input field is a button.
          $(input).val(day + '.' + month + '.' + year);
        }
      });
 
      // Prevent the calendar button from submitting the form.
      $calendar.click(function (event) {
        $(this).focus();
        event.preventDefault();
      });
    });
  };


И подключаем его. Как это сделать - объяснять не буду. Содержимое файла можете сами проанализировать.