Как обрать ограничение в 128 символов в критериях фильрации?

Главные вкладки

Аватар пользователя Delewo Delewo 21 августа в 14:49

Добрый день!

Пытаюсь настроить "Критерий фильтрации", нужно выбрать много терминов таксономии, в итоге не укладываюсь в это ограничение 128 символов? Как можно решить проблему?

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 25 августа в 1:42
1

Delewo wrote: Вот в этом поле и установлено ограничение в 128 символов (maxlength=128), т.е. я не могу туда прописать все нужные мне термины, точнее прописать могу, но не сохраняется, т.к. maxlength=128. Где-то в административном шаблоне указан этот атрибут, хочется это исправить, но чтобы при обновлении Drupal не слетало.

На самом деле, шаблон здесь ни причём. Так как параметры полей (хоть на уровне HTML, хоть на уровне PHP) определяются из структур определения полей формы (т.е. всё-таки PHP). Именно там задаётся параметр вида #maxlength для типов 'textfield' (т.е. однострочное поле).

См. https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21...

В дальнейшем этот параметр может "транслироваться" на HTML-атрибуты для упрощения и ускорения процедуры валидации. Однако, если его принудительно изменить на уровне HTML - может возникнуть та же ошибка, но уже при валидации PHP-уровня.

И даже если пропущена PHP-валидация и таки удалось скормить поле с принудительно увеличенной длиной - не факт, что не возникнет ошибка записи такого длинного значения в таблицы БД. Поскольку фильтры Views - это объекты конфигурации конкретного представления, которые всё же хранятся в БД. И хорошо ещё, если в JSON или в сериализованном виде, где длины колонок не важны, а если нет?

PS. ИМХО: попытка решения задачи "не с того края". Либо переходить на ID терминов, как предлагает Васёк (это хотя бы "экономия места" поля). Либо (если нужно прям овер 9 тысяч терминов) пытаться модифицировать запросы Views через хук, в котором подставлять эти 9 тысяч имён терминов программно.

Комментарии

Аватар пользователя Delewo Delewo 22 августа в 19:58

Запросы к БД тут не причем. При редактировании представления в "Критерий фильтрации" добавляю фильтр "Термин таксономии: Термин" и далее в поле нужно указать один или несколько терминов таксономии. Вот в этом поле и установлено ограничение в 128 символов (maxlength=128), т.е. я не могу туда прописать все нужные мне термины, точнее прописать могу, но не сохраняется, т.к. maxlength=128. Где-то в административном шаблоне указан этот атрибут, хочется это исправить, но чтобы при обновлении Drupal не слетало.

Аватар пользователя Delewo Delewo 23 августа в 13:58

VasyOK wrote: Попробуйте не имя а ID термина.

По поводу ID не понял, где его брать. Да и в целом, мне необходимо именно название и обойти эти дурацкое ограничение в 128 символов.

Или сам термин выбрать в views.

Так я и выбираю их в views. Когда длина названий всех терминов превышает 128 символов, сохранить не получается.

Аватар пользователя kompospec kompospec 22 августа в 23:42

Delewo wrote: Запросы к БД тут не причем. При редактировании представления

Вообще то Представления - это и есть запросы к БД

Аватар пользователя Delewo Delewo 23 августа в 14:02

kompospec wrote:

Delewo wrote: Запросы к БД тут не причем. При редактировании представления

Вообще то Представления - это и есть запросы к БД

Любые действия в Drupal - это и есть запросы к БД. Тут нет никаких сложных и кастомных запросов к БД, обычный функционал их коробки, до БД тут запросы не доходят даже, т.к. ограничение длины поля на уровне HTML.

Аватар пользователя kompospec kompospec 23 августа в 17:44

Как то вы меня не понимаете.
Если Представление по каким либо причинам не справляется с тем, что мне нужно - я просто пишу запрос вручную в коде. И там хоть 128, хоть 512.

Аватар пользователя OldWarrior OldWarrior 25 августа в 1:42
1

Delewo wrote: Вот в этом поле и установлено ограничение в 128 символов (maxlength=128), т.е. я не могу туда прописать все нужные мне термины, точнее прописать могу, но не сохраняется, т.к. maxlength=128. Где-то в административном шаблоне указан этот атрибут, хочется это исправить, но чтобы при обновлении Drupal не слетало.

На самом деле, шаблон здесь ни причём. Так как параметры полей (хоть на уровне HTML, хоть на уровне PHP) определяются из структур определения полей формы (т.е. всё-таки PHP). Именно там задаётся параметр вида #maxlength для типов 'textfield' (т.е. однострочное поле).

См. https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21...

В дальнейшем этот параметр может "транслироваться" на HTML-атрибуты для упрощения и ускорения процедуры валидации. Однако, если его принудительно изменить на уровне HTML - может возникнуть та же ошибка, но уже при валидации PHP-уровня.

И даже если пропущена PHP-валидация и таки удалось скормить поле с принудительно увеличенной длиной - не факт, что не возникнет ошибка записи такого длинного значения в таблицы БД. Поскольку фильтры Views - это объекты конфигурации конкретного представления, которые всё же хранятся в БД. И хорошо ещё, если в JSON или в сериализованном виде, где длины колонок не важны, а если нет?

PS. ИМХО: попытка решения задачи "не с того края". Либо переходить на ID терминов, как предлагает Васёк (это хотя бы "экономия места" поля). Либо (если нужно прям овер 9 тысяч терминов) пытаться модифицировать запросы Views через хук, в котором подставлять эти 9 тысяч имён терминов программно.

Аватар пользователя Delewo Delewo 25 августа в 22:03

kompospec, VasyOK, OldWarrior благодарю за участие)
Действительно, попытка решения задачи "не с того края".
Решил задачу по-другому, с помощью полей, т.е. добавил нужные поля к терминам таксономии, и в фильтре использовал эти поля...