Der richtige Weg, um den Basispfad zu erhalten, wenn Sie ein Bild von einem Modul einfügen?

7

Wenn Sie nur drupal_get_path () verwenden , um ein Bild aus einem Modulverzeichnis einzuschließen, werden bei Verwendung von Sprachpräfixen nicht vorhandene URLs erstellt.

Ich habe einige Module gesehen, die base_path () voranstellen, um damit umzugehen, aber auf der API-Seite für base_path () kommentiert jemand, dass Sie die DRUPAL_ROOTKonstante verwenden sollten. Was ist der empfohlene Weg?

Arjan
quelle

Antworten:

8

Der Drupal-Kern wird file_create_url()für solche internen Bilder verwendet (z. B. die Standardbehandlung von favicon.ico in include / theme.inc).

Dies stellt sicher, dass hook_file_url_alter()aufgerufen wird (das CDN- Modul tut dies), dass der Basispfad gesetzt wird und dass alles ordnungsgemäß maskiert wird.

Also würde ich verwenden

$path = drupal_get_path('module', 'mymodle');
$url = file_create_url($path . '/images/some.jpg');
mpdonadio
quelle
2
Bemerkenswert, file_create_urlwird vontheme_image
David Thomas
1
Ja, und die Antwort von @ DavidThomas ist am besten geeignet, wenn Sie ein tatsächliches <img> -Element wünschen.
mpdonadio
4

Du könntest benutzen

theme_image

z.B:

  $variables = array(
    'path' => drupal_get_path('module', 'my_module').'/images/image.jpg', 
    'alt' => 'My image',
    'title' => 'My image title',
    'attributes' => array('class' => array('my-image')),
  );
  $img = theme('image', $variables);
David Thomas
quelle
1

Sie sollten $ base_url mit drupal_get_path () verwenden .

global $base_url;
$img_path = $base_url . '/' . drupal_get_path('module', 'YOUR_MODULE') . '/images/your_image.png';

Auf diese Weise wird der Bildpfad nicht durch die URL-Präfixeinstellungen der i18n-Site beeinflusst.

Jack-PL
quelle
0

Verwenden Sie das System Stream Wrapper- Modul. Es gibt Ihnen ein Modul: //, Thema: // und Profil: // Stream Wrapper. Diese Wrapper werden (wahrscheinlich) Teil des D8-Kerns sein.

fietserwin
quelle
0

Manchmal müssen Sie möglicherweise eine NULL-Sprache in der URL-Funktion übergeben.

Beispiel aus Commerce_Paypal

Nicht funktionierender Link (Originalcode)

  return url(drupal_get_path('module', 'commerce_paypal_ec') . '/images/paypal-ec-logo.gif', array('absolute' => TRUE));

Arbeitslink (gehackter Code)

  return url(drupal_get_path('module', 'commerce_paypal_ec') . '/images/paypal-ec-logo.gif', array('absolute' => TRUE, 'language' => ""  ));

Hinweis: Das Hacken von Modulen wird natürlich nie empfohlen.

August
quelle