¿Cómo renderizo un valor de campo incluyendo su formato?

9

Estoy leyendo un valor de campo y su formato de la base de datos. ¿Cómo representaría ese valor con el formato?

Algo
fuente

Respuestas:

36

Si bien podría pasar mucho tiempo diseccionando cómo funciona la API de campo, realmente debería usar la API de campo directamente para representar el contenido del campo en lugar de consultar la base de datos usted mismo. Hay una gran cantidad de encapsulación y abstracción agregada a los campos que despertarán a los Dioses Antiguos si se omiten.

Usando la API de campo, si desea todo el campo formateado, completo con la etiqueta y todos los valores, desea usar 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);

Si solo desea mostrar el valor formateado de un elemento en un campo, debe usarlo field_view_value(), que es un poco más complicado:

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

Si desea utilizar un formateador que no sea el predeterminado especificado para la instancia de campo, páselo usando el $displayparámetro en field_view_field()o field_view_value():

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

fuente
El $index (tercer parámetro de field_view_value ()) es $ delta. En un campo de valor único, esto sería 0. Entonces, puede usar $output = field_view_value('node', $node, 'field_foo', $fields[0]);o$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro
0

marcando la API, creo que estás buscando esto. (No he probado el código de todos modos)

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

// render the field
drupal_render($the_field);

actualización: respuesta duplicada, solo puede eliminarme. otra respuesta publicada mientras escribo esta respuesta.

gilzero
fuente
0

Si usa los Formateadores personalizados del módulo , no olvide agregar el prefijo 'custom_formatters_' antes del nombre de mashine de su formateador como este:

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

Parece que también puede editar el archivo de plantilla para ajustar cómo se genera esto semánticamente:

1) Configure una fecha personalizada y asigne un nombre de máquina como "short_date_only" o lo que sea. 2) Configure las opciones de visualización para un tipo de contenido para usar ese formato 3) Anule la plantilla de campo en algo como field - field_date_custom-content_type.tpl

Daniel
fuente