J'essaie d'imprimer l'URL d'un champ d'image en utilisant le code suivant.
<img src="<?php echo $field_company_logo['und'][0]['uri']; ?>" alt="<?php echo $company[0]['#markup']; ?>" />
Le code me donne un URI comme public: //company-logos/image.png quand j'aurais besoin de sites/default/files/company-logos/image.png.
Quel code dois-je utiliser pour imprimer le chemin de l'image (c'est-à-dire sites/default/files/company-logos/image.png)?
Vous souhaitez utiliser la fonction drupal_realpath () pour convertir l'URI en chemin d'accès réel du système de fichiers.
echo drupal_realpath($field_company_logo['und'][0]['uri']);
Vous pouvez également utiliser file_create_url () pour obtenir l'URL réelle de l'image, par opposition à un chemin de fichier local.
Et la bonne façon de rendre une image est de l'exécuter via theme_image()
:
echo theme('image', array(
'path' => file_create_url($field_company_logo['und'][0]['uri']),
'alt' => check_plain($company[0]['#markup']),
));
De plus, accéder aux données de terrain comme vous le faites n'est pas la méthode préférée. Jetez un coup d'œil à field_get_items () et à l'exemple détaillé dans les Rendering Drupal Fields (the way way)) entrée de blog.
Si vous voulez littéralement transformer un URI en une URL réelle, alors vous voulez la fonction file_create_url () , qui est utilisée comme ceci:
$url = file_create_url($uri);
Mais vous pourriez trouver plus facile d'utiliser une fonction de thème, comme le suggère Yuriy Babenko:
$image_vars = array(
'path' => $field_company_logo['und'][0]['uri'],
'alt' => $company[0]['#markup'],
);
echo theme('image', $image_vars);
Vous pouvez facilement l'adapter pour utiliser theme_image_style () à la place, si vous voulez un dérivé dimensionné de votre image.
Vous pouvez utiliser le module Image URL Formatter . Il permet de changer le format du champ afin d'obtenir uniquement l'URL:
Bonus: cela fonctionne aussi avec les vues: