Como renderizo um valor de campo incluindo seu formato?

9

Estou lendo um valor de campo e seu formato no banco de dados. Como eu renderizaria esse valor com o formato?

SomethingOn
fonte

Respostas:

36

Embora você possa gastar muito tempo dissecando como a API de campo funciona, você realmente deve estar usando a API de campo diretamente para renderizar o conteúdo do campo em vez de consultar o banco de dados. Há muito encapsulamento e abstração adicionados aos campos que despertarão os Deuses Antigos se ignorados.

Usando a API do campo, se você deseja que todo o campo formatado seja completo, com rótulo e todos os valores, você deseja 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);

Se você quiser apenas exibir o valor formatado de um item em um campo, precisará usar o field_view_value()que é um pouco mais envolvido:

// 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 você deseja usar um formatador diferente do padrão especificado para a instância do campo, passe-o usando o $displayparâmetro em field_view_field()ou field_view_value():

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

fonte
O $index (terceiro parâmetro do field_view_value ()) é $ delta. Em um único campo de valor, seria 0. Portanto, você pode usar $output = field_view_value('node', $node, 'field_foo', $fields[0]);ou$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro 24/04/19
0

verificando api, acho que você está procurando por isso. (Eu não testei o código de qualquer maneira)

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

// render the field
drupal_render($the_field);

update: resposta duplicada, pode apenas me excluir. outra resposta postada enquanto escrevo esta resposta.

Gilzero
fonte
0

Se você usar o módulo Formatadores personalizados , não se esqueça de adicionar o prefixo 'custom_formatters_' antes do nome do mashine do seu formatador, como este:

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

Parece que você também pode editar o arquivo de modelo para ajustar como isso é gerado semanticamente:

1) Configure um formato de data personalizado e atribua um nome de máquina como "short_date_only" ou qualquer outra coisa. 2) Configure as opções de exibição para um tipo de conteúdo usar esse formato 3) Substitua o modelo de campo por algo como campo - field_date_custom-content_type.tpl

Daniel
fonte