Come tema un link?


8

In Drupal 7 questo era possibile.

$link = array(
  '#type'  => 'link',
  '#title' => t('My Title'),
  '#href'  => 'node/1',
);
drupal_render($link);

Ma ho provato questo con Drupal 8 e non produce nulla.

$link = array(
  '#type' => 'link',
  '#title' => t('test'),
  '#url' => 'node/1',
);
drupal_render($link);

Esiste un modo per renderizzare un collegamento senza dover chiamare direttamente il plugin Link o creare la mia funzione tema?

Sto utilizzando un formattatore per gruppi di campi, che deve generare un array di rendering.
L'uso di drupal_render()è obsoleto e non deve essere chiamato direttamente; Lo sto usando qui per rendere più chiaro il mio esempio.


In realtà questo dovrebbe funzionare. Che cosa significa non produrre nulla? Dove stampi questo HTML renderizzato ?? drupal_render () è deprecato. Chiama direttamente RenderService: \ Drupal :: service ('renderer') -> render ($ elements, $ is_recursive_call) Solo per generare il link puoi anche usare: Link :: fromTextAndUrl ($ text, Url $ url) Vedi il link classe .
rémy

Cosa vuoi a tema ??
rémy

Grazie per la risposta, ma come detto non voglio chiamare direttamente il plugin Link. Ho aggiornato la mia domanda con un po 'più di informazioni di base per capire il mio scenario.
leon.nk,

Ho aggiunto informazioni su ciò che sto temando alla domanda.
leon.nk,

Risposte:


8

Penso che il problema con il tuo codice Drupal 8 sia che "#url" necessita di un oggetto URL.

URL esterno

'#url' => Url::fromUri('https://www.drupal.org'),

URL interno da un percorso

'#url' => Url::fromRoute('entity.node.canonical', ['node' => 1]),

In Drupal 8 non devi renderti. Quando si esegue il porting del codice da Drupal 7, rimuovere tutto il rendering e restituire solo gli array di rendering.


Grazie mille, funziona! Sì, non sono drupal_render()direttamente, era solo per l'esempio.
leon.nk,


1

Ecco un esempio di come eseguire il rendering di un collegamento in Drupal 8 con una classe personalizzata. È un po 'strano, ma le opzioni vengono passate nell'URL, non nella funzione di collegamento.

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$url = Url::fromUri('http://www.example.com', $options);
$markup = \Drupal::l(t('Link Text Goes Here!'), $url);

Ciò è utile in un formattatore di campo, che prevede il markup restituito. Se lo stai facendo altrove, è meglio convertirlo in un elemento dell'array di rendering link.

use Drupal\Core\Url;

$options = array('attributes' => array('class' => 'my-custom-class'));
$build['examples_link'] = [
  '#title' => t('Link Text Goes Here!'),
  '#type' => 'link',
  '#url' => Url::fromUri('http://www.example.com', $options)
];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.