[Решено] Как темизировать поле даты с виджетом date_select. нужно убрать fieldset.

Главные вкладки

Аватар пользователя Jaix Jaix 9 марта 2013 в 19:09

Есть поле "дата рождения" типа "дата" с виджетом "выбор из списка".
на странице node/add оно отображается в виде fieldset с legend и 3 select-ами: месяц, дата, год.
мне нужно:
1) чтобы шло не месяц-дата-год, а дата-месяц-год
2) убрать fieldset и сделать сначала legend и потом сразу select или container
Помогите как это сделать!?

Комментарии

Аватар пользователя seryak seryak 31 марта 2013 в 6:33

Помогаю.

Убираем из fieldset поле даты в Drupal 7

Это - относительно легко, но я ломал голову над этим дольше, чем было необходимо. Бывают ситуации, когда нужно, чтобы поле даты не было вставлено внутрь fieldset. В одном обсуждении на Drupal.org (http://drupal.org/node/1467712) предлогают патч к модулю даты. Я думаю, что намного лучше просто использовать слой темы, так как оно для этого и предназначено... переопределять вывод (имеется ввиду вывод кода - прим. пер.) темы. Основная проблема для большинства людей, в том, что им не комфортно писать PHP код или они не уверены какие функции переопределять в template.php, чтобы получить желаемый результат.

Таким образом, если ты ищешь самый простой способ убрать в Drupal 7 поле даты из Fieldset, вставь этот код в template.php файл своей темы (заменить MYTHEME названием вашей темы).

<?phpfunction MYTHEME_date_combo($variables) {
  return theme('form_element', $variables);
}?>

Просто для справки, оригинальная функция темы была вызвана theme_date_combo и расположена в date.theme файле модуля даты. Вот оригинальный код:

<?phpfunction theme_date_combo($variables) {
  $element = $variables['element'];
  $field = field_info_field($element['#field_name']);
  $instance = field_info_instance($element['#entity_type'], $element['#field_name'], $element['#bundle']);
 
  // Group start/end items together in fieldset.
  $fieldset = array(
    '#title' => t($element['#title']) . ' ' . ($element['#delta'] > 0 ? intval($element['#delta'] + 1) : ''),
    '#value' => '',
    '#description' => !empty($element['#fieldset_description']) ? $element['#fieldset_description'] : '',
    '#attributes' => array(),
    '#children' => $element['#children'],
  );
  return theme('fieldset', array('element' => $fieldset));
}?>

Все просто..., просто нужно знать какую функцию переопределять.

Аватар пользователя Jaix Jaix 31 марта 2013 в 7:53

seryak спасибо, но я уже раньше все решил немножко по другому, этот способ в некоторых случаях почемуто приводил к ошибке 500 на серваке