Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Allgemeines zu Drupal ›

Warum funktionieren Bilder mit relativem Pfad nicht?

Eingetragen von feodor (25)
am 27.10.2006 - 00:03 Uhr in
  • Allgemeines zu Drupal

Aloha,

ich versuchte Inline-Bilder mittels relativem URI

<img src="/files/bild.png" alt="mein Bild">

einzubinden, was laut David Mercers Drupal-Buch funktionieren sollte.

Im Quelltext der generierten Seite (Firefox [CTRL U]) taucht der obige Code korrekt auf. Also kann es nicht am HTML-Filter liegen. Ich nutze hier zum Entwickeln XAMPP für Windows Version 1.5.3a.

Gebe ich

http://localhost/drupal/files/bild.png

ein, schickt Apache das Bild an den Browser. Man sieht, dass meine Drupal-Testseite in einem Unterverzeichnis von htdocs liegt. Der Befehl

<img src="/drupal/files/bild.png" alt="mein Bild">

bringt nichts. Das Bild erscheint erst bei der Variante

<img src="/drupal/files/bild.png" alt="mein Bild">

mit absolutem Pfad relativ zum Basis-URI. Nun frage ich mich, wie ich zu relativen Pfadangaben kommen kann, denn mit obiger Arbeitsweise lässt sich die Seite nicht in ein anderes Verzeichnis verschieben.

Könnte es an mod_rewrite liegen (clean URLs), welches aktiviert ist?

Farewell

‹ nicht 'auf der Startseite anzeigen' Nutzer sollen keinen PHP-Code eingeben ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

base_path

Eingetragen von md (3717)
am 27.10.2006 - 18:08 Uhr

Versuchs mal mit

<img src="/<?php print $base_path ?>/files/bild.png" />

md - drupalcenter
--
www.mdwp.de :: www.go-with-us.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hallo Meinolf,

Eingetragen von feodor (25)
am 27.10.2006 - 20:40 Uhr

Hallo Meinolf,

danke für die Antwort und den Hinweis, dass ich ja XHTML verwenden sollte (hatte den slash am Ende vergessen).

Ich habe nun folgende Varianten getestet:

<img src="/drupal/files/bild.png" />
<img src="/<?php echo "/drupal" ?>/files/bild.png" />
<img src="/<?php print $base_path ?>/files/bild.png" />

Die ersten beiden Varianten funktionieren, die letzte leider nicht. Die zweite Variante zeigt, dass PHP ausgeführt wird. Bei der letzten Variante schickt Apache lediglich

<img src="/files/bild.png" />

raus. Anscheinend ist $base_path nicht definiert. Ich habe noch die Variable $base_url probiert, die in settings.php definiert ist, aber da passiert auch nichts: keine Rückgabe.

Als einer der Vorteile von Drupal gilt ja, dass alle Verweise relativ sein sollen. Seltsam, dass dies schon bei einem so einfachen Beispiel nicht funktioniert.

Jetzt müsste ich wohl die PHP-Syntax lernen und den gesamten Code analysieren.

Farewell
http://feodor.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Wo hast du das her, daß

Eingetragen von frostschutz@dru... (98)
am 27.10.2006 - 20:58 Uhr

Wo hast du das her, daß alle Verweise relativ sein sollen?

Relativ zu was, müsste man hier fragen. Es gibt bei Drupal ja generell zwei Zugriffsarten: /pfad/zum/file, das vom Apache zu der Alternative index.php?q=pfad/zum/file uebersetzt wird. Der feine Unterschied zwischen den beiden Varianten (abgesehen davon daß die erste im Browser schöner aussieht) ist, daß der Browser bei der ersten Variante relative Pfade ab dem angegebenen Verzeichnis interpretiert (er denkt das Verzeichnis existiere), wogegen bei der zweiten Variante vom Hauptverzeichnis der Drupal Seite ausgegangen wird (alles hinter ? wird nicht mehr als Pfad interpretiert).

Mit relativen Pfaden landest du also sehr wahrscheinlich bei den beiden möglichen Zugriffsvarianten jeweils woanders. Von daher kannst du hier mit relativen Pfaden nicht zuverlässig arbeiten. Es sei denn natürlich du gehst davon aus, daß nur eine der Varianten benutzt wird.

Die sauberste Lösung wäre IMO, wenn (man) Drupal selbst Dateien verwalten (lassen) würde. Nur so kann man von beliebig vielen Nodes auf dieselbe Datei verlinken (so das denn nötig ist) und korrekt darauf reagieren, wenn diese Datei sich verschiebt, den Namen ändert oder einfach nicht mehr auf dem Server angeboten wird. Die Alternative dazu (alle betroffenen Nodes von Hand nachkorrigieren oder mit toten Links leben) ist nicht besonders schön.

Wie man das nun in Drupal gescheit macht, ist wieder eine andere Frage...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Relativitätstheorie

Eingetragen von sanduhrs (1285)
am 27.10.2006 - 21:15 Uhr

Es müsste <img src="/<?php print base_path() ?>files/bild.png" /> heissen.
vg

//edit: Achso, zur Relativitätstheorie: relativ zum Drupal-Installations-Root.

Drupal-Installations-Root:
http://www.domain.tld/

Auf der Seite http://www.domain.tld/ führt <img src="/files/bil01.png" /> zum gewünschten Ergebnis.
Auf der Seite http://www.domain.tld/node/12 führt <img src="/files/bil01.png" /> _nicht_ zum gewünschten Ergebnis.

Auf der Seite http://www.domain.tld/ führt <img src="/files/bil01.png" /> zum gewünschten Ergebnis.
Auf der Seite http://www.domain.tld/node/12 führt <img src="/files/bil01.png" /> zum gewünschten Ergebnis.

