/sites/default/files/2023-09/website-html-code-browser-view-printed-on-white-paper-closeup-view.jpg

Столкнулись с интересной проблемой при поддержке Drupal сайта. Встречается во всех версиях Drupal. Проблема: можно создать сущность с меткой "0", однако, эта сущность будет игнорироваться элементом формы автозаполнения.

Как повторить проблему

Создайте новый термин с именем "0". Выберите любой тип ноды и настройте новое поле, которое ссылается на термины. Установите любой виджет автозаполнения для этого поля. Выберите любую ноду этого типа и откройте форму редактирования. Введите "0" в поле — предложений по автозаполнению не будет. После сохранения ноды поле останется пустым. Однако, если вы введете "0 " (пробел в конце), то значение поля будет сохранено правильно.

Решение

Требуется патч ядра, доступен по ссылке здесь.

Исправление для терминов без патча ядра (Drupal 7):

/**
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().
 */
function custom_field_widget_taxonomy_autocomplete_form_alter(&$element, &$form_state, $context) {
  array_unshift($element['#element_validate'], 'custom_taxonomy_autocomplete_validate');
}

/**
 * Form element validate handler for taxonomy term autocomplete element.
 *
 * @param array $element
 *   The element structure.
 */
function custom_taxonomy_autocomplete_validate(array &$element) {
  // Fix for single term with name "0".
  if ($element['#value'] === '0') {
    $element['#value'] .= ' ';
  }
}

Добавить комментарий