it-swarm.com.de

Wie konvertiere ich Sonderzeichen in HTML in twig

Ich habe einige Listenelemente in drupal 8, die von der Vorlage item_list Erstellt wurden. Ich sende einige mit <a> Markierte Daten an die Vorlage item_list. Meine Idee war, die Ausgabe als <a href="/this-is-new.html">This is new page</a> Zu erhalten.

Die Ausgabe wird jedoch als <li>&lt;a href="/this-is-new.html"&gt;This is new page&lt;/a&gt;</li> Zurückgegeben.

Ich muss dies in einer twig - Vorlage drucken. Bei der Ausgabe wurde sie jedoch als Zeichenfolge in der Vorlage und nicht als HTML-Ankertag gerendert. Ich musste einen Link zu einer anderen Seite in anzeigen Vorlage. Aber alles, was ich bekomme, ist eine Zeichenfolge mit dem <a href="/this-is-new.html">This is new page</a>. Was soll ich tun?

5
i am batman

HINWEIS: Dies sollte vermieden werden, da es als schlechte Praxis angesehen wird, wie in den Kommentaren erwähnt, und hier als zu belassen ist Beispiel vermieden werden

Versuchen Sie dies in Ihrer twig Vorlage)

  {{ var|raw }}

dabei ist var die zu druckende Variable.

Weitere Informationen hier

3
GiorgosK

Versuchen Sie es mit convert_encoding ('UTF-8', 'HTML-ENTITIES') twig Filter. Zum Beispiel {{item | convert_encoding ('UTF-8', 'HTML-ENTITIES')}} .

2
Aditya Joshi

Um ein HTML-Markup an eine Vorlage zu senden, verwenden Sie ein #markup Renderelement

$variables['link'] = [
  '#markup' => '<a href="/this-is-new.html">This is new page</a>',
];

damit die HTML-Tags nicht maskiert werden, wenn Sie die Variable in twig ausgeben:

{{ link }}

Der Link hier ist nur ein Beispiel. Es gibt bessere Möglichkeiten, Links zu erstellen, siehe Wie erstelle ich einen Link?

2
4k4

Die Ausgabe wird jedoch als <li>&lt;a href="/this-is-new.html"&gt;This is new page&lt;/a&gt;</li> Zurückgegeben.

Der Grund dafür ist, dass Twig wird automatisch aus Ihrem HTML-Code entfernt. List erlaubt nur listenbezogene HTML-Tags wie <li>.

Ich habe einige Listenelemente in drupal 8

Meine Idee war, die Ausgabe als <a href="/this-is-new.html">This is new page</a> Zu erhalten.

Verwenden Sie List nicht als Feldtyp, sondern Link und setzen Sie es auf unbegrenzt .

(enter image description here


Wenn Sie nun einen neuen Knoten hinzufügen:

(enter image description here

1
No Sssweat

Sie können Markup class Verwenden, um ein Objekt zu definieren, das sichere Zeichenfolgen durch das Render-System leitet.

1.) Sie müssen zuerst eine TwigExtension.php-Klasse in einem Modul erstellen und eine Funktion definieren, die tatsächlich eine formatierte Zeichenfolge zurückgibt.

2.) Verwenden Sie diese Funktion in einer Ihrer twig - Dateien, um formatierte Zeichenfolgen zu rendern.

3.) Erstellen Sie den Cache mit Drush cr Neu.

-> Erstellen Sie eine Datei module_name.services.yml unter modules/module_name :

services:
  module_name.twig.TwigExtension:
    class: Drupal\module_name\TwigExtension
    tags:
      - {name: twig.extension}

-> Erstellen Sie eine TwigExtension.php unter modules/module_name/src/TwigExtension.php :

<?php

namespace Drupal\module_name;

use Drupal\Core\Render\Markup;

/**
 * Class DefaultService.
 *
 * @package Drupal\module_name
 */
class TwigExtension extends \Twig_Extension {

  /**
   * {@inheritdoc}
   * This function must return the name of the extension. It must be unique.
   */
  public function getName() {
    return 'block_display';
  }

  /**
   * In this function we can declare the extension function
   */
  public function getFunctions() {
    return array(
      new \Twig_SimpleFunction('render_string', array($this, 'render_string'), array('is_safe' => array('html'))),
    );
  }

  /**
   * Function to decode html special chars
   */
  public function render_string($string) {
    $render_string = Markup::create($string);
    return $render_string;
  }

-> ** Fügen Sie twig Funktion in Ihre twig Datei: **) ein

{% set str = render_string('<a href="/this-is-new.html">This is new page</a>') %}
....
....
{{ str }}

Hoffe, das wird dir helfen.

1
Ashish Deynap