Форма Drupal с пользовательским идентификатором - PullRequest
2 голосов
/ 14 мая 2010

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

P.S: Drupal версия - 6.x

Ответы [ 4 ]

2 голосов
/ 14 мая 2010

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

1 голос
/ 04 декабря 2013

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

Не забудьте также передать свой идентификатор через drupal_html_id, чтобы не было конфликтов.

1 голос
/ 10 февраля 2011

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

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.

0 голосов
/ 14 мая 2010

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

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

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

...