Webseiten und Zubehör Programmierung Umsetzung Pflege Backups Betreuung Joomla!®-Spezialist
Joomla 3 versteht JHtml::core() nicht mehr

Nach Updates von Joomla 2.5 auf 3 schmeißen viele Templates eine Fehlermeldung der Art Fatal error: Call to undefined method JHtml::core() in /com_weblinks/category/default_items.php. Meist sind Overrides im 2.5-er-Template schuld, die ungültigen Code enthalten. Möchte man sein altes Template erst mal weiterverwenden, hilft ein einfacher Fix. Man muss nur eine Zeile austauschen.

Auf meiner Seite sind Structured Data (Rich Snippets) als JSON-LD per eigenem Plugin integriert, da mir das Microdata-Format Joomlas zu unflexibel ist. JSON-LD wird im HEAD per SCRIPT-Tags eingefügt. Darin auch der gesamte Artikeltext. Bevor Mobilgeräte explodieren, weil sie den unsichtbaren Text doppelt laden müssen, brauchte ich Code, um die Structured Datas nur Robots zu zeigen.

Oft ist die Datenbanktabelle #__redirect_links mit 1000en Einträgen gefüllt (mehrere MB), wenn man lange nicht in die Joomla-Komponente Umleitung (com_redirect) reingesehen hat oder nur versehentlich das Plugin aktiviert hat, das die 404-Links sammelt. Löschen im Backend kann zeitaufwendig sein, wenn das Auflisten aller Einträge wegen der Serverleistung nicht möglich ist.

Wie man neue Modulpositionen in Joomla anlegt ist hundertfach im Netz beschrieben und abgeschrieben. Aber wie schafft man es jetzt mittels Bootstrap 2 mehrere, verschiedene Module an einer Position nebeneinander anzuzeigen oder mehrere Modulpositionen in einer Reihe anzuordnen. Gar nicht so schwer, wenn man bis zwölf zählen und rechnen kann.

Kürzlich bin ich auf eine Forums-Antwort des befreundeten Re:Later gestoßen, mit Code wie man in Joomla unerwünschte JavaScript-Links entfernen kann, damit sie nicht im HEAD des Templates geladen werden. Joomla sammelt diese erst in diversen Erweiterungen zusammen, bevor sie in den Quelltext der Webseite eingesetzt werden. Sein Code ist nicht ganz rund.

Whoi is online im Frontend anzeigen

Ein einfach gehaltenes Who-is-online-Skript, mit dem man den aktuellen Anmelde-Status der registrierten Besucher im Frontend anzeigen lassen kann. Ich binde ihn mit dieser Technik in diesen Beitrag ein: Mit Modulstil eigene PHP-Dateien einbinden. Der Code funktioniert natürlich auch in eigenen Erweiterungen, Overrides oder mit einer der Joomla-Erweiterungen zum Einbinden von PHP.

Unfertiges "Tutorial", aber der Code klappt schon mal so weit

Vorausssetzung: Mindestens 1 registierter Joomla-User.

Möglichkeit im Frontend das eigene Profil zu bearbeiten.

Aktiviertes Plugin Benutzer - Profile

Wie verwendet man Modulstile? Wodurch unterscheiden sie sich? Wie eigene?

Deutsches Tutorial von Re:Later. Abschrift einer Schulung plus ergänzende Bilder, vereinfachte PHP-Codes, sprachliche Vereinfachungen, inhaltliche Ergänzungen. Auch der Anfänger findet hier Hinweise, was Modulstile überhaupt sind. Warum wird mal ein Titel angezeigt, mal nicht? Warum ändern Einstellungen im Backend nichts im Frontend?

Gelegentlich möchte man z.B. in einen Joomla-Beitrag eigenen, dynamischen PHP-Code einfügen. Man kann 3rd-Erweiterungen verwenden (und sich einarbeiten), und / oder muss Codes erst unschön umschnitzen, damit sie die Methoden des Joomla-Frameworks nutzen können. Mittels eigenem Modulstil und dem Joomla-Plugin loadmodule sind solche Hacks unnötig. Die Einrichtung ist nicht schwer.

Unerwünschte Inline-Styles im JCE-Editor

Nachdem ich in einem Chrome-Browser einen Beitrag mit dem JCE-Editor fertig hatte, bei dem ich per Copy & Paste Passagen hin und her kopiert hatte, stellte ich fest, dass der HTML-Quelltext mit Inline-Styles der Art <span style="line-height: 1.42857143;">text text</span> zugemüllt war. In einem Firefox-Browser war mir das noch nie passiert, aber der Safari zeigte das selbe nervige Verhalten.

