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);
}
Lesezeichen