Comment rendre une valeur de champ avec son format?

9

Je lis une valeur de champ et son format dans la base de données. Comment pourrais-je rendre cette valeur avec le format?

Quelque chose
la source

Réponses:

36

Bien que vous puissiez passer beaucoup de temps à disséquer le fonctionnement de l'API de champ, vous devriez vraiment utiliser l'API de champ directement pour rendre le contenu du champ au lieu d'interroger la base de données vous-même. Il y a beaucoup d'encapsulation et d'abstraction ajoutés aux champs qui réveilleront les anciens dieux s'ils sont contournés.

En utilisant l'API de champ, si vous voulez que tout le champ formaté, complet avec étiquette et toutes les valeurs, vous souhaitiez utiliser 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 vous souhaitez simplement afficher la valeur formatée d'un élément dans un champ, vous devez utiliser field_view_value()ce qui est un peu plus complexe:

// 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 vous souhaitez utiliser un formateur autre que celui par défaut spécifié pour l'instance de champ, passez-le en utilisant le $displayparamètre dans field_view_field()ou field_view_value():

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

la source
Le $index (troisième paramètre de field_view_value ()) est $ delta. Sur un seul champ de valeur, ce serait 0. Donc, vous pouvez utiliser $output = field_view_value('node', $node, 'field_foo', $fields[0]);ou$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro
0

en vérifiant l'api, je pense que vous cherchez cela. (Je n'ai pas testé le code de toute façon)

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

// render the field
drupal_render($the_field);

mise à jour: réponse en double, peut juste me supprimer. autre réponse affichée pendant que j'écris cette réponse.

gilzero
la source
0

Si vous utilisez le module Custom Formatters, n'oubliez pas d'ajouter le préfixe 'custom_formatters_' avant le nom de mashine de votre formateur comme ceci:

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

Il semble que vous pouvez également modifier le fichier de modèle pour ajuster la façon dont il est sorti sémantiquement:

1) Configurez une date personnalisée et donnez un nom de machine comme "short_date_only" ou autre. 2) Configurer les options d'affichage d'un type de contenu pour utiliser ce format 3) Remplacer le modèle de champ par quelque chose comme field - field_date_custom-content_type.tpl

Daniel
la source