Submitted by yoyojo on
bonjour,
en mode "vue" on peut voir le libellé et la valeur des champ.
Quand un champ est vide , rien n'est affiché même pas le libellé.
Je suis allé dans le fichier \modules\field\field.api.php
et modifier la fonction "hook_field_attach_view_alter" comme ca:
//-----------------------------------------------------------------
function hook_field_attach_view_alter(&$output, $context) {
// We proceed only on nodes.
if ($context['entity_type'] != 'node' || $context['view_mode'] != 'full') {
return;
}
$node = $context['entity'];
// Load all instances of the fields for the node.
$instances = _field_invoke_get_instances('node', $node->type, array('default' => TRUE, 'deleted' => FALSE));
foreach ($instances as $field_name => $instance) {
// Set content for fields they are empty.
if (empty($node->{$field_name})) {
$display = field_get_display($instance, 'full', $node);
// Do not add field that is hidden in current display.
if ($display['type'] == 'hidden') {
continue;
}
// Load field settings.
$field = field_info_field($field_name);
// Set output for field.
$output[$field_name] = array(
'#theme' => 'field',
'#title' => $instance['label'],
'#label_display' => 'above',
'#field_type' => $field['type'],
'#field_name' => $field_name,
'#bundle' => $node->type,
'#object' => $node,
'#items' => array(),
'#entity_type' => 'node',
'#weight' => $display['weight'],
0 => array('#markup' => ' '),
);
}
}
}
//-----------------------------------------------------------------
mais ca ne change pas le comportement par défaut...
Avez-vous une autre solution?
Merci d'avance
Bonjour, http://api.drupal.or
Permalien Soumis par flebrenn le 12 Juin, 2012 - 17:36
Bonjour,
http://api.drupal.org/api/drupal/modules!node!node.tpl.php/7
Je te déconseille de faire des modifications directement sur \modules\field\field.api.php afin que ton site reste fonctionnel après les mises à jour du core.
Il faut que tu regardes du côté des variables qui sont exploitables au niveau du tpl.
Tu peux utiliser le module devel afin de faire un dpm($node) ou dpm($content) pour voir les variables disponibles dans ton tpl.
Peut-être que tu peux forcer l'affichage du label avec $content['field_example']... A tester
"$content: An array of node items. Use render($content) to print them all, or print a subset such as render($content['field_example']). Use hide($content['field_example']) to temporarily suppress the printing of a given element."
Cordialement,
en d’autres termes est ce que
Permalien Soumis par yoyojo le 12 Juin, 2012 - 17:43
en d'autres termes est ce que ca veut dire que je dois développer un module entier et y affecter mon hook pour mon type de node?
Tu n’es pas obligé de créer
Permalien Soumis par flebrenn le 12 Juin, 2012 - 18:27
Tu n'es pas obligé de créer un module, tu peux implémenter la fonction montheme_preprocess_node dans le template.php de ton dossier de thème. Ou de manière plus rapide mais pas très propre dans les tpl de node http://drupal.org/node/1089656