Рейтинг:3

Как заменить строку в тексте?

флаг zw

С {{ content.field_myfield.0 }}, я получаю текст. Когда я использую {{ content.field_myfield.0|replace({"foo" : "bar"}) }}, ничего не визуализируется и об ошибках не сообщается.

я тоже пробовал заменить content.field_myfield.0 с content.field_myfield.value или `content.field_myfield.0.value, но я все равно получаю пустую строку.

Как заменить строку?

Спасибо

Рейтинг:7
флаг in

content.field_some_field представляет собой массив рендеринга, но заменять фильтр работает со строками. Вам нужно отобразить свое поле перед вызовом замены.

Например:

{{ content.field_some_field|рендеринг|заменить({"привет": "до свидания"}) }}
Рейтинг:6
флаг cn

Если это форматированное текстовое поле, вы можете заменить исходный текст перед его визуализацией. Это имеет то преимущество, что теги HTML сохраняются:

{% set field_item = content.field_myfield.0 %}
{% set text_replaced = field_item['#text']|replace({'foo': 'bar'}) %}
{{ field_item|объединить({'#text': text_replaced}) }}

Если вы не уверены в типе поля, проверьте массив рендеринга {{ дамп (поле_элемент) }}.

Вы можете сгладить массив рендеринга перед заменой, как предложил @sonfd, если замененный текст не содержит тегов HTML.

В общем, есть лучшие способы замены текстов. Реализуйте текстовый фильтр или обратный вызов pre_render/post_render. См. например https://www.drupal.org/forum/support/module-development-and-code-questions/2020-01-28/creating-a-custom-text-filter или же Как изменить содержимое страницы?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.