php-homepage.com

Joomla

Joomla Performance bei Seiten mit hohem Besucheraufkommen(traffic)

Der Erfolg unserer Webseiten in den letzten Jahren machte wieder eine Bilanz in Sachen Ressoucenverbrauch nötig, da wir die Artikelkosten, Kosten für Server, Wartung usw. im Budget der einzelnen Domains berücksichtigt müssen.
Da fiel leider negativ auf, dass die Projekte, die mit Joomla betrieben werden, am meisten Kapazität beanspruchen. Da langsam auch die Performance nachlässt, könnten wir entweder wieder einmal die Server upgraden oder
billiger: die Projekte mit Joomla aufräumen und optimieren

Joomla 3.5

Am 9. März wurde Joomla 3.5 stable veröffentlicht.
Wie schon gewohnt ist das "one click" update über das backend verfügbar, doch Vorsicht!

Ich habe die 3.5 vorerst nur auf einer Testdomain installiert um die ersten Bugs und Sicherheitslücken abzuwarten:-)

Canonical Bug wieder da (bei Nutzung des internen SEF-plugins)update auf Joomla 3.5.1 behebt das Problem wieder

Erstmals in Joomla 3.0 eingeführt, funktioniert das Canonical tag in Joomla 3.5 noch immer nicht.
Grundsätzlich sollte das rel="canonical"eindeutige urls angeben, wenn zB. ein Artikel über verschiedene Urls erreichbar ist.(Ein "Problem" mit den Artikel IDs, das eigentlich keines ist - dh. um einen Artikel in Joomla aufzurufen, genügt es die ID in der Url anzugeben, der Rest der Url kann aus sinnlosen Zeichen bestehen.)Google ist sich der Eigenheit bewusst und rankt die "richtige" Url.
Duplicate Content (innerhalb einer Domain) ist auch nur ein Mythos der SEO-Steinzeit, den man auf vielen "Spezialisten" Seiten findet.

Beispiel des Canonical-Problems in Joomla:

domain.org/kategorie/1-irgendein-titel
ist auch über
domain.org/irgendwas/1
oder etwa
domain.org/1
erreichbar.
Ein canonical-plugin sollte nun im code jeder dieser "falschen" urls
<link rel="canonical" href="http://domain.org/kategorie/1-irgendein-titel" />
einfügen.
macht das Joomla SEF-plugin aber nicht, bzw. macht es falsch

Lösung

Es gibt 3 Lösungsmöglichkeit, die mir bekannt sind:

Canonical urls in Joomla deaktivieren
(fehlerhaftes) Canonical in Joomla ausschalten

Filter löscht Scripte in Joomla

Aus Sicherheitsgründen filtert Joomla jeglichen möglichen Code, um Schaden bzw. Hacks zu vermeiden. Das ist gut so und sollte nur für vertrauenswürdige Administratoren/Autoren geändert werden!
Möchte man aber eigene Scripte einbinden, muss man für den entsprechenden Benutzer die Filterung von Code aufheben: Die folgenden Punkte gelten für PHP wie Javascript gleichermaßen, wobei für Javascript kein zusätzliches Plugin mehr nötig ist.

1) Filter zum einfügen von PHP im Joomla Editor deaktivieren (JCE Editor)

Löschen von Code im JCE deaktivieren
Filter für Code im JCE deaktivieren

Natürlich muss man aufpassen, dass nur ausgewählte Benutzer irgendwelchen Code in die Seite einfügen können!
Dafür hat man im JCE verschiedene Profile die den jeweiligen Benutzergruppen zugewiesen werden können. denn nicht jeder Autor, oder gar registrierte User soll Skripte einfügen dürfen!

2) Filter zum einfügen von PHP in Joomla selbst deaktivieren

Textfilter in Joomla deaktivieren
Um (PHP) Code einfügen zu können,
müssen auch die Filtereinstellungen in Joomla selbst angepasst werden.

Globale Einstellungen von Joomla /Text Filter - hier können seitens der Joomla Benutzergruppensteuerung noch Filter betreffend Code gesetzt werden. (Erklärung zu den Filtern direkt darunter im Backend)

Nun sollte dem Einbinden von Code oder Skripten in Joomla nichts mehr im Wege stehen:-) Beim JCE muss man erst "toggle editor" klicken, um in die Codeansicht zu wechseln, dann erst funktioniert der betreffende Code im Frontend.
Funktioniert in der aktuellen Joomla Version nurmehr mit Javascript/HTML!
Um PHP Code auszuführen, wird ein Plugin wie Sourcerer oder DirectPHP benötigt, das gilt für Artikel wie auch Module!

Javascipte in Joomla einbinden

