Das kriegst du nur per XLCASS hin. Für die Erzeugung verantwortlich sind je nach Icon-Typ die Klassen TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider
oder TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider
.
Darin enthalten ist jeweils eine Methode generateMarkup
die das finale img
-Tag zurück gibt mit standardmäßig fix alt=""
.
Da es hier weder Hooks noch Events gibt könntest du die betroffenen Klassen per XCLASS
erweitern und darin beispielsweise per String-Operation das alt
-Attribut der String-Rückgabe der parent
Methode ersetzen lassen.
namespace DeinVendorname\DeinPackagename\Xclass\SvgIconProvider;
class SvgIconProvider extends \TYPO3\CMS\Core\Imaging\IconProvider\SvgIconProvider {
/**
* Überschreibt die generateMarkup Methode, um das alt-Attribut anzupassen.
*/
protected function generateMarkup(Icon $icon, array $options): string
// Rufe die originale Logik auf, um den Basis-HTML-String zu erhalten
$originalMarkup = parent::generateMarkup($icon, $options);
// Ersetze dann das alt-Attribut
$altText = 'mein test'; // Dein gewünschter alt-Text
$updatedMarkup = str_replace('alt=""', 'alt="' . htmlspecialchars($altText) . '"', $originalMarkup);
return $updatedMarkup;
}
}
Es bleibt natürlich noch die Frage offen woher dein $altText
dann kommen soll?
Falls du das über den ViewHelper definieren können möchtest, dann müsstest du den ViewHelper TYPO3\CMS\Core\ViewHelpers\IconViewHelper
um ein entsprechendes Argument erweitern, dieses an die getIcon
Methode der TYPO3\CMS\Core\Imaging\IconFactory
Klasse durchreichen, entsprechend also die IconFactory
per XCLASS erweitern um dann den Wert an SvgIconProvider::generateMarkup
weiter zu reichen. Das ist etwas viel XCLASSing. Ich glaube ich würde einfach einen eigenen ViewHelper aus den Core-Komponenten zusammmenbauen, der das gleiche macht. So würdest du dir die ganzen XCLASS-Erweiterungen sparen, die man ja möglichst vermeiden will, da sie den Core modifizieren und eine zusätzliche Fehlerquelle sein können.
EDIT:
Eben ging mir durch den Kopf dass man ja genauso gut den ViewHelper direkt per XCLASS erweitern könnte und im img-Tag String des return
das o.g. Replacement durchführen. Allerdings haben wir hier in TYPO3 das "Problem", dass ViewHelper neuerdings als final
deklariert werden, was die Erweiterung unmöglich macht. Nunja darüber wurde schon viel diskutiert, siehe: https://twitter.com/NamelessCoder/status/1711699896149893390
Dennoch könnte dein eigener ViewHelper eine Kopie des originalen sein und darin das Replacement durchführen. Das ist immernoch einfacher und weniger Fehleranfällig als XCLASSing durch die ganzen betroffenen Stellen.