Bild ausgeben in Contao 4.4: DCA Modulerweiterung (Nachrichten-Titelbild)
Zusätzlich zum Teaser-Bild möchte ich bei Nachrichten in Contao 4.4 auch individuelle Titelbilder zuweisen können.
Dazu bin ich zunächst der alten Anleitung von Contao 3.2 gefolgt und habe eine Modulerweiterung vorbereitet:
1) Unter /system/modules/news-image-extention/dca/tl_news.php
PHP-Code:
<?php
if( !empty($GLOBALS['TL_DCA']['tl_news']) ) {
// Anpassen der Palette
$GLOBALS['TL_DCA']['tl_news']['palettes']['default'] = str_replace(
'addImage',
'coverSRC,addImage',
$GLOBALS['TL_DCA']['tl_news']['palettes']['default']
);
// Feld-Konfiguration
$GLOBALS['TL_DCA']['tl_news']['fields']['coverSRC'] = array(
'label' => &$GLOBALS['TL_LANG']['tl_news']['coverSRC'],
'exclude' => true,
'inputType' => 'fileTree',
'eval' => array('fieldType'=>'radio', 'filesOnly'=>true, 'extensions'=>Config::get('validImageTypes'), 'mandatory'=>false),
'sql' => "binary(16) NULL"
);
}
?>
2) Unter /system/modules/news-image-extension/languages/de/tl_news.php
PHP-Code:
<?php
$GLOBALS['TL_LANG']['tl_news']['coverSRC'] = array(
'Titelbild',
'Ein Titelbild für die Nachrichten-Detailseite auswählen'
);
?>
3) Danach habe ich den "Prod"-Cache gelöscht, das Install-Tool unter /contao/install aufgerufen und die Datenbank aktualisiert. Die Auswahl eines Titelbildes im Backend funktioniert damit bereits.
Nun soll das Titelbild auch auf der Nachrichten-Detailseite ausgeben werden, was mit folgendem Code prinzipiell schon funktioniert:
PHP-Code:
<?php
// Pfad fuer das Titelbild ermitteln
if ( trim($this->coverSRC) ) {
$fileModel = \FilesModel::findByUuid($this->coverSRC);
if ($fileModel !== null && is_file(TL_ROOT . '/' . $fileModel->path)) {
$this->coverSRC = $fileModel->path;
}
}
// Titelbild-Ausgabe vorbereiten (Picture-Element)
// ID der gewünschten Bildgröße = 11 (die Bildgrößen sind im Theme definiert)
$arrPicture = \Picture::create($this->coverSRC, 11)->getTemplateData();
$objTemplate = new \FrontendTemplate('picture_default');
$objTemplate->setData($arrPicture);
?>
<figure class="image_container">
<?php echo $objTemplate->parse(); ?>
</figure>
Das Bild wird als Picture-Element mit den unterschiedlichen Bildgrößen (wie im Theme definiert) für ein responsives Design ausgegeben.
Leider fehlen in der HTML-Ausgabe des Bildes aber die im Dateimanager beim Bild angegebenen ALT- und TITLE-Attribute (Bildbeschreibung). Wie bekomme ich die hier noch rein?
----------------------
Und zweite Frage: Gibt es vielleicht einen weniger umständlichen Weg, das Bild aus dem ergänzten DCA-Feld im Template auszugeben?
Vielleicht so ähnlich wie mit den Rocksolid Custom Elements?
PHP-Code:
if ($image = $this->getImageObject($this->coverSRC, array('', '', 11))) {
echo $this->insert('picture_default', $image->picture);
}
Bild in Detailausgabe beschneiden
Guten Abend
Darf ich hier nachhaken?
Eine Veranstaltungslösung. Eigentlich ziemlich einfach:
http://gesundheitundmedizin.hoch3.ch/home.html
Bei Klick auf die Veranstaltung für die Detailansicht soll aber das Bild links auf ein Quadrat zugeschnitten werden. Geht das? Wenn ja, wie am einfachsten.
Schön wäre, wenn man das Bild, das im Head der Veranstaltung erfasst wird, hier zugeschnitten wird (auf den wichtigsten Teil oder notfalls Mitte Mitte).
Natürlich muss das Bild dann auch noch responsive sein (bisher mit Prozenten).