rendre ou imprimer une image dans un node.tpl drupal 7?

16

J'essaie de thème un nœud avec tpl et quand j'ai essayé d'imprimer l'image, je ne peux pas trouver le chemin de l'image comme dans d6 .. quelle fonction je dois appeler pour sortir correctement l'image .. Je veux dire quelque chose comme le thème ('')?

Array
(
    [und] => Array
        (
            [0] => Array
                (
                    [fid] => 13
                    [alt] => 
                    [title] => 
                    [width] => 416
                    [height] => 335
                    [uid] => 1
                    [filename] => Capture2.PNG
                    [uri] => public://Capture2.PNG
                    [filemime] => image/png
                    [filesize] => 215377
                    [status] => 1
                    [timestamp] => 1346837738
                    [rdf_mapping] => Array
                        (
                        )

                )

        )

)
Serjas
la source

Réponses:

33
<?php print render($content['field_image']); ?>

Si vous souhaitez modifier la façon dont l'image est affichée (dimensions, lien, etc.), définissez-les dans l'onglet Gérer l'affichage dans les paramètres de type de nœud.

Vous pouvez également effectuer un préréglage imagecache comme celui-ci:

<?php
print theme('image_style', array('path' => $node->field_image[LANGUAGE_NONE][0]['uri'], 'style_name' => [STYLE NAME]));
?>

Mais ce n'est pas la voie recommandée!

si vous souhaitez créer une URL à partir de l'URI,

<img src="<?php print file_create_url($node->field_image[LANGUAGE_NONE][0]['uri']); ?>" />
AyeshK
la source
merci, votre réponse couvre tout. Cela devrait être dans la documentation drupal.org :)
Serjas
C'est toujours une bonne idée d'utiliser LANGUAGE_NONE au lieu de 'und'
qasimzee
Je sais que je bat un cheval mort, mais si vous adoptez la deuxième approche, comment pouvez-vous vous assurer d'obtenir un résultat qui ne correspond pas à 404?
Cameron Kilgore
3

Pour ceux qui utilisent le module file_entity (peut-être avec le module média ), vous vous demandez peut-être comment rendre par programme des fichiers / images:

$image = (object) $node->field_image[ LANGUAGE_NONE ][0];
$image_entity = file_view($image, "summary");
echo drupal_render($image_entity);

Où "field_image" est le nom de votre champ et "summary" est votre mode d'affichage.

alexkb
la source
fonctionne pour moi, mais il fallait à nouveau définir le style sur $ image_entity ['file'] ['# style_name'] ..
rémy
Vous ne devez pas coder en dur la clé de langue.
AlxVallejo
1

Si vous souhaitez simplement rendre l'image avec le style d'image défini pour cette image dans l'affichage de gestion: il suffit de taper <?php print_render($content['field_image']) ?>

Si vous souhaitez afficher l'image avec un autre style d'image, vous avez SUPPOSE: 'sales_album', puis tapez:

list($albumImage) = field_get_items('node', $album, 'uc_product_image');

$albumImageUrl = file_create_url($albumImage['uri']);

$style_array = array('path' => $albumImage['uri'], 'style_name' => 'sales_album');

$render_album_image = theme('image_style', $style_array);

print $render_album_image;
Himanshu Pathak
la source
1

Lors de l'utilisation du module de terrain , j'ai trouvé que c'était mieux:

dans la page - yourcontenttype.tpl.php:

<?php
  $this_field_image = field_view_field('node',$node,'field_image');
  print render($this_field_image);?>
?>

l'utilisation de field_view_field () offre des avantages supplémentaires grâce auxquels on peut définir un tableau de paramètres d'affichage:

<?php
  $hide_labels = array('label'=>'hidden');
  $this_field_image = field_view_field('node',$node,'field_image', $hide_labels);
  print render($this_field_image);?>
?>

https://api.drupal.org/api/drupal/modules%21field%21field.module/function/field_view_field/7.x

n8thanael
la source
0
$img_url = $node->field_name['und'][$i]['uri'];
print image_style_url("style_name", $img_url);

$iest dans le cas où vous avez plusieurs images à afficher. Vous pouvez utiliser une boucle for comme:

for($i=0;$i < $imageCount; $i++) { /*the above code*/ }

et $imageCountest essentiellement déclaré ci-dessus pour la boucle comme

$images = array();<br>
$imageCount= count($node->field_image['und']);

J'espère que cela t'aides!

Rajeev Yadav
la source