Puncte:-1

Vizualizați câmpul de text simplu care cauzează probleme de redare pentru traduceri

drapel cn

Secțiunea noastră de știri are un câmp de text simplu pentru antetul articolului. La momentul dezvoltării, aceasta părea o idee bună, totuși, după ce au fost lansate, unele limbi precum franceza au caractere speciale, ceea ce cauzează acum probleme de randare ca exemplu:

introduceți descrierea imaginii aici

Este redat ca:

introduceți descrierea imaginii aici

Înțeleg de ce se întâmplă acest lucru, deoarece câmpurile de text sunt „escape” din motive de securitate. Problema aici este una de retrospectivă:

  1. Nu putem șterge câmpul sau „convertim” câmpul într-un text formatat, deoarece ar fi necesar ca toate limbile să refacă toate articolele.
  2. Nu putem adăuga filtre suplimentare în „vizualizare”, deoarece nu există un filtru care să-mi permită să spun „vă rugăm să permiteți anumite caractere”, deoarece în acest caz l’ este considerat un caracter escape în baza de date.

Presupun că singura mea opțiune este să încerc și să înlocuiesc valoarea din fișierul meu twig: (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>

Totuși, am încercat să obțin valoarea brută, dar nu pot obține valoarea brută, deoarece acesta este un „câmp” redat (care redă HTML-ul de împachetare împreună cu conținutul).

De asemenea, am încercat să mut acest lucru în vizualizarea neformatată (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>

Cu toate acestea, în acest scenariu, nu primesc nicio valoare, deoarece efectuarea unui {{ dump(row) }} face ca cei 32 GB de RAM să fie inutili, așa că nu pot determina cum să obțin elementele matricei „rând”, astfel încât să pot ajunge să primesc „ valoarea brută a fields.field_article_title.content|render|striptags

Vreo idee?

drapel cn
Aș recomanda împotriva acestei abordări, nu se termină niciodată bine. În schimb, adăugați un câmp nou formatat și scrieți un cârlig de actualizare care transferă conținutul de la vechiul la cel nou.
sonfd avatar
drapel in
De ce redați cu `|render|striptags|trim`? Afaik, asta vă va face întotdeauna să vedeți entități html codificate.
4uk4 avatar
drapel cn
Dar de ce să folosiți `'` în primul rând? Tastați apostroful cu tastatura dvs. Există multe câmpuri de text simplu în Drupal care sunt traduse, în special etichete de entitate.
4uk4 avatar
drapel cn
@sonfd Da, aceasta este probabil problema. Nu este așa cum bănuiam. Traducerea conține apostroful ca caracter ASCII. Acesta este convertit într-o entitate HTML prin filtrul XSS implicit aplicat tuturor câmpurilor de text simplu și apoi este eliminat a doua oară de acest filtru Twig.
4uk4 avatar
drapel cn
Deci câmpurile de text simplu traduse în mod normal nu cauzează nicio problemă.
mauzilla avatar
drapel cn
Fără |rendare, câmpul este gol.
Puncte:2
drapel in

Nu cred că acest lucru are vreo legătură cu traducerile, în afară de traducerea dvs. este versiunea nodului care se întâmplă să aibă un apostrof în acest domeniu.

Problema este că vă redați câmpul cu |renda|striptags|tunde ca:

{{ fields.created.content|render|striptags|trim }}

Acest lucru va cauza întotdeauna probleme în cazul în care sunt afișate entitățile html codificate.

De la @4uk4 într-un comentariu de mai sus:

Traducerea conține apostroful ca caracter ASCII, acesta este convertit într-o entitate HTML prin filtrul XSS implicit aplicat tuturor câmpurilor de text simplu și apoi este eliminat a doua oară de acest filtru Twig.

Pentru a rezolva, redați câmpul fără a utiliza |renda|striptags|tunde, adică folosiți doar:

{{ fields.created.content }}
mauzilla avatar
drapel cn
Fără |randa rezultatul este gol
sonfd avatar
drapel in
Folosiți `{{ fields.created.content }}` sau `{{ fields.created.content|striptags|trim }}`. Acesta din urmă nu va funcționa.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.