web-dev-qa-db-fra.com

Comment obtenir l'URL correcte d'un champ d'image?

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)?

7
Joe Taylor

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.

20
Yuriy Babenko

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.

10
Les Lim

Vous pouvez utiliser le module Image URL Formatter . Il permet de changer le format du champ afin d'obtenir uniquement l'URL:

Drupal field settings

Bonus: cela fonctionne aussi avec les vues:

enter image description here

2
Jsalinas