Come si visualizza un valore di campo compreso il suo formato?


9

Sto leggendo un valore di campo e il suo formato dal database. Come renderei quel valore con il formato?

Risposte:


36

Mentre potresti dedicare molto tempo a analizzare il funzionamento dell'API di campo, dovresti davvero utilizzare l'API di campo direttamente per eseguire il rendering del contenuto del campo invece di interrogare tu stesso il database. C'è un sacco di incapsulamento e astrazione aggiunti ai campi che risveglieranno gli Dei antichi se bypassati.

Utilizzando l'API Field, se si desidera l'intero campo formattato, completo di etichetta e tutti i valori, si desidera utilizzare field_view_field():

$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');

// $output is a render array, so it needs to be rendered first
print render($output);

Se vuoi solo visualizzare il valore formattato di un elemento in un campo, devi usare field_view_value(), che è un po 'più coinvolto:

// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');

// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);

print render($output);

Se si desidera utilizzare un formattatore diverso da quello predefinito specificato per l'istanza di campo, passarlo utilizzando il $displayparametro in uno field_view_field()o field_view_value():

$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);

Il $index (terzo parametro di field_view_value ()) è $ delta. Su un singolo campo valore questo sarebbe 0. Quindi, puoi usare $output = field_view_value('node', $node, 'field_foo', $fields[0]);o$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro

0

controllando api, penso che tu stia cercando questo. (Non ho ancora testato il codice)

$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);

// render the field
drupal_render($the_field);

aggiornamento: risposta duplicata, potrebbe semplicemente cancellarmi. altra risposta pubblicata mentre scrivo questa risposta.


0

Se usi il modulo Formatter personalizzati non dimenticare di aggiungere il prefisso "custom_formatters_" prima del nome del mashine del tuo formatter in questo modo:

$display = array('type' => 'custom_formatters_my_formatter');

0

Sembra che tu possa anche modificare il file modello per regolare il modo in cui questo viene emesso semanticamente:

1) Imposta una data personalizzata e assegna un nome di macchina come "short_date_only" o altro. 2) Configurare le opzioni di visualizzazione per un tipo di contenuto per utilizzare quel formato 3) Sostituire il modello di campo in qualcosa di simile a field - field_date_custom-content_type.tpl

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.