Вы здесь

Как избавится от обёртки <div id="field-imja-add-more-wrapper">?

1

Здравствуйте. Вывожу поле формы в кастомном шаблоне с помощью

<?php print render($form['field_imja']); ?>

Получаю такую разметку:

<div class="field-type-text field-name-field-imja field-widget-text-textfield form-wrapper" id="edit-field-imja">
  <div id="field-imja-add-more-wrapper">
    <div class="form-item form-type-textfield form-item-field-imja-und-0-value">
      <label for="edit-field-imja-und-0-value">Имя <span class="form-required" title="Это поле обязательно для заполнения.">*</span>
      </label>
      <input class="text-full form-text required" id="edit-field-imja-und-0-value" name="field_imja[und][0][value]" value="" size="60" maxlength="255" type="text">
    </div>
  </div>
</div>

Задача - убрать 2 верних div-a оставив только

<div class="form-item...

Верхний убрал так

function mymodule_preprocess_user_register_form(&$variables) {
  unset($variables['form']['field_imja']['#theme_wrappers']);
}

и остался под ним

<div id="field-imja-add-more-wrapper">

Собственно вопрос - как его убрать? Нашёл вот https://www.drupal.org/node/2226665 но патчить ядро как-то не хочется.

Версия Drupal: 
7.x
Категория: 
Form APITheming
Вопрос задан 27.09.2015 - 02:49

Попробовал вывести в шаблоне так

print theme('form_element',  array('element' => $form['field_imja']));

чтобы вывести только поле без обёрток, получил ошибку

Notice: Undefined index: #children в функции theme_form_element() (строка 4245 в файле /home/vadim/virt_hosts/dent.dev/includes/form.inc).
Комментарий оставлен 27.09.2015 - 16:57

Ответы

2

Можно пойти через переопределение шаблона для этого поля. Поможет в этом field.tpl.php (в крайних случаях — theme_field()). Чистим переменную $classes от лишних элементов и готово!

В вашем случае шаблон будет называться field--imja.tpl.php. Если поле встречается много где, а нужно только к одному типу материала, то название шаблона будет таким (например, тип с машинным именем article): field--imja--article.tpl.php.

ADD:

Стоп. Нужно же переопределить/убрать контейнер с id, а не классом? Тогда то, что я наверху расписал не поможет :) Тут надо через field_multiple_value_form() делать в своей теме (template.php).

P.S. в восьмёрке, говорят, будет это проще ;)

Ответ дан 27.09.2015 - 11:19

Тут надо через field_multiple_value_form() делать в своей теме (template.php).

Спасибо! А можно попродробнее? Разве можно переопределять любые функции ядра в теме?

Комментарий оставлен 27.09.2015 - 16:14

Я или ничего не понимаю, или field_multiple_value_form() не является функцией темизации. Функции темизации начинаются с theme_ и их можно переопределять. Поправьте меня если я не прав.

Комментарий оставлен 27.09.2015 - 16:50