Joomla: JHtml- vs. HTMLHelper-Methoden. Unterschiede?!?
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-Beispiele. In Joomla 4 jedoch nicht mehr. Da sind es 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 ins 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 zugehörige JHtml
-Methode aus dem Core entfernt. Was nicht gibt, kann nicht gefunden werden.
Zukunftsmusik; nicht müssen, aber können
Vermutlich ab Joomla 5 werden "bequeme" Verwendungen von Joomla-Klassen mit Namespace-Aliasen, die mit J
beginnen nicht mehr funktionieren, also auch das JHtml
-Dingens nicht mehr. Vielleicht ein Anlass schon jetzt anzufangen, seine Codes der moderneren Variante nach und nach anzupassen?!!?
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ürzten 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;
Unter diese Zeile schreibe ich diese Zeile, falls sie da nicht schon irgendwo steht(!):
use Joomla\CMS\HTML\HTMLHelper;
Schon funktioniert mein obiger truncate
-Code in Joomla ab Version 3.9 und natürlich 4.
Variante 2: Direkt in die Aufrufzeile einbauen
Sieht dann so aus
echo \Joomla\CMS\HTML\HTMLHelper::_('string.truncate',
'1234567891011121314151617',
13,
false
);