Как получить правильный URL-адрес поля изображения?

7

Я пытаюсь распечатать URL-адрес поля изображения, используя следующий код.

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

Код дает мне такой URI, как public: //company-logos/image.png, когда мне нужны сайты / default / files / company-logos / image.png.

Какой код следует использовать для печати пути к изображению (например, sites / default / files / company-logos / image.png)?

Джо Тейлор
источник

Ответы:

20

Вы хотите использовать функцию drupal_realpath () для преобразования URI в фактический путь к файловой системе.

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

Вы также можете использовать file_create_url (), чтобы получить фактический URL-адрес изображения, в отличие от локального пути к файлу.

И правильный способ рендеринга изображения - запустить его theme_image():

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

Кроме того, доступ к полевым данным так, как вы это делаете, не является предпочтительным методом. Взгляните на field_get_items () и подробный пример в записи блога Rendering Drupal Fields (правильный путь) .

Юрий Бабенко
источник
2
+1 за использование функции темы, хотя я не думаю, что вы на самом деле захотите drupal_realpath () больше. Функция темы автоматически преобразует URI.
Les Lim
file_create_url работал для меня, спасибо! RealPath дал мне абсолютный URL, который не будет отображаться.
Джо Тейлор
Вы можете передать путь потока напрямую (public: // ...), и он автоматически сгенерирует правильный путь.
Эдуардо Чонгкан
10

Если вы буквально просто хотите преобразовать URI в реальный URL, то вам нужна функция file_create_url () , которая используется следующим образом:

$url = file_create_url($uri);

Но вам может быть проще использовать функцию темы, как предлагает Юрий Бабенко:

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

Вы можете легко адаптировать это, чтобы использовать theme_image_style () вместо этого, если вы хотите получить размерную производную вашего изображения.

Les Lim
источник
2

Вы можете использовать модуль Image URL Formatter . Позволяет изменить формат поля, чтобы получить только URL:

Настройки поля Drupal

Бонус: он работает и с Views:

введите описание изображения здесь

Jsalinas
источник