render o imprimir imagen en un drupal 7 node.tpl?

16

Estoy tratando de crear un tema para un nodo con tpl y cuando intenté imprimir la imagen, no puedo encontrar la ruta de la imagen como en d6 ... ¿a qué función debo llamar para que la imagen salga correctamente ... Me refiero a algo como el tema ('')?

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
fuente

Respuestas:

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

Si desea cambiar la forma en que se muestra la imagen (dimensiones, enlaces, etc.), configúrelos en la pestaña Administrar visualización en la configuración de tipo de nodo.

También puede hacer un preset de imagen de caché como este:

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

¡Pero esa no es la forma recomendada!

si quieres construir URL desde URI,

<img src="<?php print file_create_url($node->field_image[LANGUAGE_NONE][0]['uri']); ?>" />
AyeshK
fuente
gracias, tu respuesta cubre todas las cosas. Esto debería estar en la documentación de drupal.org :)
Serjas
Siempre es una buena idea usar LANGUAGE_NONE en lugar de 'und'
qasimzee
Sé que estoy golpeando a un caballo muerto, pero si tomas el segundo enfoque, ¿cómo puedes asegurarte de obtener un resultado que no sea 404?
Cameron Kilgore
3

Para aquellos que usan el módulo file_entity (quizás con el módulo de medios ), puede que se pregunten cómo renderizar mediante programación archivos / imágenes:

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

Donde "field_image" es el nombre de su campo, y "summary" es su modo de vista.

alexkb
fuente
funciona para mí, pero necesitaba establecer el estilo en $ image_entity ['file'] ['# style_name'] nuevamente ...
rémy
No debe codificar la clave de idioma.
AlxVallejo
1

Si desea simplemente renderizar la imagen con el estilo de imagen establecido para esa imagen en la pantalla de administración: simplemente escriba <?php print_render($content['field_image']) ?>

Si desea mostrar la imagen con cualquier otro estilo de imagen que tenga SUPPOSE: 'sales_album', escriba:

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
fuente
1

Al usar el módulo de campo , descubrí que esto era mejor:

en la página - yourcontenttype.tpl.php:

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

El uso de field_view_field () proporciona ventajas adicionales mediante las cuales se puede establecer una variedad de configuraciones de visualización:

<?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
fuente
0
$img_url = $node->field_name['und'][$i]['uri'];
print image_style_url("style_name", $img_url);

$ies en caso de que tenga varias imágenes para mostrar. Puede usar un bucle for como:

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

y $imageCountbásicamente se declara arriba para el bucle como

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

¡Espero que esto ayude!

Rajeev Yadav
fuente