Добрый день!
Пытаюсь настроить "Критерий фильтрации", нужно выбрать много терминов таксономии, в итоге не укладываюсь в это ограничение 128 символов? Как можно решить проблему?
Добрый день!
Пытаюсь настроить "Критерий фильтрации", нужно выбрать много терминов таксономии, в итоге не укладываюсь в это ограничение 128 символов? Как можно решить проблему?
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 тысяч имён терминов программно.
Комментарии
А расскажите более подробно о задаче.
Я очень люблю сложные запросы к БД.
Запросы к БД тут не причем. При редактировании представления в "Критерий фильтрации" добавляю фильтр "Термин таксономии: Термин" и далее в поле нужно указать один или несколько терминов таксономии. Вот в этом поле и установлено ограничение в 128 символов (maxlength=128), т.е. я не могу туда прописать все нужные мне термины, точнее прописать могу, но не сохраняется, т.к. maxlength=128. Где-то в административном шаблоне указан этот атрибут, хочется это исправить, но чтобы при обновлении Drupal не слетало.
Попробуйте не имя а ID термина. Или сам термин выбрать в views.
По поводу ID не понял, где его брать. Да и в целом, мне необходимо именно название и обойти эти дурацкое ограничение в 128 символов.
Так я и выбираю их в views. Когда длина названий всех терминов превышает 128 символов, сохранить не получается.
Вообще то Представления - это и есть запросы к БД
Любые действия в Drupal - это и есть запросы к БД. Тут нет никаких сложных и кастомных запросов к БД, обычный функционал их коробки, до БД тут запросы не доходят даже, т.к. ограничение длины поля на уровне HTML.
Как то вы меня не понимаете.
Если Представление по каким либо причинам не справляется с тем, что мне нужно - я просто пишу запрос вручную в коде. И там хоть 128, хоть 512.
Там где вы имя термина берете там можно и ИД взять. Возможно через связь по полю ссылки на термин.
На самом деле, шаблон здесь ни причём. Так как параметры полей (хоть на уровне 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 тысяч имён терминов программно.
kompospec, VasyOK, OldWarrior благодарю за участие)
Действительно, попытка решения задачи "не с того края".
Решил задачу по-другому, с помощью полей, т.е. добавил нужные поля к терминам таксономии, и в фильтре использовал эти поля...