Fehlermeldung bei nicht erlaubtem Speichern von durch Plugin blockierten Nutzern

Zwar kann man in Joomla in den globalen Benutzeroptionen das Ändern des Benutzernamens unterbinden, aber nicht das Ändern des Kennworts. Nachdem die Frage regelmäßig in Foren auftaucht, mir die Lösungen viel zu aufwendig oder "radikal" erscheinen, präsentiere ich hier ein abgespecktes Basisplugin, basierend auf einer Idee von Re:Later, der das mal als Demo für GHSVS programmierte.

Der Override onlyReadmoreIfNeeded.php versteckt ggf. das Weiterlesen

Das joomlaeigene Modul mod_articles_category zeigt einen Weiterlesenlink an, auch, wenn schon aller Text im Modul selbst angezeigt wurde und eine Ansicht des kompletten Beitrags eigentlich gar nicht mehr nötig ist. Unter bestimmten Voraussetzungen kann man aber einen simplen Override verwenden, der Weiterlesen nur anzeigt, falls nötig. Am besten gleich als so genanntes alternatives Layout. 

Joomla blockiert Löschung einer irgendwo verwendeten Benutzer-Zugriffsebene

Ich wollte beim Entrümpeln im Backend eines mächtigen Joomlas, viele Inhalte, verschiedene Komponenten, Menüs usw., eine überflüssige User-Zugriffsebene löschen. Ich bekam die Meldung "Fehler: Sie können diese Zugriffsebene nicht löschen, da sie von Inhalten verwendet wird". Ein PHP-Script half beim Finden, weil das Suchen per Filter zu zeitaufwendig oder gar nicht möglich war.

Häufiger zu sehende Fehlermeldung nach Updates

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.

Trotz korrekter Einstellung keine Edit-Buttons im Frontend zu sehen

In einigen nachinstallierten Joomla-Templates, die kein CSS von Bootstrap 2 laden, werden angemeldeten Administratoren die Bearbeitungs-Icons für Menüs und Module nicht angezeigt, obwohl sie "technisch gesehen" vorhanden sind, also das entsprechende JavaScript von Joomla geladen wurde. Man muss eigenes CSS nachreichen, um die Buttons zu erzwingen.

Ein Tutorial, das ein Basiswissen liefern soll, wie alles so funktioniert, ungefähr, oder doch nicht und warum eigentlich dann doch irgendwie... Es beschäftigt sich nicht mit CSS, HTML, Modulpositionen etc. eines Template im Detail. Es geht meist um den Template-<HEAD>-Bereich , in dem z.B. Skripte geladen werden. Aber wie kommen die da hin? Das hier ist ein "Mach-mal-und-probier-dann-selbst-Tutorial".

In diesem zweiten Teil zeige ich wie man bspw. Bootstrap-Dateien, die man joomlakonform eingebunden / geladen hat mit eigenen updatesicher überschreiben kann. Beispielsweise um Joomla 3 von Bootstrap 2 auf 3 aufzurüsten oder das Laden von Bootstrap aus dem Core zu verhindern, indem man einfach leere Override-Dateien anlegt. Wer weiterdenkt. . .

Anzeige der Cache-Ordner in der Joomla-Systeminformation

Wer im Backend einen Blick in das Menü System > Systeminformationen > Tabulator "Verzeichnisrechte" wirft, findet in einem Standard-Joomla Angaben zu den zwei aktuellen Cache-Ordnern. Normalerweise wird im Frontend der Ordner /cache/ und im Backend das Verzeichnis /administrator/cache/ verwendet. Man kann aber auch seinen eigenen Ordner festlegen.

Bevor das Framework geladen wird, werden PHP-Konstanten definiert

Joomla definiert für Coder nützliche PHP-Konstanten (z.B. JPATH_SITE). Im Frontend wird dafür die Core-Datei /includes/defines.php und im Backend /administrator/includes/defines.php geladen. Man kann diese Konstanten updatesicher überschreiben / ersetzen und / oder eigene hinzufügen, um sie im Joomla-Framework überall verfügbar zu haben.

Ähnlich der PHP-Methode

echo JText::_('TPL_BEEZ3_ALTCLOSE');

kann man In Joomla-Javascript mit JText und Sprachplatzhaltern aus *.ini-Dateien arbeiten. Am Beispiel eines alerts:

alert(Joomla.JText._('TPL_BEEZ3_ALTCLOSE'));