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

7

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

Joe Taylor
la source

Réponses:

20

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 la parcourir 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 œil à field_get_items () et à l'exemple détaillé de l' entrée de blog Rendu des champs Drupal (dans le bon sens) .

Yuriy Babenko
la source
2
+1 pour l'utilisation de la fonction de thème, bien que je ne pense pas que vous souhaitiez plus drupal_realpath (). La fonction de thème transformera automatiquement l'URI.
Les Lim
file_create_url a fonctionné pour moi, merci! realpath m'a donné l'URL absolue qui ne serait pas rendue.
Joe Taylor
Vous pouvez passer le chemin du flux directement (public: // ...) et il générera automatiquement le bon chemin.
Eduardo Chongkan
10

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.

Les Lim
la source
2

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

Paramètres de champ Drupal

Bonus: cela fonctionne aussi avec les vues:

entrez la description de l'image ici

Jsalinas
la source