Jak renderować wartość pola, w tym jego format?

9

Czytam wartość pola i jego format z bazy danych. Jak renderowałbym tę wartość w formacie?

Coś
źródło

Odpowiedzi:

36

Chociaż możesz poświęcić wiele czasu na analizowanie działania Field API, naprawdę powinieneś używać Field API bezpośrednio do renderowania zawartości pola, zamiast samodzielnie sprawdzać bazę danych. Istnieje wiele enkapsulacji i abstrakcji dodanych do pól, które obudzą Starych Bogów, jeśli zostaną ominięte.

Korzystając z interfejsu API pola, jeśli chcesz całe sformatowane pole, wraz z etykietą i wszystkimi wartościami, chcesz użyć 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);

Jeśli chcesz tylko wyświetlić sformatowaną wartość jednego elementu w polu, musisz użyć field_view_value(), co jest nieco bardziej zaangażowane:

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

Jeśli chcesz użyć formatowania inny niż domyślny dla określonej instancji pola, przekazać go za pomocą $displayparametru w jednej field_view_field()lub field_view_value():

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

źródło
$index (Trzeci parametr field_view_value ()) jest $ trójkąt. W polu z pojedynczą wartością będzie to 0. Więc możesz użyć $output = field_view_value('node', $node, 'field_foo', $fields[0]);lub$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro
0

sprawdzając API, myślę, że tego szukasz. (I tak nie testowałem kodu)

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

// render the field
drupal_render($the_field);

aktualizacja: zduplikowana odpowiedź, może mnie po prostu usunąć. inna odpowiedź wysłana podczas pisania tej odpowiedzi.

gilzero
źródło
0

Jeśli korzystasz z modułu Formatery niestandardowe , nie zapomnij dodać przedrostka „custom_formatters_” przed nazwą maszyny formatyzatora w następujący sposób:

$display = array('type' => 'custom_formatters_my_formatter');
Dmitry
źródło
0

Wygląda na to, że możesz również edytować plik szablonu, aby dostosować sposób jego wyświetlania semantycznego:

1) Skonfiguruj niestandardową datę i podaj nazwę maszyny, np. „Short_date_only” lub cokolwiek innego. 2) Skonfiguruj opcje wyświetlania dla typu zawartości, aby używał tego formatu. 3) Zastąp szablon pola czymś w rodzaju pola - field_date_custom-content_type.tpl

Daniel
źródło