Wie erhalte ich die richtige URL eines Bildfelds?

7

Ich versuche, die URL eines Bildfelds mit dem folgenden Code auszudrucken.

<img src="<?php echo $field_company_logo['und'][0]['uri']; ?>" alt="<?php echo $company[0]['#markup']; ?>" />

Der Code gibt mir eine URI wie public: //company-logos/image.png, wenn ich sites / default / files / company-logos / image.png benötigen würde.

Welchen Code sollte ich zum Drucken des Bildpfads verwenden (dh sites / default / files / company-logos / image.png)?

Joe Taylor
quelle

Antworten:

20

Sie möchten die Funktion drupal_realpath () verwenden, um den URI in den tatsächlichen Dateisystempfad zu konvertieren.

echo drupal_realpath($field_company_logo['und'][0]['uri']);

Sie können auch file_create_url () verwenden , um die tatsächliche URL zum Bild abzurufen, im Gegensatz zu einem lokalen Dateipfad.

Der richtige Weg, ein Bild zu rendern, besteht darin, es zu durchlaufen theme_image():

echo theme('image', array(
  'path' => file_create_url($field_company_logo['und'][0]['uri']),
  'alt' => check_plain($company[0]['#markup']),
));

Außerdem ist der Zugriff auf Felddaten so, wie Sie es tun, nicht die bevorzugte Methode. Schauen Sie sich field_get_items () und das detaillierte Beispiel im Blogeintrag Rendering Drupal Fields (der richtige Weg) an .

Yuriy Babenko
quelle
2
+1 für die Verwendung der Theme-Funktion, obwohl ich nicht glaube, dass Sie drupal_realpath () mehr wollen würden. Die Designfunktion transformiert den URI automatisch.
Les Lim
file_create_url hat für mich gearbeitet, danke! realpath gab mir die absolute URL, die ich nicht rendern würde.
Joe Taylor
Sie können den Stream-Pfad direkt übergeben (public: // ...) und er generiert automatisch den richtigen Pfad.
Eduardo Chongkan
10

Wenn Sie buchstäblich nur einen URI in eine tatsächliche URL umwandeln möchten, möchten Sie die Funktion file_create_url () , die wie folgt verwendet wird:

$url = file_create_url($uri);

Möglicherweise fällt es Ihnen jedoch leichter, eine Themenfunktion zu verwenden, wie Yuriy Babenko vorschlägt:

$image_vars = array(
  'path' => $field_company_logo['und'][0]['uri'],
  'alt' => $company[0]['#markup'],
);
echo theme('image', $image_vars);

Sie können dies einfach anpassen, um stattdessen theme_image_style () zu verwenden, wenn Sie eine Größenableitung Ihres Bildes wünschen.

Les Lim
quelle
2

Sie können das Image URL Formatter- Modul verwenden. Sie können das Feldformat ändern, um nur die URL zu erhalten:

Drupal Feldeinstellungen

Bonus: Es funktioniert auch mit Ansichten:

Geben Sie hier die Bildbeschreibung ein

Jsalinas
quelle