Вы здесь

Как добавить класс к элементу формы?

0

Здравствуйте. Прошу Вашей помощи.
Не удается добавить класс к элементу формы Title. И также как добавить к своему полю my_field.
Делаю так. Но добавляется только в родительский элемент. А мне нужно в INPUT самого элемента.

    function bootstraptheme_form_alter(&$form, &$form_state, $form_id) {
switch ($form_id) {
case 'article_node_form':
$form ['input'] = array(
  '#type' => 'item',
  '#markup' => 'xxx',
  '#weight' => -10,
  '#prefix' => '<span class="my_class">',
  '#suffix' => '</span>',
);

Нужно, чтобы получилось так.

<div class="form-group has-feedback">
    <label class="control-label">Username</label>
    <input type="text" class="form-control" placeholder="Username" />
    <i class="glyphicon glyphicon-user form-control-feedback"></i>
</div>

Помогите пожалуйста.

Версия Drupal: 
7.x
Категория: 
Form API
Вопрос задан 31.08.2016 - 15:16

Если данные изменения касаются только формы одного типа материала, то можно написать такой хук и тогда не нужно проверять id формы:

function bootstraptheme_article_node_form_alter(&$form, &$form_state){
...........
}
Комментарий оставлен 01.09.2016 - 19:21

Ответы

0
$form ['input'] = array(
  '#type' => 'item',
  '#markup' => 'xxx',
  '#weight' => -10,
  '#prefix' => '<span class="my_class">',
  '#suffix' => '</span>',
  '#attributes' => array('class' => array('class1', 'class2', ....)),
);
Ответ дан 01.09.2016 - 19:12

"Ничего не происходит" ни о чем не говорит.
Нужно выяснить вообще "схватился" ли хук системой. Система создает список выполняемых хуков заранее чтобы каждый раз не тратить время на их поиск. нужно удалить кеш admin/config/development/performance, тогда список перестроиться. Просто проверить работает ли хук можно прописав в нем

drupal_set_message('text');

Ключ элемента массива 'input' не означает что будет создан html элемент , это имя самого элемента, конечное имя элемента в html коде формируется исходя из его вложенности в другие элементы формы если не определен '#name' (тут я не вникал).

Элемент однострочный текст:

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

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

Элемент '#type' => 'textfield' не может содержать вложенных элементов и если не ошибаюсь их может содержать только ('#type' => 'container', #tree' => true) (так до упора можно вкладывать)
И если отрисовка этого элемента начинается с .form-item - до внедрить другой во внутрь нельзя

В общем нужно копать в сторону "виджетов" элементов формы и функции отрисовки, (если это действительно так необходимо)

Комментарий оставлен 02.09.2016 - 15:51
0

Судя по вашим комментариям, вам нужно не класс добавить (иначе ответ @noktorn правильный), а некую html разметку, как на этом скрине:

$form['my_field']['#field_suffix'] = '<span class="my_class">xxx</span>';
Ответ дан 03.09.2016 - 15:21