2010-05-14 3 views
2

Исправьте меня, если я ошибаюсь, прочитав статьи, связанные с drupal fapi, у меня сложилось впечатление, что fapi сам генерирует атрибуты id. Это позволяет разработчикам назначать только атрибут name. Если это так, есть ли способ установить значение id для элементов? Потому что я хочу, чтобы мои элементы имели смысл «id», чтобы код html/jquery был легче читать, а также сохранял мое время от прохождения уже написанного кода jquery, чтобы изменить те все «id», которые я использовал внутри.Drupal form with custom ID

P.S: друпал версия - 6.x

ответ

0

Эта проблема на самом деле не имеют много общего с самой Drupal-FAPI, но больше с тем, как тематические формы Drupal (создать разметку).

  • Если вы хотите изменить все формы на вашем сайте, вы можете переписать функции тематизации, которые используются для форм и различных типов полой формы.

  • Если вы хотите просто перезаписать некоторые формы или поля формы, вы можете установить атрибут #theme в форме или элементе, чтобы изменить, какая функция должна использоваться для создания разметки.

+0

Означает ли это, что я могу установить свой собственный атрибут Идентификатора для формирования элементов внутри функций тематики? Если это так, как я могу ссылаться на атрибут ID элемента? Кажется, я здесь потерялся. Спасибо, кучка. – Andrew

+0

Хорошо нашел решение. Я могу использовать ключ атрибута элемента формы для установки любых дополнительных атрибутов (например, class, id ..). Спасибо за вашу помощь. – Andrew

2

ОК нашел решение. Я могу использовать ключ #attributes элемента $form для установки любых дополнительных атрибутов (таких как класс, идентификатор и т. Д.). Спасибо за вашу помощь.

1

У меня была аналогичная проблема. Мне нужно было иметь несколько форм на одной странице, поэтому мне пришлось изменить идентификаторы формы и ее элементов, чтобы предотвратить дублирование идентификаторов. Я сделал что-то вроде следующего:

function voci_comment_form($form, &$form_state, $cid) { 
    $form['#attributes']['id'] = 'voci-comment-form-' . $cid; 
    $form['#attributes']['class'][] = 'voci-comment-form'; 
    $form['body'] = array(
    '#title' => 'Post a comment', 
    '#type' => 'textarea', 
    '#resizable' => FALSE, 
    '#rows' => 1, 
); 
    $form['comment'] = array(
    '#type' => 'submit', 
    '#value' => 'Comment', 
); 

    foreach ($form as $k => &$element) { 
    $k = str_replace('_', '-', $k); 
    $element['#attributes']['id'] = "edit-$k-$cid"; 
    $element['#attributes']['class'][] = "edit-$k"; 
    } 

    return $form; 
} 

Это в основном устанавливает уникальные идентификаторы, основанные на $ CID, который передается в код также добавляет классы для каждого элемента в форме, так что вы можете стиль его легко.. Я уверен, что более надежное решение возможно, но это основная идея. Протестировано в Drupal 7.

1

Это правда, что вы можете установить $element['#attributes']['id'], и это применимо к полю формы. Тем не менее, он разбивает метки и #states в Drupal 7, потому что остальная часть конвейера рендеринга считывает идентификатор из другого места. Поэтому для ваших ярлыков и #states для продолжения работы используйте вместо этого ID для $element['#id'] (недокументированное свойство, которое тем не менее является тем, как API формы просматривает ID внутри).

Обязательно передайте свой ID через drupal_html_id, чтобы не было конфликтов.