Как изменить заголовок H1 для термина таксономии?

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

Аватар пользователя Delewo Delewo 25 апреля в 21:29

Здравствуйте!

По умолчанию в качестве H1 используется название термина. Каким образом можно переопределить его? Например, по умолчанию пусть будет название термина (если ничего другое не указано), но если есть переопределение, то пусть используется переопределение.

Лучший ответ

Аватар пользователя VasyOK VasyOK 26 апреля в 19:18
1

Да, контекнстный фильтр ID термина. Значение по умолчанию ID термина из URL.

Комментарии

Аватар пользователя VasyOK VasyOK 26 апреля в 11:30

В Drupal 8+ заголовок - это блок. Убрать блок заголовка на страницах таксономии и через views добавить другой. Там можно и дополнительное поле и условие и какие хочешь теги.

Аватар пользователя OldWarrior OldWarrior 26 апреля в 11:59

VasyOK wrote: Там можно и дополнительное поле и условие и какие хочешь теги.

Каким образом можно во views задать условие типа:

- если нет переопределения, то выводим дефолтное имя термина
- если задано переопределение для термина, то выводим его вместо дефолтного имени
- где тогда должно задаваться переопределение - причём отдельное/специфическое для каждого термина

?

Тут, видимо, как минимум нужно в термины добавлять дополнительное поле для кастомного заголовка. Однако, как конкретно вы предлагаете разрулить условия во views - мне не совсем понятно.

Аватар пользователя VasyOK VasyOK 26 апреля в 12:37
1

Да, дополнительное поле для кастомного заголовка.
Выводим это поле в views и в No results text пишем {{ name }} - тогда выведется либо переопределенное поле либо имя термина.
Либо использовать конструкции if-else: https://www.drupal.org/project/views_conditional/issues/2936233

Аватар пользователя Andruxa Andruxa 26 апреля в 12:53

OldWarrior wrote: Каким образом можно во views задать условие типа:

- если нет переопределения, то выводим дефолтное имя термина
- если задано переопределение для термина, то выводим его вместо дефолтного имени

два поля в представлении: название термина таксономии (скрыто из вывода), и поле с кастомным названием термина, у него в настройках - Поведение при отсутствии результатов: Текст при отсутствии результатов - вывести значение первого поля через подстановочный шаблон, что-то вроде {{taxonomy_term.title}}

Ну а затем вывести это представление блоком, заменив им стандартный блок заголовка страницы (с настройкой видимости для страниц таксономии).

Вопрос в другом - как заменить тег <title> у таких страниц, тут возможности представлений, кмк, не хватит.

Вообще, по опыту, если для решения задачи требуется костылить - то, с большой долей вероятности, задача поставлена или сформулирована неверно.

Аватар пользователя OldWarrior OldWarrior 26 апреля в 14:21

VasyOK wrote: Выводим это поле в views и в No results text пишем {{ name }} - тогда выведется либо переопределенное поле либо имя термина.

Хотел было после первого (Васька) ответа написать:

Это если условие соответствует "no results" -т.е. выборка пуста. Иначе говоря, это условие сработает только если на странице конкретного термина нет сущностей и views возвращает пустой результат. Или я что-то не так понял из вашего пояснения?

Однако, после вашего ответа понял, что именно тут имеется в виду. Я и забыл, что у полей во Views есть возможность опционально обрабатывать пустое значение поля.

Да, для варианта с блоком это какой-то выход (хоть и несколько замороченный).

PS. Я в своё время для некоторых проектов на этот случай писал небольшой кастомный модуль, который всё это делает без Views, без манипуляций блоками и кроме того, как вы отметили, корректно заменяет <title>. Мне это показалось проще и надёжнее, чем городить что-то на вьюсах.

Аватар пользователя Delewo Delewo 26 апреля в 15:30

Возможно я не правильно объяснил задачу, сейчас попробую подробнее)

У меня есть термин таксономии с названием Фрукты и 3 дочерних термина с названиями: яблоки, груши, апельсины.

Выводится это с помощью представлений (блок).

Например, я нахожусь на странице Фрукты. В заголовке H1 вижу "Фрукты" (название термина) и внизу список: яблоки, груши, апельсины.

Если выполнять предложенные инструкции, то в прицнипе появляется значение дополнительного поля, но это все не то)) Во-первых, оно появляется в самом низу страницы, и также это все влияет на "яблоки", "груши" и т.д. Т.е. названия дочерних терминов (в списке) на странице "Фрукты" должны по прежнему браться из {{name}}. Нужно поменять только вывод непосредственно в теге H1.

Нашел код, который за это отвечает. Файл page-title.html.twig:

{{ title_prefix }}
{% if title %}
  <h1{{ title_attributes.addClass('page-title') }}>{{ title }}</h1>
{% endif %}
{{ title_suffix }}

Может быть тут что-то поменять?

Например, у меня название дополнительного поля filed_h1. Как сделать условие, чтобы при наличии значения в filed_h1 выводилось бы оно, а при отсутствии - пусть выводится name (название термина). Только опять же, в этом файле вообще нет ничего про name, и непонятно из какого поля вообще формируется {{ title }}.

Аватар пользователя VasyOK VasyOK 26 апреля в 16:21
1

Код вы нашли это хорошо.

Надеюсь вы знаете зачем тут /admin/config/development/settings галка Twig development mode

Только блок который выводит заголовок он все равно есть (с ним легче).

<!-- 💡 BEGIN CUSTOM TEMPLATE OUTPUT from 'core/themes/claro/templates/classy/block/block.html.twig' -->
<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. А чтобы поле не появлялось внизу страницы - уберите есго в настройках отображения термина.

Аватар пользователя Delewo Delewo 26 апреля в 17:22

VasyOK, спасибо, сделал. Почти получилось) Не могу только разобраться с тем, чтобы выводилось значение только из термина, на странице которого я нахожусь. В критериях фильтрации у меня сейчас Термин таксономии: Словарь (= Фрукты) и Термин таксономии: Опубликовано (= Истина). В итоге выводятся все термины)) Предполагаю, нужно что-то настроить в Связи и/или Контекстные фильтры?

Аватар пользователя VasyOK VasyOK 28 апреля в 20:20

Andruxa wrote: Вопрос в другом - как заменить тег у таких страниц, тут возможности представлений, кмк, не хватит.

Кстати хороший вопрос. ChatGPT предлагает для этого модуль писать.
В голове крутится идея использовать для мета title 3-е поле, которое принимает значение 2го, а в его отсутствии - перевого (названия термина). Но вот как это собрать...