JHtml-Helper-Methoden haben Tradition in Joomla. Sie ersparen es dem Programmierer oftmals viele Zeilen Code immer wieder selbst einsetzen zu müssen, nötige Klassen zu laden und so Kram. Wenn man Joomla 3 nach dem Konstrukt JHtml::_( durchsucht, finden sich zahlreiche Anwendungs-Besipiele. In Joomla 4 jedoch nicht mehr. Da sind's jetzt Stellen mit HTMLHelper::_(. Nicht nur eine Namensänderung.

Muss ich jetzt meine Erweiterungen und Joomla-Codes umschreiben?

Nein, muss ich nicht unbedingt. Auch Joomla 4 arbeitet wie bisher mit JHtml-Aufrufen weiter. Sie funktionieren weiterhin, meine ich damit. Natürlich vorausgesetzt, dass es die aufgerufenen Methoden in Joomla 4 noch gibt.

Beispiel, was nicht klappt

Während die Zeile

JHtml::_('behavior.framework');

in Joomla 3 noch die Mootools-JavaScript-Bibliothek und mehr in's Template lädt (Bei Interesse: Siehe https://github.com/joomla/joomla-cms/blob/3.9.25/libraries/cms/html/behavior.php#L40)

<script src="/media/system/js/mootools-core.js?3dd9..."></script>
<script src="/media/system/js/core.js?3dd9..."></script>

wird sich Joomla 4 mit einer fatalen Fehlermeldung 500 behavior::framework not found aufhängen. Mootools gibt es da schlicht nicht mehr und deshalb wurde natürlich die zuhegörige JHtml-Methode aus dem Core entfernt. Was nicht gibt, kann nicht gefunden werden.

Kann ich einfach überall "JHtml" auf "HTMLHelper" umschreiben?

Nein, kann ich nicht. Wenn ich irgendwo in meinem Joomla-Code das hier verwende

echo JHtml::_('string.truncate',
 '1234567891011121314151617',
 13,
 false
);

wird sowohl Joomla 3 als auch Joomla 4 den auf 13 Zeichen verkürtzen String 1234567891011... , inklusive den drei dämlichen Punkten, ausgeben.

Verwende ich stattdessen, was auch in Joomla 3 ab Version 3.9.0 zulässig ist,

echo HTMLHelper::_('string.truncate',
 '1234567891011121314151617',
 13,
 false
);

, beachte das "HTMLHelper" im Code, erhalte ich mit großer, nicht 100%-iger, Wahrscheinlichkeit eine Fehlermeldung 0 Class 'HTMLHelper' not found und Joomla beendet seine Arbeit.

Grund ist, dass Joomla bekanntgemacht werden muss, dass man die Klasse "HTMLHelper" verwenden will. Und das muss man in jeder einzelnen Datei tun, wo man sie verwendet oder alternativ in jeder Zeile, wo man sie verwendet.

Variante 1: HTMLHelper-Klasse am Anfang der Datei mit use etablieren

Zu Beginn jeder Joomla-PHP-Datei findet sich eine Zeile wie diese (oder ähnlich)

defined('_JEXEC') or die;

Hinter diese Zeile schreibe ich

use Joomla\CMS\HTML\HTMLHelper;

Schon funktioniert mein Code.

Variante 2: Direkt in die Aufrufzeile einbauen

Sieht dann so aus

echo \Joomla\CMS\HTML\HTMLHelper::_('string.truncate',
 '1234567891011121314151617',
 13,
 false
);