Hallo liebe Contao-Gemeinde,
ich habe in der Vergangenheit (Contao 4) die Erweiterung "contao-data-attributes-bundle" verwendet, um Attribute für Artikel und Inhaltselemente zu generieren.
Jetzt liegt folgendes Problem vor: Die Erweiterung nutzte Modifikationen an 'block_searchable.html5' und 'block_unsearchable.html5', die quasi das Parent für 'ce_text.html5' waren (nach meinem Wissensstand kann ich 'block_searchable.html5' in Contao 5 nicht weiter verwenden):
In meinem Fall benötige ich folgenden Code für Contao 5 / Twig-Template:
PHP-Code:
<?php if ($this->attributes): ?> <?= $this->attributes ?><?php endif; ?>
Meinem Verständnis nach sollte ich in Contao 5 nun '_base.html.twig' verwenden, dieses sieht folgendermaßen aus:
Code:
{% extends "@Contao/content_element/_base.html.twig" %}
{% block attributes %}
{{ parent() }}
data-test="test"
{{ data.joDataAttributes|default('')|raw }}
{% endblock %}
Der HTML-Output davon ist:
HTML-Code:
<div class="content-text" data-test="test" a:1:{i:0;a:2:{s:3:"key";s:11:"data-celink";s:5:"value";s:3:"500";}}="">
In einem anderen Topic hab ich folgendes gefunden:
"Deserialize solltest du wenn dann im Controller machen, nicht im Template. Also erst die deserialisierten Daten an das Template übergeben."
Leider bin ich nicht so versiert; vielleicht könnte jemand Erste Hilfe leisten.
PHP-Code:
<?php
/*
* This file is part of the contao data-attributes bundle.
*
* Copyright (c) 2017 Janosch Oltmanns
*
*/
namespace JanoschOltmanns\ContaoDataAttributesBundle;
class DataAttributesContentElement {
private function hasDataAttributes($templateData) {
return isset($templateData['joDataAttributes']);
}
private function hasDisabledAutomatism($templateData) {
return $templateData['joDataAttributesDisableAutomatic'];
}
private function getDataAttributesAsString($templateData) {
$dataAttributesString = "";
$dataAttributes = \Contao\StringUtil::deserialize($templateData['joDataAttributes'], true);
$parsedDataAttributes = [];
if (sizeof($dataAttributes)>0) {
foreach ($dataAttributes as $index=>$dataAttribute) {
$parsedDataAttributes[] = str_replace('data-', 'data-', $dataAttribute['key']) . '="' . $dataAttribute['value'] . '"';
}
$dataAttributesString = implode(' ' , $parsedDataAttributes);
}
return $dataAttributesString;
}
public static function getDataAttributes($templateData) {
$dataAttributes = "";
if (self::hasDataAttributes($templateData)) {
$dataAttributes = self::getDataAttributesAsString($templateData);
}
return $dataAttributes;
}
public function parseTemplate($objTemplate) {
$templateData = $objTemplate->getData();
if ($this->hasDataAttributes($templateData) && !$this->hasDisabledAutomatism($templateData)) {
$dataAttributesString = $this->getDataAttributesAsString($templateData);
if (isset($objTemplate->attributes)) {
$objTemplate->attributes .= ' ' . $dataAttributesString;
} else {
$objTemplate->attributes = $dataAttributesString;
}
}
}
}
Für Anregungen und Vorschläge wäre ich sehr dankbar. Beste Grüße.
Lesezeichen