Hallo liebes Community,
ich will nun auch das neue Akkordeon Element nutzen, verzweifle aber am hinzufügen eines Subline Eingabefeldes unter der Bereichsüberschrift. Beim alten Element hat das noch funktioniert.
So sieht meine angepasste DCA unter contao/dca/tl_content.php aus:
PHP-Code:
<?php
use Contao\ContentModel;
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Contao\DataContainer;
use Contao\Input;
$GLOBALS['TL_DCA']['tl_content']['fields']['sectionSubtitle'] = [
'label' => &$GLOBALS['TL_LANG']['tl_content']['sectionSubtitle'],
'exclude' => true,
'inputType' => 'text',
'eval' => ['maxlength' => 255, 'tl_class' => 'w50 clr'],
'sql' => "varchar(255) NOT NULL default ''",
];
$GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = ['tl_content_section_subtitle', 'addFieldToNestedAccordionPalettes'];
class tl_content_section_subtitle
{
public function addFieldToNestedAccordionPalettes(DataContainer $dc): void
{
$act = Input::get('act');
if (!\in_array($act, ['create', 'edit'], true)) {
return;
}
$parentId = null;
if ($act === 'edit') {
if (!$dc->id) {
return;
}
$child = ContentModel::findByPk($dc->id);
if (!$child || $child->ptable !== 'tl_content') {
return;
}
$parentId = (int) $child->pid;
} else {
// create
if (Input::get('ptable') !== 'tl_content') {
return;
}
$parentId = (int) Input::get('pid');
}
if (!$parentId) {
return;
}
$parent = ContentModel::findByPk($parentId);
if (!$parent || $parent->type !== 'accordion') {
return;
}
$palettesToPatch = ['default'];
if ($act === 'edit' && isset($child) && $child) {
$palettesToPatch[] = $child->type;
} elseif ($act === 'create' && Input::get('type')) {
$palettesToPatch[] = (string) Input::get('type');
}
$palettesToPatch = array_unique($palettesToPatch);
foreach ($palettesToPatch as $paletteName) {
if (!isset($GLOBALS['TL_DCA']['tl_content']['palettes'][$paletteName])) {
continue;
}
$palette = (string) $GLOBALS['TL_DCA']['tl_content']['palettes'][$paletteName];
if (strpos($palette, 'sectionHeadline') === false) {
continue;
}
if (strpos($palette, 'sectionSubtitle') !== false) {
continue;
}
$GLOBALS['TL_DCA']['tl_content']['palettes'][$paletteName] =
str_replace('sectionHeadline', 'sectionHeadline,sectionSubtitle', $palette);
}
}
}
Und unter contao/languages/de/tl_content.php:
PHP-Code:
<?php
$GLOBALS['TL_LANG']['tl_content']['sectionSubtitle'] = ['Untertitel', 'Wird unter der Überschrift angezeigt.'];
Im Backend wird aber das Feld nicht angezeigt. Hat jemand eine Idee?
Danke für die Antworten