Beide Varianten sind relativ, die eine funktioniert, die andere nicht.

--
sanduhrs - drupalcenter
--------------------------------
http://erdfisch.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

base_path

Eingetragen von md (3717)
am 28.10.2006 - 00:59 Uhr

Die page.tpl.php (und ich dachte darum ging es) kennt die Variable $base_path.
Auszug aus dem Bluemarine Theme:

<?php if ($logo) { ?><a href="/<?php print $base_path ?>" title="<?php print t('Home') ?>"><img src="/<?php print $logo ?>" alt="<?php print t('Home') ?>" /></a><?php } ?>

Wird bei mir ausgegeben als '/drupal/'.

md - drupalcenter
--
www.mdwp.de :: www.go-with-us.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: Wo hast du das her, daß

Eingetragen von feodor (25)
am 28.10.2006 - 12:54 Uhr
frostschutz@drupal.org schrieb

Wo hast du das her, daß alle Verweise relativ sein sollen?

Im Buch von David Mercer "Drupal: Creating Blogs, Forums, Portals, and Community Websites" fand ich ein Codebeispiel in der Bildzugriff als file/bild.jpg ohne führenden slash codiert war. Hier irgendwo im Forum las ich, dass es Drupal gestattet, das Installationsverzeichnis zu wechseln, ohne dass Verweise ins Leere führen.

frostschutz@drupal.org schrieb

Relativ zu was, müsste man hier fragen.

Was mich interessiert ist, dass ich den Namen des Drupal-Installationsverzeichnisses weglassen kann. Dann kann ich leicht alles verschieben.

frostschutz@drupal.org schrieb

Es gibt bei Drupal ja generell zwei Zugriffsarten: /pfad/zum/file, das vom Apache zu der Alternative index.php?q=pfad/zum/file uebersetzt wird.

Das sollte nach meinem aktuellen Verständnis allerdings bei Bildern nicht passieren, denn es handelt sich ja hierbei nicht um XHTML-Inhalt der dynamisch aus Datenbankeinträgen mittels PHP generiert wird. Vielmehr muss ja eine komplette Bilddatei aus dem Dateisystem an den Browser geschickt werden

frostschutz@drupal.org schrieb

Von daher kannst du hier mit relativen Pfaden nicht zuverlässig arbeiten.

Den Eindruck habe ich mittlerweile auch. Vielleicht war es nur ein Bug in Mercers Buch.

frostschutz@drupal.org schrieb

Die sauberste Lösung wäre IMO, wenn (man) Drupal selbst Dateien verwalten (lassen) würde.

Ja das sehe ich auch so. Ein Referenzzähler wäre hier wirklich schick. Fragt sich, ob es hier schon ein geeignetes Modul gibt. Ich muss mir mal die einschlägigen Module ansehen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

$base_path versus base_path()

Eingetragen von feodor (25)
am 28.10.2006 - 13:07 Uhr

Bingo sanduhrs! Wenn man die Variable $base_path gegen den Funktionsaufruf base_path() austauscht klappt es.

Es hapert bei mir an PHP-Kenntnissen.

Meinolf hat allerdings recht, dass in page.tpl.php die Variable $base_path verwendet wird, was auch nachprüfbar im Kopfteil der generierten Seite funktioniert. Anscheinend fehlt der Zugriff auf $base_path, wenn der PHP-Code im Artikel interpretiert wird. Ich habe auch einige andere Variablen probiert: kein Zugriff.

Farewell
http://feodor.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

global $base_path

Eingetragen von md (3717)
am 28.10.2006 - 14:22 Uhr

So geht das, wenn du PHP-Code direkt eingibst:

<?php
global $base_path;
print
$base_path;
?>

Hab ich gerade getestet.

md - drupalcenter
--
www.mdwp.de :: www.go-with-us.de

  • Anmelden oder Registrieren um Kommentare zu schreiben

Re: global $base_path

Eingetragen von feodor (25)
am 28.10.2006 - 19:24 Uhr
md schrieb

So geht das, wenn du PHP-Code direkt eingibst...

Stimmt, das klappt bei mir auch. Globale Variablen müssen in PHP als solche deklariert werden. U.a. deswegen gibt es auch die Accessor-Funktion base_path().

http://www.dynamicwebpages.de/php/language.variables.scope.php

Es lag also wie vermutet an meinen fehlenden PHP-Kenntnissen. (Jetzt stellt sich die Frage, welches PHP-Buch ich mir kaufe.)

Mal sehen wie das mit den Modulen image und img_assist funtioniert.

Farewell
Feodor

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
Weiter

Neue Kommentare

  • Arrrrg. Nix Tabelle :-D /*
    vor 3 Wochen 5 Tagen
  • Textboxen mit Tabelle
    vor 3 Wochen 5 Tagen
  • Du sollst ja auch keine
    vor 3 Wochen 5 Tagen
  • Theme
    vor 3 Wochen 5 Tagen
  • Welches Theme benutzt du
    vor 3 Wochen 6 Tagen
  • Mit Responsive Raster hatte
    vor 3 Wochen 6 Tagen
  • Hallo Alex,um das Häkchen
    vor 4 Wochen 4 Stunden
  • Modul view_unpublished
    vor 4 Wochen 1 Tag
  • Modul "override node options"
    vor 4 Wochen 2 Tagen
  • Im Grunde ist dass ein
    vor 4 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250270
Registrierte User: 20483

Neue User:

  • Aathivithyah
  • Aoirhic
  • Stevebok

» Alle User anzeigen

User nach Punkten sortiert:
wla9463
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 59 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association