Support » Allgemeine Fragen » Prüfen ob Bild vorhanden

  • Gelöst Sheep225

    (@sheep225)


    Hallo Foriker,

    ich habe mir mein eigenes Template zusammengeschustert (läuft derzeit noch nur lokal). Gleich vorweg, ich bin PHP-Laie und brauche einigermassen ausführliche Erklärungen.
    In der Sidebar habe ich ein Bild je Kategorie eingebaut über
    <img src="<?php bloginfo('url'); ?>**Pfad**/cat-img/<?php $category = get_the_category(); echo $category[0]->slug; ?>.gif">
    Die Bilder sind dann entsprechend wie die Kategorie benannt.

    Das funktioniert auch prima, solange eine Seite zu einer Kategorie gehört und ein Bild vorhanden ist.
    Nun habe ich aber eine statische Startseite, welche natürlich zu keiner Kategorie gehört. Dementsprechend gibt es auch kein entsprechendes Bild, Firebug gibt dann aus „cat-img/.gif“

    Nun möchte ich prüfen ob ein Bild mit dem Kategorienamen vorhanden ist, und wenn nicht stattdessen einen Platzhalter anzeigen.
    Wie müsste der Code dazu aussehen?

Ansicht von 11 Antworten - 1 bis 11 (von insgesamt 11)
  • Moderator Torsten Landsiedel

    (@zodiac1978)

    Du kannst mit file_exists() testen, ob die Datei vorhanden ist:
    http://php.net/manual/de/function.file-exists.php

    Gruß, Torsten

    Thread-Starter Sheep225

    (@sheep225)

    Hallo,

    auf file_exists() bin ich auch schon gekommen; da ich aber von PHP nicht wirklich viel verstehe hatte ich gehofft einen Tipp zu bekommen wie man das in meinen Code einbaut.

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Zum Beispiel so:

    <?php 
    
    $category = get_the_category();
    $filename = bloginfo('url') . '**Pfad**/cat-img/' . $category[0]->slug;
    
    if (file_exists($filename)) {
        echo '<img src="' . $filename . '.gif">';
    } else {
        echo '<img src="platzhalter.gif">';
    }
    ?>

    Aber wenn es nur um die Erkennung der Startseite geht, könntest du ggf. auch mit Conditional Tags arbeiten, also z.B. is_home, is_front_page, is_category, etc.

    Gruß, Torsten

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Diese Zeile muss noch angepasst werden, da file_exists einen Serverpfad erwartet und keine URL.

    $filename = bloginfo('url') . '**Pfad**/cat-img/' . $category[0]->slug;

    Da ich aber nicht weiß, wo dein Pfad am Ende hinführt, habe ich diese Zeile nur exemplarisch eingebaut.

    Wenn die Datei in deinem Theme liegt, solltest du mit
    https://codex.wordpress.org/Function_Reference/get_stylesheet_directory
    bzw.
    https://codex.wordpress.org/Function_Reference/get_template_directory
    arbeiten.

    Gruß, Torsten

    Thread-Starter Sheep225

    (@sheep225)

    Hallo Torsten,

    vielen Dank für die Tipps; ich habe mich nun mal daran versucht, aber ganz am Ziel bin ich noch nicht.
    Um zu sehen was der Code macht habe habe ich ihn in einer Kategorie getestet, zu der es ein Bild gibt, also die Bedingung erfüllt ist.
    Meinen ursprünglichen Code habe ich als Vergleich stehen lassen.

    Den Pfad habe ich mir erfolgreich zusammengebaut:

    $category = get_the_category();
    $filename = get_template_directory_uri () . '/cat-img/' . $category[0]->slug;

    Nun wollte ich sehen auch das Anhängen der Dateiendung klappt und habe alles weitere bis auf
    echo '<img src="' . $filename . '.gif">';
    auskommentiert.
    Ds scheint nun aber irgendwo der Wurm drin zu sein: ich kriege nur das zerbrochene Fehlerbild zu sehen.
    Interessanterweise kriege ich für das Fehlerbild den absolut richtigen Pfad angezeigt, wenn ich nun mit Firebug die Seite prüfe, also exakt dasselbe was mein alter Code ausgibt.

    Kannst du mir nochmal einen weiteren Tipp geben…?

    Danke & Gruss
    Daniel

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Du nutzt get_template_directory_uri() – ich hatte aber get_template_directory()verlinkt. Ersteres gibt eine URI raus, letzteres den Serverpfad. file_exists() benötigt den Serverpfad, der HTML-Befehl die URI. Außerdem muss das „.gif“ natürlich noch hinten rangehängt werden, sonst ist der Pfad+Dateiname ja nicht vollständig. (Mein Fehler…sorry)

    Also könnte eine Lösung so aussehen:

    <?php 
    
    $category = get_the_category();
    $filepath = get_template_directory_uri() . '/cat-img/' . $category[0]->slug . '.gif';
    $serverpath = get_template_directory() . '/cat-img/' . $category[0]->slug . '.gif';
    
    if (file_exists($serverpath)) {
        echo '<img src="' . $filepath . '">';
    } else {
        echo '<img src="platzhalter.gif">';
    }
    ?>

    Gruß, Torsten

    Thread-Starter Sheep225

    (@sheep225)

    Hallo Torsten,

    ich hab das mal getestet, leider ohne Erfolg.
    Ich habe die beiden Variablen zur Fehlersuche mit echo ausgeben lassen;
    $filepath liefert folgendes:
    http://localhost/Test/wp-content/themes/my_template/cat-img/test.gif
    $serverpath liefert folgendes:
    E:\xampp\htdocs\Test/wp-content/themes/my_template/cat-img/test.gif
    Der Pfad und auch die Datei stimmt soweit, trotzdem wird das Platzhalterbild ausgegeben. Genauer gesagt auch nur das zerbrochene Ersatzbild, da der Pfad zum Platzhalter gleich sein müsste wie zum Kategoriebild.
    Was könnte ich noch versuchen?

    Moderator Torsten Landsiedel

    (@zodiac1978)

    Ein anderes Betriebssystem? 😉

    Ich nehme an, dass die unterschiedlichen Slashes („/“ und „\“) im Pfad nicht sauber interpretiert werden.

    Du könntest das ganze mal online stellen (auf eine Subdomain z.B.) und schauen, ob es dann läuft. Oder du googelst mal, wie man Windows und Unix-Pfade sauber hinbekommt …

    Gruß, Torsten

    Thread-Starter Sheep225

    (@sheep225)

    Jaa, ich bin daran mich in Linux einzuarbeiten… 😉

    Ich habe die Seite nun auf meinem` NAS, das auch als Webserver fungieren kann… leider im Moment noch ohne DynDNS-Zugang, so dass ich nur lokal testen kann.
    Die Slashes scheinen nicht das Problem zu sein, die sind nun alle ok, trotzdem kriege ich das Bild nicht angezeigt.
    $filepath:
    http://192.168.0.8/test/wp-content/themes/my_theme/cat-img/Test.gif
    $serverpath:
    /volume1/web/test/wp-content/themes/my_theme/cat-img/Test.gif

    Der Pfad zum Platzhalterbild mit echo '<img src="platzhalter.gif">'; passt natürlich nicht, deshalb habe ich den mal hart angegeben. Funktionieren tut das nun mit
    echo '<img src="/test/wp-content/themes/my_theme/cat_img/platzhalter.gif">';

    Optimal wäre natürlich schon, wenn die Pfade immer dynamisch erzeugt werden könnten. Aber zur Not könnte ich mir auch eine Lösung vorstellen, die Pfade nicht durch Funktionen zusammenzubauen, sondern zumindest den festen Teil der Pfade direkt anzugeben…. ich will ja mein Template nicht verkaufen, also wäre bei einem Hoster-Wechsel ein bisschen Handarbeit verschmerzbar…

    Thread-Starter Sheep225

    (@sheep225)

    Hallo Foriker,

    ich wärme dieses alte Thema noch einmal auf in der Hoffnung dass mir jemand weiter helfen kann.
    Nach einigen Monaten mit anderen Projekten habe ich mich nochmal an mein Template gesetzt und versucht das Problem zu lösen. Dummerweise habe ich mir den Code zerschossen und musste von vorne anfangen (ja, Backup etc…)

    Die Reparatur war insofern erfolgreich, so dass nun auf der Startseite richtigerweise der Platzhalter angezeigt wird; allerdings wird auch dann kein Bild angezeigt, wenn eigentlich eines vorhanden wäre.

    Hier der aktuelle Code:

    <?php
    
    $category = get_the_category();
    $filepath = get_template_directory_uri() . '/cat-img/' . $category[0]->slug . '.gif';
    $serverpath = get_template_directory() . '/cat-img/' . $category[0]->slug . '.gif'; 
    
    if (file_exists($serverpath)) {
                    echo '<img  src="' . $filepath .'">';
                    } else {
    echo '<img  src="/test/wp-content/themes/my_theme/cat_img/platzhalter.gif">';
    }
    ?>

    Wenn ich mit echo $serverpath bzw. $filepath die Variablen ausgeben lasse wird der richtige Pfad angezeigt, aber trotzdem sehe ich das Bild nicht…

    Thread-Starter Sheep225

    (@sheep225)

    So, nach einigem Gebastel hab ich eine Lösung gefunden die für mich zufriedenstellend ist. Der Pfad ist halt nun hart codiert, für ein rein privates Template tut es das aber allemal.

    So funktioniert das Ganze nun:

    <?php
    $category = get_the_category();
    $serverpath  = '/volume1/web/test/wp-content/themes/my_theme/cat_img/' . $category[0]->slug . '.gif';
    $filepath = '/test/wp-content/themes/my_theme/cat_img/' . $category[0]->slug . '.gif';
    if (file_exists($serverpath)) {
                    echo '<img  src="' . $filepath .'">';
                    } else {
    echo '<img  src="/test/wp-content/themes/my_theme/cat_img/platzhalter.gif">';
    }
    ?>

Ansicht von 11 Antworten - 1 bis 11 (von insgesamt 11)
  • Das Thema „Prüfen ob Bild vorhanden“ ist für neue Antworten geschlossen.