Akkordeon mit FAQ-Markup
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
class AccordionExtension extends AbstractExtension
{
public function getFunctions(): array
{
return [
new TwigFunction('jsonld_accordion', [$this, 'generateJsonLdAccordion']),
];
}
public function generateJsonLdAccordion(array $elements): array
{
$jsonLd = [
"@context" => "https://schema.org",
"@type" => "FAQPage",
"mainEntity" => []
];
foreach ($elements as $element) {
$cleanedContent = strip_tags($element['content']);
$cleanedContent = str_replace(["\n", "\r"], ' ', $cleanedContent);
$jsonLd['mainEntity'][] = [
"@type" => "Question",
"name" => $element['header'],
"acceptedAnswer" => [
"@type" => "Answer",
"text" => $cleanedContent
]
];
}
return $jsonLd;
}
}
Navigation mit Bild/Icon ergänzt
use Contao\CoreBundle\DataContainer\PaletteManipulator;
use Contao\Config;
PaletteManipulator::create()
->addLegend('image_legend', 'meta_legend', PaletteManipulator::POSITION_BEFORE)
->addField('navigation_image', 'image_legend', PaletteManipulator::POSITION_APPEND)
->applyToPalette('default', 'tl_page')
->applyToPalette('regular', 'tl_page')
->applyToPalette('redirect', 'tl_page')
;
$GLOBALS['TL_DCA']['tl_page']['fields']['navigation_image'] = [
'label' => &$GLOBALS['TL_LANG']['tl_page']['navigation_image'],
'exclude' => true,
'search' => true,
'flag' => 1,
'inputType' => 'fileTree',
'eval' => [
'fieldType' => 'radio',
'files' => true,
'filesOnly' => true,
'extensions' => Config::get('validImageTypes')
],
'sql' => "blob NULL",
];