Sind alle Filter im Editor bzw Joomla Benutzermanagment deaktiviert (wie im Absatz darüber beschrieben), kann man Javascripte an beliebiger Stelle einbinden.

Php in Joomla einbinden

Da Joomla ohnehin PHP verwendet, liegt es nahe, eigene PHP-Sripts oder Code-snippets im Content zu verwenden. Aus Sicherheitsgründen ist in Joomla aber standardmäßig das einfügen von Code/Skripts deaktiviert. In diesem Artikel fasse ich die Ergebnisse meiner Versuche und der verwendeten Erweiterungen kurz zusammen.
Oft will man nicht für jede Funktion ein eigenes Plugin bzw. eine Extension installieren, nur um ein paar Zeilen PHP-code zu realisieren. Da Jommla sowieso PHP verwendet, wieso also nicht gleich ein gewünschtes Codeschnipsel direkt in Artikeln verwenden?
Da sich hierbei unzählige Sicherheitslücken auftun können, ist die Verwendung/Ausführung von Skriptsprachen unter Joomla natürlich stark eingeschränkt.

Skripte aus Sicherheitsgründen deaktiviert "Joomla Skript verschwindet", "Skript verschwindet beim Speichern"

Erste Hürde beim Einfügen von Skripts, meist schon beim Adsense Code usw. sind die Editoren, die man in Joomla verwendet.
Je nach verwendetem Editor (Tiny, JCE,...) sollte man zuerst dessen Optionen/Einstellungen überprüfen, ob hier Filter gesetzt sind oder Skriptsprachen komplett deaktiviert wurden.
Ich verwende am liebsten den JCE, hier kann man verschiedene Profile mit unterschiedlichen Einschränkungen für die diversen Benutzer(gruppen) anlegen: Der erste Schritt, um eigene Scripte, PHP Code in Jommla einzubinden

Php Code in content/Artikel einbinden

Möchte man einfach ein Codeschnipsel/ein paar Zeilen code in einen Artikel in Joomla einbinden bieten sich einige Extensions/Plugins an.
Zum Test verwende ich hier "DirectPHP_v2.5" (mittlerweile ist Version 3.0 für Joomla 3 verfügbar) um als einfaches Beispiel die Serverzeit automatsch von PHP anzeigen zu lassen. (Alternativ gäbe es zB. noch "Sourcerer")

update 26.11.2016
Sourcerer in der Version 6.3.6 wurde kürzlich aktualisiert und steht für Joomla 3.6.x zur Verfügung, andere Plugins teste ich nicht mehr, da sie schon lange nicht mehr aktualisiert wurden. Hier findet ihr das Sourcerer Plugin

Das schlanke Plugin bietet eine Filterliste, um gefährliche php Befehle auszuschließen. Nach Installation und Aktivierung fügt man den gewünschten Code in Joomla ein.
Egal ob Artikel oder Modul (custom htm), man bindet einfach den gewünschten Code umgeben von {source}{/source} ein.
(die Source-tags dienen dem Sourcerer-Plugin zur Erkennung des Codes, der eingebunden und ausgeführt werden soll)

vollständiges codebeispiel:

{source}
<?php
setlocale (LC_TIME, "de_DE"); echo strftime("%c");
?>
{/source}

Als Ergebnis liefert die Funktion strftime die aktuelle Serverzeit.
Fr 18 Aug 2017 20:05:09 UTC
In diesem Beispiel hab ich nur vorher mit "setlocale" die Lokalisierung auf Deutschland gestellt.

Zum Nachlesen:php-Grundlagen.

Php Code in einem Modul einbinden

Um php-Code in ein Modul einzubinden, geht man gleich vor.
Hier bietet Joomla aber noch eine Möglichkeit, zwar mit dem "wrapper" Modul. Mittels wrapper bindet man eine externe Seite oder eine eigene Datei mit include ein. Wer schon mit php include gearbeitet hat, bzw ausgelagerte Skripte verwenden möchte, wird diese Methode wahrscheinlich vorziehen: Man erzeugt ein neues Modul "wrapper", dort gibt man die Url oder den Pfad der Datei an, die man einbinden möchte. Ich habe hier als Beispiel die Datei "includetest.php" mit dem php-Code eingebunden.

Joomla Wrapper Modul
Zur Einbindung von Code (PHP, Javascript, HTML)
bietet sich das wrapper Modul an

Das Wrapper Modul ist dafür gedacht "externe" Webseiten, Frames includes usw. einzubinden
und eignet sich daher optimal für die Einbindung von PHP in Joomla!
Man legt einfach eine Datei mit dem Script irgendwo am eigenen Server ab, meist möchte man aber ohnehin externe Quellen einbinden (Werbung wie Adsense,...) und daher gibt man im Wrapper Modul einfach die Url des Skriptes an.