J'ai quelques éléments de liste dans drupal 8 qui a créé par item_list
modèle. J'envoie <a>
données balisées dans le item_list
modèle. Mon idée était d'obtenir la sortie sous la forme <a href="/this-is-new.html">This is new page</a>
.
Mais il renvoie la sortie sous la forme <li><a href="/this-is-new.html">This is new page</a></li>
.
J'ai besoin d'imprimer ceci dans un modèle twig. Mais avec la sortie, je l'ai rendu sous forme de chaîne dans le modèle et non comme une balise d'ancrage html. Je devais afficher un lien vers une autre page dans Mais tout ce que je reçois est une chaîne avec le <a href="/this-is-new.html">This is new page</a>
. Que devrais-je faire?
REMARQUE: cela devrait être évité car il est considéré comme une mauvaise pratique comme mentionné dans les commentaires, laissant ici un pour être évité exemple
À l'intérieur de votre modèle twig
{{ var|raw }}
où var
est la variable en cours d'impression.
Pour plus d'informations ici
Essayez d'utiliser convert_encoding ('UTF-8', 'HTML-ENTITIES') twig filter. Par exemple {{item | convert_encoding ('UTF-8', 'HTML-ENTITIES')}} .
Pour envoyer un balisage html à un modèle, utilisez un #markup
élément de rendu
$variables['link'] = [
'#markup' => '<a href="/this-is-new.html">This is new page</a>',
];
afin que les balises html ne soient pas échappées lorsque vous sortez la variable dans twig:
{{ link }}
Le lien ici n'est qu'un exemple. Il existe de meilleures façons de créer des liens, voir Comment créer un lien?
Mais il renvoie la sortie sous la forme
<li><a href="/this-is-new.html">This is new page</a></li>
.
La raison en est que Twig échappe automatiquement votre HTML. La liste n'autorise que les balises HTML liées à la liste, comme <li>
.
J'ai quelques éléments de liste dans drupal 8
Mon idée était d'obtenir la sortie sous la forme
<a href="/this-is-new.html">This is new page</a>
N'utilisez pas List comme type de champ, utilisez plutôt Link et définissez-le sur illimité .
Maintenant, lorsque vous ajoutez un nouveau nœud:
Vous pouvez utiliser Markup class
qui définit un objet qui passe des chaînes sécurisées à travers le système de rendu.
1.) Vous devez d'abord créer une classe TwigExtension.php à l'intérieur d'un module et définir une fonction qui retournera réellement une chaîne formatée.
2.) Utilisez cette fonction dans l'un de vos fichiers twig pour rendre les chaînes formatées.
3.) Reconstruisez le cache en utilisant Drush cr
.
-> Créez un fichier module_name.services.yml sous modules/module_name:
services:
module_name.twig.TwigExtension:
class: Drupal\module_name\TwigExtension
tags:
- {name: twig.extension}
-> Créez un TwigExtension.php sous 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;
}
-> ** Insérez la fonction twig dans votre fichier twig: **
{% set str = render_string('<a href="/this-is-new.html">This is new page</a>') %}
....
....
{{ str }}
J'espère que cela vous aidera.