Tag 8 - Autorenbox mit vielen Möglichkeiten
- Nadja Lamisch
Heute möchte ich euch zeigen, wie man eine Autorenbox einbinden kann und was man sonst noch so damit machen könnte.
Dazu nutzen wir "Benutzerdefinierte Felder" ( Custom Fields).
Als Erstes legen wir uns unter „Benutzer“ eine neue Feldgruppe „Autoreninfo“ an.
Diese Feldgruppe bekommt 3 Felder:
Profilbild (Typ media)
Über mich (Typ textarea)
Social link (Typ url)
Wenn wir jetzt unseren Benutzer öffnen sehen wir unseren neuen Tab „Autoreninfo“ und können die Felder befüllen.
Da wir die Box nicht automatisch bei jedem Beitrag anzeigen wollen, sondern nur auf unserem „Wissensblog“ wechseln wir in Inhalte – Felder. Dort legen wir ein Feld „Autoreninfo anzeigen“ als Typ radio an. Als Standard setzen wir „nein“. Zur besseren Übersichtlichkeit kann man unter Kategorie noch die Kategorie auswählen, in der dieses Feld angezeigt werden soll. Bei mir ist das die Kategorie „Wissen“.
Wenn wir keine Feldgruppe für unser Feld anlegen, erscheint unser Feld im Beitrag im Reiter „Felder“. Dort können wir jetzt aktivieren, dass die Autoreninfo angezeigt werden soll.
In meinem Fall werden die Beiträge von mir veröffentlicht. Ich bin aber nicht der Spezialist und daher soll auch nicht meine Autoreninfo angezeigt werden. Daher ändere ich noch unter „Veröffentlichung“ den Autor auf den jeweiligen Spezialisten.
Damit unsere Autoreninfo auch beim Beitrag sichtbar ist, brauchen wir ein override von com_content article.
Wie man ein Override erstellt, erfahrt ihr am 13.12. hier im Adventskalender
In unserer default.php setzen wir an die Stelle, wo wir die Autorenbox anzeigen möchten folgenden Code:
<?php
// hier kommt unser Override hin
// wenn unser Custom Field Nr. 4 (die Anzeige der Autorenbox) nicht leer ist
if (!empty($this->item->jcfields[4]->rawvalue)) :
?>
<?php
// wer hat den Artikel geschrieben?
$author = Joomla\CMS\Factory::getUser($this->item->created_by);
// alle aktiven Custom Fields des Autors
$userfields = FieldsHelper::getFields('com_users.user', $author);
// Custom Fields aufbereiten
$fields = [];
foreach ($userfields as $field)
{
$fields[$field->id] = $field;
}
// Bildpfad
$bild = json_decode($fields[1]->value);
$url = $bild->imagefile;
?>
<!—Ausgabe der Autorenbox -->
<div class="autorenbox">
<div>
<p><?php echo HTMLHelper::_('image', $url, $this->escape($this->item->author), ['class' => 'autorenbild']); ?></p>
</div>
<div>
<h3>Autor</h3>
<p><?php echo $this->escape($this->item->author); ?> </p>
<p><?php echo nl2br($this->escape($fields[2]->value)); ?></p>
</div>
</div>
<?php endif; ?>
Ich möchte, dass sie nach dem Artikel erscheint. Also setze ich den Code unten auf die Seite.
In unserer if-Abfrage fragen wir den Inhalt des jcfields 4 ab. Die 4 entspricht dabei der ID unseres Custom Fields bei den Beiträgen.
Damit wir die Custom Fields so nutzen können, müssen wir am Anfang der default.php Datei noch die FieldsHelper Klasse einbauen. Dazu fügen wir
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
am Ende der anderen „use“ hinzu.
Mit CSS können wir unsere Ausgabe noch schön gestalten.
Wofür kann ich das z.B. noch nutzen?
Z.B. wenn ihr eine Seite habt, mit mehreren Wohnungen und unterschiedlichen Eigentümern zur Vermietung. Wenn jede Wohnung ein Beitrag ist und jeder Eigentümer ein User, könnt ihr den Eigentümer als Autor angeben und so Informationen über diesen anzeigen.
Was habt ihr noch für Ideen?