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

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

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

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

Не используйте empty() для проверки значения элемента формы. Не используйте (bool) приведение для проверки введенной строки из URL.

Решение

Требуется патч ядра, доступен по ссылке здесь. Для тех, у кого Drupal 7, есть решение без патча ядра:

Исправление для терминов без патча ядра (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'] .= ' ';
  }
}

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