2015-12-28 11 views
9

sto cercando di recuperare l'URL ei Titolo valori di una Link field in Drupal 8.Estrai URL e titolo dal campo link in Drupal 8?

Nel mio controller personalizzato, posso recuperare i nodi con:

$storage = \Drupal::entityManager()->getStorage('node'); 
$nids = $storage->getQuery() 
    ->condition('type', 'partners') 
    ->condition('status', 1) 
    ->execute(); 

$partners = $storage->loadMultiple($nids); 

Quando ho ciclo throught tutti i miei nodi, di pre-elaborazione vars darò al mio punto di vista, vorrei recuperare l'URL e il Titolo.

foreach ($partners as $key => $partner) { 
    $variables['partners'][] = array(
     'image' => $partner->field_logo->entity->url(), 
     'url' => $partner->field_link->value, // Can't retrieve values of link field 
    ); 
} 

Purtroppo, non ho trovato come recuperare il URL e la Titolo di field_link.

Grazie per il vostro aiuto.

risposta

16

a livello di nodo, all'interno del vostro template Twig è possibile utilizzare:

{{ content.field_link.0['#url'] }} & {{ content.field_link.0['#title'] }}

Ad esempio:

<a href="{{ content.field_link.0['#url'] }}">{{ content.field_link.0['#title'] }}</a>

field_link essere il nome del campo collegamento in questione.

+0

Ho sovrascritto 'views-view-fields.html.twig' dove voglio estrarre la parte' URL' da 'title' e assegnarla a un collegamento separato. Ho provato due ipotesi: '{{fields.title.content.0 ['# url']}}' e '{{fields.title.content ['# url']}}'. Tuttavia nessuno di quelli ha funzionato :) Come posso fare questo? –

+0

Penso che sia necessario '| render 'il campo, questo sembra funzionare per me:' {{fields.title.content.0 [' # url '] | render}} 'per ottenere l'URL effettivo – bdanin

5

Ho appena trovato la soluzione ...

$partner->field_lien->uri // The url 
$partner->field_lien->title // The title 

Il mio male, spero che potrebbe aiutare qualcuno.

+1

Come posso ottenere URI utilizzando la sintassi Twig? –

+1

@FredK For Twig: '$ partner.field_lien.uri' – Andrea

+3

+1, ma come diavolo hai raggiunto questa informazione? C'è una documentazione ovunque riesca a trovare un elenco di ogni attributo per ogni tipo di campo. esempio: link> uri/titolo/..., testo> valore? –

4

solo di spalle a quanto sopra, se si dispone di un collegamento esterno,

$node->field_name->uri 

vi darà l'URL, ma se si tratta di un interno potrebbe essere necessario modificare un po 'di più:

use Drupal\Core\Url; 

$mylink = Url::fromUri($node->field_name[0]->uri); 
$mylink->toString(); 
+1

Grazie per il tuo contributo. Infatti, è possibile recuperare l'URL diretto con ** $ nodo-> nome_campo-> entità-> url(); ** Spero di aiutarti. –

0

Questo funziona per me in ramoscello:

content.field_link_name.0['#title']  // title 
content.field_link_name.0['#url_title'] // url value 

* si dovrebbe usare: "testo del link e l'URL separato" widget di display

1

Aggiornato per Drupal 8

Per ottenere l'url tutto quello che dovete fare è:

{{ content.field_link_name[0]['#url'] }} 

per ottenere il testo del link:

{{ content.field_link_name[0]['#title'] }} 
0

Sto facendo questa separazione di collegamento per i campi ECK e questa soluzione mi ha davvero aiutato.Ho aggiornato il codice per i campi ECK per applicare stile in linea nel file di ramoscello in questo modo:

<a style="color: {{ entity.field_link_color[0] }};" href="{{ entity.field_link[0]['#url'] }}"> {{ entity.field_link[0]['#title'] }} </a>

per ottenere l'URL:
{{ entity.field_link[0]['#url'] }}

Per ottenere titolo del link:
{{ entity.field_link[0]['#title'] }}

0

È possibile eseguire il rendering dell'ura o del testo di un campo di collegamento direttamente nel modello di ramoscello. Nel caso di un nodo è possibile utilizzare una delle seguenti all'interno del file modello ramoscello (assume il nome della macchina del vostro campo di collegamento è field_link):

{{ node.field_link.uri }} 

{{ node.field_link.title }}