Wie rendere ich einen Feldwert einschließlich seines Formats?

9

Ich lese einen Feldwert und sein Format aus der Datenbank. Wie würde ich diesen Wert mit dem Format rendern?

Etwas auf
quelle

Antworten:

35

Während Sie viel Zeit damit verbringen könnten, die Funktionsweise der Feld-API zu analysieren, sollten Sie die Feld-API wirklich direkt zum Rendern von Feldinhalten verwenden, anstatt die Datenbank selbst abzufragen. Es gibt eine Menge Kapselung und Abstraktion, die Feldern hinzugefügt wird, die die alten Götter erwecken, wenn sie umgangen werden.

Wenn Sie mit der Feld-API das gesamte formatierte Feld mit Beschriftung und allen Werten verwenden möchten, möchten Sie Folgendes verwenden 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);

Wenn Sie nur den formatierten Wert eines Elements in einem Feld anzeigen möchten, müssen Sie Folgendes verwenden field_view_value():

// 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);

Wenn Sie einen anderen Formatierer als den für die Feldinstanz angegebenen Standard verwenden möchten, übergeben Sie ihn mit dem $displayParameter in entweder field_view_field()oder field_view_value():

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

quelle
Der $index (dritte Parameter von field_view_value ()) ist $ delta. Auf einem einzelnen $output = field_view_value('node', $node, 'field_foo', $fields[0]);$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
Wertefeld
0

Wenn Sie die API überprüfen, denke ich, dass Sie danach suchen. (Ich habe den Code sowieso nicht getestet)

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

// render the field
drupal_render($the_field);

Update: doppelte Antwort, kann mich einfach löschen. andere Antwort gepostet, während ich diese Antwort schreibe.

Gilzero
quelle
0

Wenn Sie das Modul Benutzerdefinierte Formatierer verwenden, vergessen Sie nicht, das Präfix 'custom_formatters_' vor dem Mashine-Namen Ihres Formatierers wie folgt einzufügen:

$display = array('type' => 'custom_formatters_my_formatter');
Dmitry
quelle
0

Sie können die Vorlagendatei anscheinend auch bearbeiten, um die semantische Ausgabe anzupassen:

1) Richten Sie einen benutzerdefinierten Datums-Fomat ein und geben Sie einen Computernamen wie "short_date_only" oder was auch immer ein. 2) Konfigurieren Sie die Anzeigeoptionen für einen Inhaltstyp, um dieses Format zu verwenden. 3) Überschreiben Sie die Feldvorlage in ein Feld - field_date_custom-content_type.tpl

Daniel
quelle