Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll

Скрыть поле комментария

Скрыть поле комментария
, by

Добрый день!

Возникла необходимость скрыть определённое поле комментария от всех пользователей кроме автора ноды.

Идея такова: User1 создаёт определённый тип материала Article, для этого типа материала создан отдельный тип комментариев с набором полей. Другие User'ы пишут комментарии к этому материалу, заполняя несколько полей. При просмотре комментариев к материалу, созданному User1, все поля комментариев видит только User1, в то время как остальные User'ы видят все поля кроме "field_example"

Переопределил шаблон comment.html.twig.

Пытаюсь добавить цикл 

{% if node.author_name = user.username %}
    {{ content }}
      {% else %}
      {{ content|without('field_example')}}
      {% endif %}

вылетает ошибка

Подскажите пожалуйста что делаю не так!

Заранее преогромно благодарен!

1 answer
votes: 1354
Answer

Здравствуйте, вам нужно проверить что находится в сравниваемых вами полях.
 

{% dump(node.field_author) %}
{% dump(user.username) %}

Но лучше конечно это вынести в препроцесс ноды и проверку делать на PHP там, в twig уже выводить одну переменную.


А по поводу ошибки, нужно как минимум писать

{{ node.field_author.value }}

https://drupal.stackexchange.com/questions/228388/how-to-get-the-raw-field-value-in-a-twig-template


Добрый день!

Спасибо за ответ!

С препроцессом для меня всё ещё запутанней получится...

Неужели нельзя такое условие прям в шаблоне прописать?

Логика ведь довольно проста: 

{% if имя автора ноды == имя текущего пользователя %}
    {{ content печатается полностью }}
  {% else %}
      {{ content|without('field_example')}}
 {% endif %}

Не совсем понятно какие переменные нужно вставлять вместо имён? Перепробовал различные варианты, результата нет. И вообще возможно ли это, ведь в файле comment.html.twig довольно скудный набор доступных переменных.


В twig'e нужно избегать любой логике, лучше чистить поля в препроцесе, потому что появится другое условие и получится что в twig'e куча кода.
Попробуйте через node.field_author.value использовать.


Спасибо за Ваши советы!

К сожалению пока не получилось реализовать эту затею (десять тысч миллионов вариантов перепробовал)...

Подскажите прожалуйста где можно почитать\посмотреть про создание препроцессов и как потом их использовать в twig.


Вот серия уроков по темизации в Drupal 8:
https://drupalbook.org/ru/drupal/9-prodvinutaya-temizaciya-drupal-8