Webseiten und ZubehörProgrammierung UmsetzungPflege Backups BetreuungJoomla-Spezialist

JoomlaSchnipsel

Besonders bei Updates von Joomla 2.5 auf höhere Versionen wird man desöfteren von der Fehlermeldung JHtmlBehavior::mootools not found überrascht. Das Problem ist oft nicht, den Fehler mit neuem Code zu reparieren, da gibt es viele Suchtreffer im Netz, sondern die Stelle in den Tausenden Dateien zu finden, wo der Fehler verursacht wird. Bei der Suche können ein paar Zeilen PHP-Code helfen.

Hinweis: Die folgenden Änderungen sollten nach Lösung des Problems wieder entfernt werden. Am besten macht man vor der Änderung eine Sicherheitskopie der Datei, um sie hinterher wieder original herzustellen.

Aus der Meldung oder ähnlichen JHtmlBehavior::mootools kann man mit etwas Joomla-Erfahrung zumindest mutmaßen, dass in einer Datei behavior.php eine Methode (function) mootools(...) nicht (mehr) existiert. Weiß man nicht, wo finden, kann man alle Dateien nach der Textpassage class JHtmlBehavior durchsuchen oder sucht nach allen Dateien namens behavior.php und sieht nach, in welcher sich ziemlich am Anfang das class JHtmlBehavior befindet. [Korrekturlesung 2015-09: im letzten Satz ist irgendwie der Wurm drin. Versteh ich jedenfalls nicht, wonach suchen.] [Antwoert Re:Later: Ist schon richtig so ;-) ] [Volli: Euch ist klar, dass Ihr auf der Produktivseite kommentiert? Jedenfalls stimmt der Satz.]

Und dieser Klasse jubeln wir dann eine eigene Methode mootools() unter, die nicht mehr macht, als uns in einer Debug-Ausgabe anzuzeigen, wer sie denn von wo aufgerufen hat, um diese aufrufende Datei schließlich zu korrigieren.

Editieren Sie die Datei /libraries/cms/html/behavior.php wie folgt. Fügen Sie ganz am Ende, aber vor der letzten schließenden, geschweiften Klammer der Datei diesen Code-Block ein.

 static function mootools(){
  $callers=debug_backtrace();
  foreach($callers as $k=>$v){
   if(empty($v['args']))continue;
   $args=$v['args'];
   if(in_array('behavior.mootools', $args)){
    echo 'DEBUG: behavior.mootools found: '.print_r($v,true);exit;
   }
  }
 }

Öffnen Sie danach die fehlerwerfende Seite erneut. Auf einer nahezu weißen Seite sehen Sie eine Ausgabe, die auch den Pfad zur Datei (file) enthält sowie die Zeilennummer (line). Leichter lässt sich die Ausgabe lesen, wenn man sie in der Seitenquelltext-Ansicht des Browsers anschaut,

DEBUG: behavior.mootools found: Array
(
 [file] => /plugins/system/articlesubtitleghsvs/articlesubtitleghsvs.php
 [line] => 84
 [function] => _
 [class] => JHtml
 [type] => ::
 [args] => Array
 (
  [0] => behavior.mootools
 )
)

Nachdem ich in der Datei, im obigen Beispiel articlesubtitleghsvs.php, das veraltete JHtml::_('behavior.mootools'); durch JHtml::_('behavior.framework'); ersetzt habe, ist die Fehlermeldung weg.

Gelegentlich wird gesagt, man müsse durch JHtml::_('bootstrap.framework'); ersetzen. Das beseitigt zwar die Ausgabe der Fehlermeldung auch und man kann erst mal weitermachen, führt aber ggf. dazu, dass dann nötige JavaScript-Dateien des so genannten Mootools-Frameworks, nicht geladen werden, was aber wiederum seit Joomla 3 oft gar nicht mehr benötigt wird. Kompliziert, das.

Zweiteres ist häufiger in Templates der richtige Ersatz. Muss man ausprobieren. Manchmal reicht es auch die fehlerhaft aufrufende Zeile komplett zu entfernen.

PHP Joomla Update Fehler