Рейтинг:-1

Просмотр обычного текстового поля, вызывающего проблемы с рендерингом для переводов

флаг cn

Наш раздел новостей имеет простое текстовое поле для заголовка статьи. Во время разработки это казалось хорошей идеей, однако после запуска некоторые языки, такие как французский, имеют специальные символы, которые теперь вызывают проблемы с рендерингом, например:

введите описание изображения здесь

Отображается как:

введите описание изображения здесь

Я понимаю, почему это происходит, поскольку текстовые поля «экранируются» по соображениям безопасности. Проблема здесь в ретроспективе:

  1. Мы не можем удалить поле или «преобразовать» поле в форматированный текст, поскольку для этого потребуется, чтобы все языки переделывали все статьи.
  2. Мы не можем добавлять какие-либо дополнительные фильтры в «представление», так как нет фильтра, позволяющего мне сказать «пожалуйста, разрешите определенные символы», так как в этом случае l' считается экранированным символом в базе данных.

Я предполагаю, что мой единственный вариант - попытаться переопределить значение в моем файле ветки: (views-view-fields--news.html.twig):

<div class="col-md-4">
    <div class="card newscard"> {{ fields.field_summary_image.content }}
        <div class="card-body">
            <h5 class="card-title">
                <a href="{{ fields.view_node.content|render|striptags|trim }}">{{ fields.field_article_title.content|render|striptags }}</a>
            </h5>
            <p>{{ fields.created.content|render|striptags|trim }}</p>
        </div>
    </div>
</div>

Однако я попытался получить необработанное значение, но не могу получить необработанное значение, поскольку это отображаемое «поле» (которое отображает обертку HTML вместе с содержимым).

Я также попытался переместить это в неформатированное представление (views-view-unformatted--news.html.twig):

<div class="card-deck" id="ajaxnewscontainer">
    {% for row in rows %}
        <div class="col-md-4">
            <div class="card newscard"> {{ fields.field_summary_image.content }}
                <div class="card-body">
                    <h5 class="card-title">
                        <a href="{{ fields.view_node.content|render|striptags|trim }}">{{ fields.field_article_title.content|render|striptags }}</a>
                    </h5>
                    <p>{{ fields.created.content|render|striptags|trim }}</p>
                </div>
            </div>
        </div>
    {% endfor %}
</div>

Однако в этом сценарии я не получаю никаких значений, так как выполнение {{dump(row) }} делает мои 32 ГБ ОЗУ бесполезными, поэтому я не могу определить, как получить элементы массива "row", чтобы я мог, надеюсь, получить " необработанное» значение fields.field_article_title.content|render|striptags

Любые идеи?

флаг cn
Я бы рекомендовал против этого подхода, это никогда не заканчивается хорошо. Вместо этого добавьте новое форматированное поле и напишите хук обновления, который переносит содержимое из старого в новое.
sonfd avatar
флаг in
Почему вы используете `|render|striptags|trim`? Afaik, это всегда будет заставлять вас видеть закодированные html-объекты.
4uk4 avatar
флаг cn
Но зачем вообще использовать `'`? Введите апостроф с помощью клавиатуры. В Drupal есть много текстовых полей, которые переведены, в первую очередь метки сущностей.
4uk4 avatar
флаг cn
@sonfd Да, наверное, проблема в этом. Это не так, как я подозревал. Перевод содержит апостроф в виде символа ASCII. Он преобразуется в объект HTML с помощью фильтра XSS по умолчанию, применяемого ко всем полям простого текста, а затем этот фильтр Twig экранирует его во второй раз.
4uk4 avatar
флаг cn
Таким образом, нормально переведенные текстовые поля не вызывают никаких проблем.
mauzilla avatar
флаг cn
Без |рендеринга поле пустое.
Рейтинг:2
флаг in

Я не думаю, что это имеет какое-либо отношение к переводам, кроме того, что ваш перевод - это версия узла, которая имеет апостроф в этом поле.

Проблема в том, что вы визуализируете свое поле с помощью |рендеринг|стриптэги|обрезка нравиться:

{{ fields.created.content|рендеринг|стриптэги|обрезка }}

Это всегда будет вызывать проблемы при отображении закодированных html-объектов.

От @4uk4 в комментарии выше:

Перевод содержит апостроф в виде символа ASCII, он преобразуется в объект HTML с помощью фильтра XSS по умолчанию, применяемого ко всем полям обычного текста, а затем этот фильтр Twig экранирует его во второй раз.

Чтобы решить, визуализируйте свое поле без использования |рендеринг|стриптэги|обрезка, то есть просто используйте:

{{поля.создано.контент}}
mauzilla avatar
флаг cn
Без |рендеринга результат будет пустым
sonfd avatar
флаг in
Используете ли вы `{{ fields.created.content }}` или `{{ fields.created.content|striptags|trim }}`. Последнее не сработает.

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

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