Здравствуйте!
По умолчанию в качестве H1 используется название термина. Каким образом можно переопределить его? Например, по умолчанию пусть будет название термина (если ничего другое не указано), но если есть переопределение, то пусть используется переопределение.
Комментарии
В Drupal 8+ заголовок - это блок. Убрать блок заголовка на страницах таксономии и через views добавить другой. Там можно и дополнительное поле и условие и какие хочешь теги.
Каким образом можно во views задать условие типа:
- если нет переопределения, то выводим дефолтное имя термина
- если задано переопределение для термина, то выводим его вместо дефолтного имени
- где тогда должно задаваться переопределение - причём отдельное/специфическое для каждого термина
?
Тут, видимо, как минимум нужно в термины добавлять дополнительное поле для кастомного заголовка. Однако, как конкретно вы предлагаете разрулить условия во views - мне не совсем понятно.
Да, дополнительное поле для кастомного заголовка.
Выводим это поле в views и в No results text пишем {{ name }} - тогда выведется либо переопределенное поле либо имя термина.
Либо использовать конструкции if-else: https://www.drupal.org/project/views_conditional/issues/2936233
два поля в представлении: название термина таксономии (скрыто из вывода), и поле с кастомным названием термина, у него в настройках - Поведение при отсутствии результатов: Текст при отсутствии результатов - вывести значение первого поля через подстановочный шаблон, что-то вроде
{{taxonomy_term.title}}
Ну а затем вывести это представление блоком, заменив им стандартный блок заголовка страницы (с настройкой видимости для страниц таксономии).
Вопрос в другом - как заменить тег
<title>
у таких страниц, тут возможности представлений, кмк, не хватит.Вообще, по опыту, если для решения задачи требуется костылить - то, с большой долей вероятности, задача поставлена или сформулирована неверно.
Хотел было после первого (Васька) ответа написать:
Это если условие соответствует "no results" -т.е. выборка пуста. Иначе говоря, это условие сработает только если на странице конкретного термина нет сущностей и views возвращает пустой результат. Или я что-то не так понял из вашего пояснения?
Однако, после вашего ответа понял, что именно тут имеется в виду. Я и забыл, что у полей во Views есть возможность опционально обрабатывать пустое значение поля.
Да, для варианта с блоком это какой-то выход (хоть и несколько замороченный).
PS. Я в своё время для некоторых проектов на этот случай писал небольшой кастомный модуль, который всё это делает без Views, без манипуляций блоками и кроме того, как вы отметили, корректно заменяет
<title>
. Мне это показалось проще и надёжнее, чем городить что-то на вьюсах.Возможно я не правильно объяснил задачу, сейчас попробую подробнее)
У меня есть термин таксономии с названием Фрукты и 3 дочерних термина с названиями: яблоки, груши, апельсины.
Выводится это с помощью представлений (блок).
Например, я нахожусь на странице Фрукты. В заголовке H1 вижу "Фрукты" (название термина) и внизу список: яблоки, груши, апельсины.
Если выполнять предложенные инструкции, то в прицнипе появляется значение дополнительного поля, но это все не то)) Во-первых, оно появляется в самом низу страницы, и также это все влияет на "яблоки", "груши" и т.д. Т.е. названия дочерних терминов (в списке) на странице "Фрукты" должны по прежнему браться из {{name}}. Нужно поменять только вывод непосредственно в теге H1.
Нашел код, который за это отвечает. Файл page-title.html.twig:
{% if title %}
<h1{{ title_attributes.addClass('page-title') }}>{{ title }}</h1>
{% endif %}
{{ title_suffix }}
Может быть тут что-то поменять?
Например, у меня название дополнительного поля filed_h1. Как сделать условие, чтобы при наличии значения в filed_h1 выводилось бы оно, а при отсутствии - пусть выводится name (название термина). Только опять же, в этом файле вообще нет ничего про name, и непонятно из какого поля вообще формируется {{ title }}.
Код вы нашли это хорошо.
Надеюсь вы знаете зачем тут /admin/config/development/settings галка Twig development mode
Только блок который выводит заголовок он все равно есть (с ним легче).
<div id="block-claro-page-title" class="block block-core block-page-title-block">
<!-- THEME DEBUG -->
<!-- THEME HOOK: 'page_title' -->
<!-- 💡 BEGIN CUSTOM TEMPLATE OUTPUT from 'core/themes/claro/templates/classy/content/page-title.html.twig' -->
<h1 class="page-title">Development settings</h1>
Убираете блок на страницах термина. И добавлятете блок на views. А чтобы поле не появлялось внизу страницы - уберите есго в настройках отображения термина.
VasyOK, спасибо, сделал. Почти получилось) Не могу только разобраться с тем, чтобы выводилось значение только из термина, на странице которого я нахожусь. В критериях фильтрации у меня сейчас Термин таксономии: Словарь (= Фрукты) и Термин таксономии: Опубликовано (= Истина). В итоге выводятся все термины)) Предполагаю, нужно что-то настроить в Связи и/или Контекстные фильтры?
Да, контекнстный фильтр ID термина. Значение по умолчанию ID термина из URL.
VasyOK, благодарю за помощь, все получилось!
🤝
Кстати хороший вопрос. ChatGPT предлагает для этого модуль писать.
В голове крутится идея использовать для мета title 3-е поле, которое принимает значение 2го, а в его отсутствии - перевого (названия термина). Но вот как это собрать...