2016-06-06 9 views
1

Ich habe eine harte Zeit, einen Link über die Drupal 8 Render-Struktur zu stylen. Dieser Link muss in meinem benutzerdefinierten Modul angezeigt:Include HTML-Text in einem Drupal 8 generierten Link

$add_link = \Drupal::l('<i class="fa fa-cog"></i>' . t('Add new project'), $url); 

So zwischen de Tags ich eine Schriftart ehrfürchtiges Symbol vor dem Text. Aber Drupal drucken alle HTML-out als lesbaren Text.

Ich bemerke auch, dass die Funktion l() in Drupal 8 veraltet ist. Also, was ist der beste Weg, dies in der Drupal 8 Render-Struktur zu tun?

Antwort

1

Nahm mich eine Weile, aber das sollte funktionieren. Ihr Code hat eine $url Variable, die gut funktionieren kann, aber dieser Code unten zeigt auch, wie ich meine $url bekam.

$url = new Url(
    'entity.eab_contact_entity.edit_form', array(
    'eab_contact_entity' => $entity->id(), 
) 
); 
$icon_text = $this->t('<i class="fa fa-pencil"></i>'); 
$edit_link = \Drupal::service('link_generator')->generate($icon_text, $url); 

Es stellt sich heraus, dass jeder Text, der in einen Link ‚sicher‘ sein muss geht, so dass Schadcode nicht usw. injiziert werden kann Wenn Sie neugierig sind, ist es endlich hier diskutiert wurde: https://www.drupal.org/node/2273923

der wichtigste Punkt, obwohl, und was für mich macht die obige Code Arbeit und beantwortet Ihre Frage ist die $this->t()'<i class="fa fa-pencil"></i>' das Schriftart-awesome String umgibt. Das macht es "sicher" und die erzeugte Verknüpfung hat den von uns gewünschten HTML-Code, anstatt nur den HTML-Text auszudrucken.

Schließlich, falls Sie Hilfe suchen, um Ihre URL zu generieren, hat this tutorial eine Menge Hinweise.

1

Wenn, wie ich, Sie machen Array von #type => 'link' verwenden wollte und enthalten ein Symbol mit ihm, dann können Sie folgendes tun:

<?php 
use Drupal\Core\Render\Markup; 
use Drupal\Core\Url; 

$form['actions']['reset_password'] = [ 
    '#type' => 'link', 
    '#title' => Markup::create('<span class="glyphicon glyphicon-cog"></span> Forgot/Reset Password'), 
    '#url' => Url::fromRoute('user.pass'), 
];