Como obtenho o URL correto de um campo de imagem?

7

Estou tentando imprimir o URL de um campo de imagem usando o código a seguir.

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

O código fornece um URI como public: //company-logos/image.png quando eu precisaria de sites / default / files / company-logos / image.png.

Qual código devo usar para imprimir o caminho da imagem (por exemplo, sites / default / files / company-logos / image.png)?

Joe Taylor
fonte

Respostas:

20

Você deseja usar a função drupal_realpath () para converter o URI no caminho real do sistema de arquivos.

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

Você também pode usar file_create_url () para obter o URL real da imagem, em oposição a um caminho de arquivo local.

E a maneira correta de renderizar uma imagem é executá-la theme_image():

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

Além disso, acessar os dados do campo da maneira que você está fazendo não é o método preferido. Dê uma olhada em field_get_items () e o exemplo detalhado na entrada do blog Rendering Drupal Fields (o caminho certo) .

Yuriy Babenko
fonte
2
+1 por usar a função theme, embora eu não ache que você realmente queira mais drupal_realpath (). A função de tema transformará automaticamente o URI.
Les Lim
file_create_url funcionou para mim, obrigado! realpath me deu o URL absoluto que não renderizaria.
Joe Taylor
Você pode passar o caminho do fluxo diretamente (public: // ...) e ele gerará automaticamente o caminho certo.
Eduardo Chongkan
10

Se você literalmente deseja transformar um URI em uma URL real, deseja a função file_create_url () , que é usada assim:

$url = file_create_url($uri);

Mas você pode achar mais fácil usar uma função de tema, como sugere Yuriy Babenko:

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

Você pode facilmente adaptar isso para usar theme_image_style () , se desejar uma derivada de tamanho da sua imagem.

Les Lim
fonte
2

Você pode usar o módulo Image URL Formatter . Permite alterar o formato do campo para obter apenas o URL:

Configurações do campo Drupal

Bônus: também funciona com Views:

insira a descrição da imagem aqui

Jsalinas
fonte