Antwort an „Rolf B“ verfassen

Hallo Killua,

die coverImage-Funktion liefert Dir die Bild-URL aus Sicht des Browsers? Probier's mal mit coverImage(false). Soweit ich das sehe, ist das der "$absolute" Parameter und sein Defaultwert ist true. Und true bewirkt lediglich, dass der Filename durch das Voranstellen von DOMAIN_UPLOADS verschmutzt wird.

Die Bludit-Doku ist - wie so oft bei OpenSource - absolut grottig. Eine systematische Dokumentation der Bludit-Klassen und ihrer Methoden? Fehlanzeige. Wie sagte ein Arbeitskollege mal: Der Sourcecode ist meine Doku. Hm. Ja.

Ich weiß jetzt nicht, wie Du dein Bludit eingestellt hast (und ich weiß auch nichts über Bludit, ich bingse mir das gerade alles zusammen), es scheint aber, als würde DOMAIN_UPLOADS nicht auf den Bilderordner zeigen, sondern eins drüber, auf .../bl-content/uploads. Du würdest von coverImage(false) also 'bilder\bild.jpg' bekommen (oder 'bilder/bild.jpg', je nach Plattform).

Warnung
Bludit unterstützt auch externe Coverbilder. In diesem Fall bekommst Du von coverImage die URL dieses Bildes und keinen lokalen Pfad, egal ob Du true oder false als Argument übergibst! Dein Code kommt mit diesem Fall nicht zurecht. Meiner auch nicht…
Achtung
Im Bludit-Sourcecode finde ich auch eine Methode thumbCoverImage - löst die vielleicht dein Problem grundsätzlich? Hier scheint aber ein anderes Konzept vorzuliegen als Du verwendest. Die Bludit-Methode stellt dem Bildnamen ein DOMAIN_UPLOADS_THUMBNAILS voran, d.h. Bludit scheint einen eigenen Order für Thumbs vorzusehen. Wenn dieses Konzept dort existiert, warum willst Du es durch ein eigenes ersetzen? Wenn Du Bludit-Thumbs bisher nicht beachtet hast, schau Dir das erstmal an, bevor Du mit deinem _T Weg weitermachst.
Achtung
Von der Verwendung von "\\" in einem Dateipfad ist dringend abzuraten. Das \ ist Windows-spezfisch. PHP definiert eine Konstante DIRECTORY_SEPARATOR, die für DOS-Abkömmlinge ein '' und für den Rest der Welt ein '/' enthält. Bludit definiert darüber hinaus DS als Abkürzung dafür (siehe init.php). Andererseits kannst Du in Windows schon seit längerem \ und / gleichermaßen verwenden (in der CMD Shell musst Du den Dateinamen dann aber in Anführungszeichen setzen). Also nimm DIRECTORY_SEPARATOR oder /, in Bludit auch DS, aber niemals \

Schreibe Dir eventuell zum Kombinieren von Pfaden eine Helperfunktion merge_path oder so, die das Problem von doppelten Pfadtrennzeichen löst. Das Thema wurde bei stackoverflow fleißig diskutiert.

Es ist auch nicht wirklich nützlich, immer mit vollen Pfaden zu arbeiten. Ich nehme an, dass Dir $page->coverImage(false) "bilder/bild.jpg" liefert. Oder "bild.png". Oder "bilder/bild.gif" - wer weiß. Vielleicht sogar "bilder/bild.xy.png". Mit pathinfo() trennst Du das sauber in Pfad, Name und Extension.

Damit hast Du die Komponenten die Du brauchst. Die Einzelteile des Bildnamens brauchst Du nur für die Konstruktion des Thumb-Namens (und wie gesagt: Bludit hat ein eigenes Thumbnail-Verzeichnis, wenn Du dieses Konzept nutzt, können Bild und Thumb gleich heißen und alles wird noch einfacher). Das ständige Zerlegen und Wiederzusammenbauen des Dateinamens brauchst Du überhaupt nicht.

Und statt <?php echo $blabla; ?> nimmt man <?= $blabla ?> - wieso schreibe ich das eigentlich JEDEM?

Damit wird der Code deutlich kompakter:

if ($page->coverImage()):
   $coverImage = $page->coverImage(false);
   $cip = pathinfo($coverImage);
   $thumbImage = $cip['dirname'] . DS . $cip['filename'] . "_T." . $cip['extension'];

   if (file_exists(PATH_UPLOADS . DS . $localThumbImage)) {
      $httpThumbImage = HTML_PATH_UPLOADS . '/' . $thumbImage;
   } 
   else {
      $httpThumbImage = HTML_PATH_UPLOADS . '/' . $coverImage;
   }
?>
     <figure...>
       <a href="<?= $page->permalink() ?> rel="bookmark">
         <img src="<?= $httpThumbImage ?>" alt="<?= $page->title() ?>" title="<?= $page->title() ?>">
       </a>
     </figure>
<?php
endif;

Ich habe HTML_PATH_UPLOADS verwendet und nicht DOMAIN_PATH_UPLOADS, weil die Domain im Bildpfad nicht nötig ist. Falls Du auf das Bludit-Konzept für die Thumbnail-Ablage umsteigst, schau Dir init.php genauer an, da stehen alle verfügbaren Konstanten drin.

width und height in % würde ich nicht ans img Element hängen. Hier gehört - wenn überhaupt - die intrinsische Größe des Bildes hin, damit der Browser den Platz dafür reservieren könnte. Die Anpassung an die Größe des Elternelements gehört ins CSS.

Ich habe auf Verkürzungen wie "$cip[filename]_T.$cip[extension]" verzichtet, weil Du kein Freund davon zu sein scheinst. Aber Variablenparsing in Strings solltest Du Dir wirklich anschauen, das kann Code deutlich kompakter und lesbarer machen. Definierte Konstanten wie DS kann man darin aber nicht verwenden.

Die Ermittlung des Thumb-Pfades könnte man auch in eine Funktion auslagern und so die ganzen Temp-Variablen aus dem globalen Namensraum heraushalten.

if ($page->coverImage(false)):
?>
   <figure...>
     <a href="<?= $page->permalink() ?> rel="bookmark">
       <img src="<?= getThumbPath($page) ?>" alt="<?= $page->title() ?>" title="<?= $page->title() ?>">
     </a>
   </figure>
<?php
endif;

...

function getThumbPath($page) {
   $coverImage = $page->coverImage(false);
   $cip = pathinfo($coverImage);
   $thumbImage = $cip['dirname'] . DS . $cip['filename'] . "_T." . $cip['extension'];

   if (file_exists(PATH_UPLOADS . DS . $localThumbImage)) {
      return HTML_PATH_UPLOADS . '/' . $thumbImage;
   } 
   else {
      return HTML_PATH_UPLOADS . '/' . $coverImage;
   }
}

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen