Estou lendo um valor de campo e seu formato no banco de dados. Como eu renderizaria esse valor com o formato?
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 $display
parâmetro em field_view_field()
ou field_view_value()
:
$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);
$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]);
verificando api, acho que você está procurando por isso. (Eu não testei o código de qualquer maneira)
update: resposta duplicada, pode apenas me excluir. outra resposta postada enquanto escrevo esta resposta.
fonte
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:
fonte
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
fonte