Custom Fields Ausgabe im Article Override

  • Hallo liebe Gemeinde! In einem Article Override müssen die Custom Fields an unterschiedlichen Stellen und auch schön formatiert ausgegeben werden.


    Ich bin folgender Anleitung gefolgt:
    https://docs.joomla.org/J3.x:Adding_custom_fields/Overrides


    Demnach muss am Anfang der .php Datei folgender Code eingefügt werden:


    <?php foreach($item->jcfields as $jcfield)
    {
    $item->jcFields[$jcfield->name] = $jcfield;
    }
    ?>


    Und dann an der gewünschter Stelle das hier:


    <?php echo $item->jcFields['name-of-field']->label; ?>


    oder


    <?php echo $item->jcFields['name-of-field']->value; ?>


    oder z. B. (was ich eigentlich brauche):


    <?php echo $item->jcFields['name-of-field']->label ." : ". $item->jcFields['name-of-field']->value; ?>


    Habe alles so gemacht, aber leider ohne Erfolg.


    Im Netz habe ich folgende Lösung gefunden, die funktioniert:


    Am Anfang der .php-Datei dieser Code:


    <?php
    $myCustomFields = array();
    foreach($this->item->jcfields as $field) {
    $myCustomFields[$field->name] = $field->value;
    }
    ?>


    und an der gewünschten Stelle dieser:


    <?php echo $myCustomFields['werke-roman-titel']; ?>


    Eine Super-Lösung. Leider kann man hier aber nur den Wert eines Custom Fields ausgeben.
    Ich brauche aber BEIDES: das Label und den Wert.
    Mein PHP-Wissen reicht nicht aus. Ich bitte um eine tatkräftige Unterstützung!


    Fragen:
    1. Warum funktioniert die "amtliche" Lösung nicht?
    2. Wie kann man beides (Label und Wert) des Custom-Fields auslesen und ausgeben?


    Danke im voraus

  • Das Doc widerspricht sich ja selbst. Zu Beginn wird ein Array mit numerischen Indexen als Bsp. für $item->jcfields gezeigt. So kenne ich das auch.


    Am Ende wird dann im Doc behauptet, man könne mittels $item->jcfields[name-of-field] aus diesem Array Werte auslesen.


    Kannst du so machen:

    PHP
    1. <?php$myCustomFields = array();foreach($this->item->jcfields as $field) { $myCustomFields[$field->name]['value'] = $field->value; $myCustomFields[$field->name]['label'] = $field->label;}?>


    PHP
    1. <?php echo $myCustomFields['werke-roman-titel']['label']; echo " : "; echo $myCustomFields['werke-roman-titel']['value']; ?>


    EDIT: Anleitung widerspricht sich nicht, da du und ich diesen Code übersehen haben

    PHP
    1. <?php
    2. foreach($item->jcfields as $jcfield) {
    3. $item->jcFields[$jcfield->name] = $jcfield;
    4. }
    5. ?>


    (Du musst $this->item statt $item verwenden.)
    Danach geht dann auch der weitere (von dir gepostete) Code.
    Gefällt mir aber eigentlich nicht, weil das komplette $jcfield doppelt mitgeschleppt wird. Aber kann mich täuschen und "das ist viel besser so".

  • Hier ist noch eine Lösung von Mike Brandner (über Glip):


    PHP
    1. <?php foreach($item->jcfields as $jcfield) { $item->jcFields[$jcfield->name] = $jcfield; }?>


    und dann:


    PHP
    1. <?php if (!empty($this->item->jcfields[55]->value)) : ?>
    2. <?php echo $this->item->jcfields[55]->value; ?>
    3. <?php endif; ?>


    Die Lösung von GHSVS.de ist aber interessant, weil sie mit den Namen der Felder operiert.
    Es ist in meinem Fall einfacher.