abhängige bzw. bedingte DCA-Anpassungen
Hallo,
ich habe gerade erfolgreich meine ersten DCA-Anpassungen umgesetzt. Doch jetzt stellt sich für mich die Herausforderung bzw. Frage, wie man derartige Anpassungen nur unter speziellen Bedingungen im BE enzeigen lassen kann.
Konkret habe ich die News sowie Events um einige weitere Felder erweitert und möchte diese Felder aber nur in definierten Nachrichten- bzw. Terminarchiven im Template anzeigen.
Als Beispiel kann durchaus das einfache Beispiel aus den Docs (https://docs.contao.org/dev/getting-started/dca/) dienen:
Code:
// contao/dca/tl_news.php
use Contao\CoreBundle\DataContainer\PaletteManipulator;
$GLOBALS['TL_DCA']['tl_news']['fields']['location'] = [
'label' => ['Location', 'Location of the news entry, if applicable.'],
'inputType' => 'text',
'eval' => ['tl_class' => 'w50', 'maxlength' => 255],
'sql' => ['type' => 'string', 'length' => 255, 'default' => ''],
];
PaletteManipulator::create()
->addField('location', 'title_legend', PaletteManipulator::POSITION_APPEND)
->applyToPalette('default', 'tl_news')
;
Herzlichen Dank für alle Antworten und Denkanstöße,
Franz
GELÖST, falls nicht jemand weiß, wie's besser geht ;-)
Nach Kombination aus verschiedenen Forenbeiträgen konnte ich nun eine bei mir unter CTO 4.12 funktionierende Lösung finden:
PHP-Code:
// contao/dca/tl_news.php --> Aufbauend auf Std-Bsp von https://docs.contao.org/dev/getting-started/dca/
use Contao\CoreBundle\DataContainer\PaletteManipulator;
$GLOBALS['TL_DCA']['tl_news']['fields']['location'] = [
'label' => ['Location', 'Location of the news entry, if applicable.'],
'inputType' => 'text',
'eval' => ['tl_class' => 'w50', 'maxlength' => 255],
'sql' => ['type' => 'string', 'length' => 255, 'default' => ''],
];
$GLOBALS['TL_DCA']['tl_news']['config']['onload_callback'][] = function() {
// Prüfen ob pid (ID des Archivs) gleich dem gewünschten Archiv ist (hier Archiv-ID 5)
$objNews = \NewsModel::findById(\Input::get('id'));
if ($objNews->pid == '5') {
PaletteManipulator::create()
->addField('location', 'title_legend', PaletteManipulator::POSITION_APPEND)
->applyToPalette('default', 'tl_news')
;
}
};
Für Kalender-Archive ist anstatt von NewsModel das Model CalendarEventsModel zu verwenden und der PaletteManipulator entsprechend anzupassen. Außerdem wäre bei den Events ein Feld location bereits vorhanden.