Kategorieliste - Bilder im Beitrag als Icon

  • Hallo zusammen,


    ich habe für eine Kategorie Felder angelegt, über die ich in den Beitrag auch Bilder hinzufügen kann. Die Beiträge werden in einer Kategorieliste dargestellt. Dort möchte ich mittels Icons (kleine Bilder) anzeigen, ob im Beitrag ein Bild vorhanden ist.

    Ich hoffe, ihr könnt mir weiterhelfen.


    Gruß Jens

  • Zur hilfreichsten Antwort springen
  • Hallo Dirk,

    vielen Dank für deine Antwort. Ich habe mir das mal angesehen. So das kommt schon in die Richtung. Allerdings möchte ich am Ende der Tabelle eine Spalte mit einem Icon haben, welches über CSS in grau dargestellt wird, wenn der Bericht keine Bilder enthält und andernfalls farbig ist. Das ganze soll abhängig sein vom DB Inhalt der Feld-ID.

    Folgendes habe ich jetzt schon versucht, allerdings wird nur 'if' ausgeführt:

    PHP
    <?php if (isset($article->jcfields[25])) : ?>
    <i class="fas fa-camera e-pic-no" aria-hidden="true" title="Bericht enthält keine Bilder"></i>
    <?php else : ?>
    <i class="fas fa-camera e-pic-yes" aria-hidden="true" title="Bericht enthält Bilder"></i>
    <?php endif; ?>

    Das habe ich mit gleichem Ergebnis versucht:

    PHP
    <?php if (empty($this->article->jcfields[25])) : ?>
    <i class="fas fa-camera e-pic-no" aria-hidden="true" title="Bericht enthält keine Bilder"></i>
    <?php elseif (isset($this->article->jcfields[25])) : ?>
    <i class="fas fa-camera e-pic-yes" aria-hidden="true" title="Bericht enthält Bilder"></i>
    <?php endif; ?>
  • Zitat

    Allerdings möchte ich am Ende der Tabelle eine Spalte mit einem Icon haben, welches über CSS in grau dargestellt wird, wenn der Bericht keine Bilder enthält und andernfalls farbig ist.

    Nur nebenbei das ist nicht unbedingt barrierefrei. Farbenblinde können das nicht unterscheiden (kommt auf die Farbe an).

    Zu deinem Problem: So ein field ist nie leer. Du kannst es ja direkt mit echo oder var_dump ausgeben lassen.

    Was du wahrscheinlich brauchst ist

    if (empty($this->article->jcfields[25]->value)) : 

  • Barrierefreiheit könnte man ggf. mit hell- und dunkelgrau umgehen?

    if (empty($this->article->jcfields[25]->value)) :  bringt leider auch nichts.

    Ich habe mal nur isset versucht, ohne else oder ähnliches. Da kommt garnichts bei rum.

    Anbei: Im Archiv müsste ich das gleiche machen, allerdings rufe ich die Felder dort ganz anders auf:

    PHP
          <?php $customFields = FieldsHelper::getFields('com_content.article', $item, true); $values = array_column($customFields, 'value', 'name');
    				echo $values['bild']; ?>

    Da habe ich noch garkeine Idee...

  • Hell / Dunkel ist gut.

    Solche Schnippsel sind immer schwer zu beantworten wenn man den Kontext nicht kennt. Ich bin davon ausgegangen dass du die Felder schon extrahiert hattest.

    Du willst wahrscheinlich nicht das 25. Feld sondern das Feld mit der id 25?

    Dann kommt zuerst sowas: Vorsicht - ich habe das jetzt nur so runtergeschrieben .. nicht getestet

  • Sorry, ich glaube, dass ich da nicht genug erklärt habe.

    In einem Template Override für die Kategorieliste lese ich aus den Artikeln einer Kategorie die Felder aus und in lasse mir die Werte ausgeben. Das funktioniert mit allen Feldern über <?php echo $article->jcfields[id]->value; ?>. Was ich festgestellt habe: egal, ob das Feld leer oder ausgefüllt ist, es wird immer if ausgeführt, ob mit empty oder isset, ist egal. Auch, wenn ich nur empty oder isset ausgeben lasse, ohne else, dann pflastert er mir das Icon auf alle Zeilen, unabhängig, ob die jeweilige bedingung erfüllt ist, oder nicht.

    Das letztere mit FieldsHelper::getFields ist für die Umsetzung der Liste archivierter Beiträge. Dort funktioniert ja <?php echo $article->jcfields[id]->value; ?> nicht.

  • Dieser Schnipsel ist ja für die Liste archivierter Beiträge. Ich habe <?php if (isset($fields[25])->value) : ?> zu <?php if (isset($fields[25]->value)) : ?> geändert, weil sonst ein Error kommt. Hier wird allerdings auch nur else ausgeführt.

  • Ich habe noch die Idee, über den Zustand von $article->jcfields[id]->value Variablen zu definieren ($iconclass und $icontext)

    und die dann in

    <i class="fas fa-camera <?php echo $iconclass; ?>" aria-hidden="true" title="<?php echo $icontext; ?>"></i> aufzurufen.

    Ich schreib mal was und melde mich dann nochmal.

  • Ich habe es jetzt ausprobiert. Jetzt wird es eine Mischung aus if und else rofl

    Oben bei den allgemeinen Definitionen habe ich jetzt

    Code
    if (empty($article->jcfields[19]->value)) {
      $iconclass = "no-epic";
      $icontext = "Bericht enthält keine Bilder";
    }
    else {
      $iconclass = "";
      $icontext = "Bericht enthält Bilder";
    }

    und das Icon <i class="fas fa-camera <?php echo $iconclass; ?>" aria-hidden="true" title="<?php echo $icontext; ?>"></i>

    Die Klasse nimmt er von else und den Text von empty. Es wird auch nicht unterschieden ob empty oder else erfüllt ist.

    Wenn ich if (isset($article->jcfields[19]->value)) { statt else { nehme, ignoriert er if (empty... komplett. search

    Hinweis: Ich habe jetzt die ID des ersten Bildes genommen und in CSS die Klasse geändert.

  • Ich glaube, den Fehler jetzt gefunden zu haben, allerdings habe ich ihn bisher nicht beheben können...

    Auf jeden Fall funktioniert das mit der Vergabe der Variablen $iconclass und $icontext zuverlässig, weshalb ich darauf weiter aufbauen würde.

    Beim Blick in die DB ist aber der Inhalt der ID niemals leer. Der Inhalt, wenn das Feld leer ist: {"imagefile":"","alt_text":""}

    Sobald ein Bild gesetzt ist: {"imagefile":"images\/inhalte\/...}

    Folgendes habe ich versucht, was aber die Ausgabe crasht:

    Code
    $getpic = $article->jcfields[19]->value;
    
    if (str_contains($getpic, 'images') {
      $iconclass = "";
      $icontext = "Bericht enthält Bilder";
    }
    else {
      $iconclass = "no-epic";
      $icontext = "Bericht enthält keine Bilder";
    }
    • Hilfreichste Antwort

    Bei mir funktioniert diese Abfrage.
    Du kannst natürlich Variablen für Text und clas icon verwenden

    PHP
                <?php $image = $article->jcfields[25]->value;?>
                <?php if (empty($image)) : ?>
                    <i class="fas fa-camera e-pic-no" aria-hidden="true" title="Bericht enthält keine Bilder"></i>
                <?php else : ?>
                    <i class="fas fa-camera e-pic-yes" aria-hidden="true" title="Bericht enthält Bilder"></i>
                <?php endif; ?>
  • Es gibt eine schwere Sicherheitslücke auf der Website da derzeit eine unsichere Version des Astroid Frameworks verwendet wird. Siehe z.B. auch:

    SniperSister
    4. März 2026 um 17:35