Joomla
Installation und Upgrade
Grundsätzlich genügt es bei Joomla, das neue Paket herunterzuladen und in das Joomla-Verzeichnis zu kopieren.
Download
Download der alten Version löschen
cd /srv/www/htdocs rm Joomla*.zip dir
Downloadseite der deutschen Version auf Github
Nun den Download Link kopieren und mit wget nach /srv/www/htdocs herunterladen
Entpacken
cd /srv/www/htdocs mkdir temp/joomla_full 2> /dev/null rm temp/joomla_full/* -R 2> /dev/null unzip Joomla*zip -d temp/joomla_full chown wwwrun.www temp/joomla_full -R chmod 775 temp/joomla_full -R
Upgrade einer Joomla Instanz
Name=/srv/www/htdocs/joomla_fg rsync -av temp/joomla_full/* $Name rm $Name/installation -R
Upgrade mehrerer Instanzen
- Konsolenbefehl
Voraussetzung:
- Die Namen aller Joomla-Verzeichnisse müssen mit
joomla_
beginnen.
for i in joomla_* ; do rsync -av temp/joomla_full/* $i ; rm -R $i/installation 2> /dev/null ; php $i/cli/deletefiles.php ; done
- Upgrade Skript downloaden
https://t2792.greatnet.de/download/bash/joomla_upgrade.sh Dieses Script fasst obige Befehlsfolgen in ein Programm zusammen - ohne Gewähr.
- Einfacher ist es, die Befehlsfolgen der Reihe nach über die Zwischenablage in ein Terminal zu kopieren. So mache ich es bei jedem Joomla Update - und das gibt es ja oft genug.
Troubleshooting
Datenbank Reparatur
- Im Backend von Joomla ausführen
Erweiterungen / Verwalten / Datenbank
- SQL Datei importieren
Die SQL Dateien für die jeweilige Joomla Version befinden sich hier
administrator/components/com_admin/sql/updates/mysql
Auf folgender Seite wird dieser nicht gerade einfache Vorgang gut erklärt https://www.marcobeierer.at/anleitungen/joomla-update-anleitung
- Auf dieser Seite nach Alternative Vorgehensweise suchen.
Man kann die passende SQL Datei mit phpMyAdmin importieren - oder im Terminal. Das ließe sich natürlich auch automatisieren mit einem Script.
Keine Aktulisierungen vorhanden
Joomla ist offensichtlich nicht aktuell aber es wird angezeigt, dass keine Aktualisierungen verfügbar sind
Erweiterungen / Verwalten / Aktualisieren
Dann auf den Button Leeren klicken.
- Es wird der Cache geleert.
Templates
Standard Stil definieren
Erweiterungen / Templates / Stile
Beez3 - default
als Standardstil setzen
Modulpositionen anpassen
position-7
Im Template Manager kann man einstellen, dass die Module links oder rechts vom Content positioniert werden.
Position of Navigation: before content
CSS Definitionen
In der Datei user.css kann man Stile definierten, die bei einem Update des Templates nicht überschrieben werden
templates/beez3/css/user.css
- Hintergrundbild im Header ändern
Das gewünschte Hintergrundbild speichern
templates/beez3/images/header.png
CSS Definitionen:
#header { padding-top: 0; .logoheader { background: #FFFFFF URL(../images/header.png) no-repeat min-height: ... (wegen Hintergrundbild) ... }
CSS Styles im Editor
Die Erweiterung JCE Editor downloaden und installieren
Komponenten / JCE Editor / Global Configuration
Pfad zur user.css angeben
Editor Styles / Custom CSS File # Joomla 3 templates/$template/css/user.css # Joomla 4 media/templates/site/$template/css/user.css
Overrides
Will man Komponenten und Module ändern, sollte man einen Output Override erstellen, damit die Änderungen nicht beim nächsten Update überschrieben werden.
- Im Backend
Erweiterungen / Templates / Templates / Beez3 Details und Dateien Overrides erstellen
Die erstellten Overrides befinden sich dann im Verzeichnis
templates/beez3/html
Man kann die Dateien mit einem beliebigen Editor oder gleich im Joomla Backend bearbeiten.
Template Phoca Gweld
Alle Formatierungen befinden sich in einer einzigen CSS Datei im Template
.../css/template.css
- Blaue Umrandung im Bootstrap Dropdownmenü entfernen
Folgende Zeile an 3 Stellen auskommentieren
border-bottom: 3px solid transparent;
Eigene CSS Klassen
Globale CSS Styles definieren
- Eigene CSS Datei
Eigene Klassen können in jeder CSS Datei des Templates definiert werden. Am besten aber in folgender Datei definieren
css/user.css
CSS Klassen für eine bestimmte Seite
- Eine neue CSS Klasse definieren
In der CSS Datei des Templates eine eigene Klasse für ein bestimmtes Element definieren
# Beispiel für einen Tabellenstil table.content_table { border-collapse:collapse; width:100%; } .content_table td { border:1px solid #CCC; padding: 4px; }
- Die CSS Klasse im Backend zuweisen
Im Backend einen Menülink bearbeiten, der den Artikel aufruft, in dem die neue CSS Klasse angewendet werden soll.
In das Feld Seitenklasse den Namen der Klasse mit einem führenden Leerzeichen eingeben.
Einstellungen der Seitenanzeige / Seitenklasse Seitenklasse: content_table
Tipps und Tricks
Datenbank Prefix ändern
Joomla Konfiguration bearbeiten - Beispiel:
# configuration.php public $dbprefix = 'joom4_';
Mit phpMyAdmin die Tabellen umbenennen
* Alle Tabellen markieren (auswählen) * Dropdownliste: Tabellenprefix ersetzen
CSS Datei für den WYSIWYG Editor
Unter Linux kann man einen Symlink zur user.css im Site Template anlegen
- So habe ich einen Link vom Administrator Child Template zum Cassiopeia Child Template angelegt
cd /srv/www/htdocs/joomlaProject/media/templates/site/atum_child ln -s ../../../site/cassiopeia_child/css/user.css editor.css
Dann schaut die Seite im Editor so aus wie im Frontend, wenn man benutzerdefinierte CSS Stile verwendet.
Iframe Wrapper
Iframe Wrapper im Content
- Wrapper Modul erstellen
Das Modul vom Typ Wrapper dient dazu fremdes HTML in einem Iframe darzustellen.
- Position des Moduls angeben
Verwendet man eine im Template definierte Position, dann erscheint der Iframe an dieser Stelle der Joomla Website.
- Man kann aber im Wrapper Modul eine eigene Position mit beliebigem Namen (z.B iframePosition) definieren. Mit Hilfe dieses Positionsnamens lässt sich dann das Wrapper Modul im Content platzieren.
- Iframe im Beitrag positionieren
Folgende Zeile in den Beitrag einfügen:
{ loadposition iframePosition }
Der Positionsname bezieht sich auf obiges Beispiel.
Iframe-Wrapper deaktiviert JQuery
Ich habe festgestellt, dass nach dem Laden einer Iframe-Wrapper Seite die Bootstrap-DropDown Menüs nicht mehr funktionieren. Anscheinend wird JQuery deaktiviert nach Laden des Iframe-Wrappers.
- Es wird übrigens auch Jquery-UI deaktiviert.
Lösung:
- In die index.php des Templates folgende Zeilen einfügen
JHtml::_('jquery.framework'); JHtml::_('jquery.ui', array('core'));
Iframe Wrapper und SSL
Nach Umstellung der Joomla Site auf SSL bzw. wenn Apache SSL erzwingt, werden IframeWrapper Seiten nicht mehr angezeigt.
- Im IframeWrapper muss die Option Erweitert / Hinzufügen ausgeschaltet werden, sonst beginnt der Link immer mit http (statt https).
GET_Parameter an Wrapper übergeben
Override der Komponente Wrapper erstellen.
.../(child)template/html/com_wrapper/wrapper/default.php
Im folgenden Code unmittelbar vor dem Iframe werden einige Parameter an den Iframe-Wrapper übergeben, die dann von dem PHP Skript ausgewertet werden können.
// ******************************* // Parameter an Wrepper übergeben: // ******************************* if ( strstr ($this->wrapper->url,"?") ) $this->wrapper->url .= "&referer=joomla"; else $this->wrapper->url .= "?referer=joomla"; $user = JFactory::getUser(); if ( $user->username ) $this->wrapper->url .= "&user=".$user->username. "&userfullname=".$user->name. "&groups=".implode(",",$user->get('groups')); // ******************************* ?> <iframe <?php echo $this->wrapper->load; ?>
Bilder ausrichten
Mit den Klassen
img-fulltext-left img-fulltext-right
werden die Bilder entsprechend positioniert und bekommen automatisch einen Abstand zum umlaufenden Text.
Bilder untereinander anordnen
Das geht mit dem grafischen Editor nicht wirklich gut. Daher gehe ich so vor: Ich füge zuerst die Bilder in den Text irgendwo ein und bringe sie auf die richtige Größe. Dann erzeuge ich im HTML Modus einen DIV Container:
<div style="width: 160px; float: left;"> </div>
Zwischen diese obigen zwei Zeilen kopiere ich dann die Codezeilen der Bilder hinein, dann schaut das ganze etwa so aus:
* linksbündig <div style="width: 160px; float: left;> <img src="images/stories/joomla-dev_cycle.png" width="150" /> <img src="images/stories/clock.jpg" width="150" /> </div> * rechtsbündig <div style="width: 160px; float: right;"> <img src="images/stories/joomla-dev_cycle.png" width="150" /> <img src="images/stories/clock.jpg" width="150" /> </div>
Die Breite der Bilder width
ist etwas weniger als die Breite des Containers, wie man sieht sieht.
Einfaches Datumsformat ohne Uhrzeit
Folgende Datei bearbeiten: language/de-DE/de-De.ini
# DATE_FORMAT_LC2=%A, den %d. %B %Y um %H:%M Uhr DATE_FORMAT_LC2=%d. %B %Y
Angabe des Autors verkürzen
Folgende Datei bearbeiten: language/de-DE/de-De.com_content.ini
# WRITTEN BY=Geschrieben von: %s WRITTEN BY=%s
Template kopieren
Einige Templates gehören zum Joomla Core. Wenn man eines von diesen Templates verwendet und Anpassungen durchgeführt hat, werden diese beim Update überschrieben. Man kann seit Joomla 2.5 das Template im Backend kopieren.
Joomla Druckvorschau bzw. Druckausgabe formatieren
Die Druckvorschau wird durch das Skript component.php
erzeugt:
/templates/system/component.php
Dafür wird die CSS Klasse contentpane verwendet. Für diese Klasse kann man in der CSS Datei des verwendeten Templates (template.css) Formatierungen festlegen, z.B.: eine Mindestbreite des Containers.
.contentpane { min-width: 720px; }
Achtung: Die direkte Druckausgabe wird nicht über component.php gesteuert. Dazu muss im Head Bereich der index.php des Templates ein Verweis zu einer print.css eingefügt werden:
<link rel="stylesheet" type="text/css" media="print" href="<?php echo $templateUrl; ?>/css/print.css" />
Kalender PopUP formatieren
- Wochenanfang auf Montag legen
# /media/system/js/calendar-setup.js param_default("firstDay",1);
- SA und SO sichtbar machen
In folgender Datei in Zeile 46 den Farbwert #dedede
durch #777777
ersetzen.
# /media/system/css/calendar-jos.css
Modulpositionen anzeigen
An die URL den Querystring ?tp=1
anhängen
Benutzer
Gruppen und Zugriffsebenen
https://blog.formativ.net/joomla-benutzergruppen-und-zugriffsebenen/
Benutzeranmeldung mit Modul
Ein Modul vom Typ Benutzer-Anmeldung auf der Seite platzieren - eventuell in der Navigationsleiste.
- Dies ist die einfachere Variante mit dem einzigen Nachteil, dass etwas mehr Platz benötigt wird. Der Vorteil ist, dass die An- und Abmeldeweiterleitung einfach zu realisieren sind, d.h. man kann auf die zuletzt angezeigte Seite weiterleiten (Standard).
Benutzeranmeldung mit einem Menüeintrag
Einen Menüeintrag vom Typ Benutzer-Anmeldeformular erzeugen.
- Nachteil: Die An- und Abmeldeweiterleitung vom Typ Standard leitet weiter zum Anmeldeformular, da die zuletzt angezeigte Seite eben das Anmeldeformular ist.
Das ist nicht sehr sinnvoll. Man kann statt der Standard-Option einen bestimmten Menüeintrag als Weiterleitungsziel nehmen, z.B. die Startseite der Joomla-Site.
Login Menüpunkt ausblenden
Möchte man nach Anmeldung eines Benutzer den Menüpunkt Login ausblenden, so muss man einige Änderungen in der Benutzerverwaltung durchführen.
- Eine neue Benutzergruppe anlegen
# Beispiel: Name: NonRegistered
- Hinweis: Ab Joomla 3 wird angeblich eine Benutzergruppe Gast automatisch nach der Installation angelegt.
- Eine neue Zugriffsebene anlegen
# Beispiel: Name: Gast
Nur die neue Benutzergruppe NonRegistered soll Zugriff haben (anklicken).
- Zugriffsebene Public ändern
In der Zugriffsebene Public muss nun die neue Gruppe NonRegistered zusätzlich aktiviert werden.
- Benutzer Optionen ändern
Auf das Optionen Symbol klicken (rechts oben) und als Gast Benutzergruppe die neue Gruppe NonRegistered eintragen.
Authentifizierung über LDAP
- Das Plugin Authentifikation - LDAP aktivieren
- Plugin konfigurieren
Host: localhost Port: 389 LDAP V3: Ja Autorisierungsmethode: Verbinden und Suchen Basis-DN: dc=network Suchstring: &(uid=[search]) (gidNumber=601) Voller Name: gecos E-Mail: mail Benutzer-ID: uid
Hinweis: Das LDAP Attribut mail muss bei jedem Benutzer vorhanden sein.
Phoca Gallery
Konfiguration und Anwendung
- Phocagallery Plugin
Zur Phocagallery gibt es ein Plugin, mit dem man in einen Beitrag Fotos aus einer Galerie einbinden kann.
Folgende Zeile in den Artikel einfügen:
# Beispiel {phocagallery view=category|categoryid=15}
Nach der Installation muss das Plugin aktiviert werden.
Optionen
- Thumbnails
Große Thumbnails = Detailansicht: 800 x 600 Mittlere Thumbnails: 175 x 175 Kleine Thumbnails: 100 x 100
Detail Fenstergröße: 820 x 680
Bildergalerie hinzufügen
Upload
Am Server ein neues Verzeichnis erstellen
images/phocagallery/neuerOrdner
Fotos mit Dateimanager, z.B. Dolphin oder mit einem FTP Client, z.B. Filezilla, in den neuen Ordner hochladen
- Sicherstellen, dass der Benutzer wwwrun (... wenn openSuse) Schreibrechte in diesem Ordner hat
Joomla Backend
Komponenten / Phocagallery / Bilder / Mehrfaches Hinzufügen
Auf der rechten Seite werden alle Gallery Ordner angezeigt. Den neuen Ordner auswählen per Checkbox und dann auf Speichern und Schließen klicken.
Nun sollten die Thumbnails automatisch generiert werden.
Falls ein Fehler auftritt, wird der Vorgang abgebrochen und die automatische Thumbnailerstellung deaktiviert. Im Phocagallery Kontrollzentrum kann man unter Optionen diese wieder einschalten.
Phoca Mail
Abmelden vom Newsletter nicht möglich
In der Komponente JCE Editor muss man Relative URLs einschalten.
JCE Administration / Editor Profiles / Default / Editor Parameters
Weblinks with thumbshots
- Download und Installation
Download von der Website des Autors: http://www.bretteleben.de/lang-en/joomla/weblinks-with-thumbshots.html
Nach der Installation muss diese Erweiterung im Joomla Backend eingeschaltet werden: Enable it
Durch diese Erweiterung zeigt Joomla kleine Vorschaubilder an anstatt der Standardsymbole für Weblinks.
Die Komponente überschreibt nur 3 Dateien der originalen Joomla Weblinks Komponente. Die Originaldateien werden gesichert und wieder zurück kopiert, wenn die Komponente ausgeschaltet wird.
Geänderte Dateien:
# /srv/www/htdocs/joomla_fg/administrator/components/com_weblinkswt/backup> ./config.xml ./default_items.php ./view.html.php
- Konfiguration
Es muss ein Thumbshot-Server in die Konfiguration eingetragen werden. Übernimmt man den vorgegebenen Eintrag, werden aber anscheinend keine Thumbs erzeugt:
# Default Konfiguration
http://open.thumbshots.org/image.pxf?url=#URL#
# Anderer Server, der funktioniert:
http://www.thumbshots-server.com/webthumb/webthumb.php?url=#URL#
Damit beim Erstellen eines neuen Menüpunktes zu einer Weblinks-Kategorie der geänderte Servereintrag übernommen wird, muss man offensichtlich auch noch in folgender Datei den Server eintragen bzw. ändern:
administrator/components/com_weblinks/config.xml
Sicherheit
Kontaktformular gegen SPAM Bots absichern
Folgende Datei bearbeiten:
/components/com_contact/views/contact/tmpl/default_form.php
- Ein verstecktes Formularfeld hinzufügen:
<input type="text" name="security" style="display: none;">
Die JavaScript Funktion validate_form ändern:
... if (frm.security === "") { frm.submit(); }
Ein SPAM Bot wird automatisch alle Felder ausfüllen. Das Formular wird jedoch nur dann abgeschickt, wenn dieses versteckte Feld leer ist.
reCAPTCHA
Plugin aktivieren
Im Joomla Backend das Plugin Captcha - reCAPTCHA
aktivieren.
Schlüssel beziehen
Man muss einen öffentlichen und einen geheimen Schlüssel eingeben.
- Diese zwei Schlüssel bekommt man, indem man auf folgender Seite jene Domain registriert, über welche die Joomla Seite erreichbar ist.
https://www.google.com/recaptcha/admin
Klick auf das '+' Symbol rechts oben.
reCAPTCHA Version
- reCAPTCHA Version 2
- Kästchen Ich bin kein Roboter
- Die zwei Schlüssel kopieren und im Joomla-Plugin einfügen
Kontaktformular
Im Joomla Backend muss unter Benutzer / Optionen" reCAPTCHA aktiviert werden, wenn es für das Kontaktformular verwendet werden soll.
- Falls reCAPTCHA im Kontaktformular nicht erscheint, dann unter Komponenten / Kontakte / Option die Formulareinstellungen überprüfen.
Troubles
Komponenteninstallation nicht möglich
Fehlermeldung:
Es wurde kein Installationsplugin aktiviert ...
Lösung:
Erweiterungen / Verwalten / Überprüfen
Die gewünschten Installtionsplugins auswählen und auf Installieren klicken und dann ...
Erweiterungen / Plugins
... die neu installierten Installer - Plugins aktivieren.
HTML wird entfernt nach Speichern einer Seite
Für die Benutzergruppe ist ein Textfilter gesetzt auf den Wert Kein HTML
Joomla | Globale Konfiguration | Textfilter
Den Textfilter ändern auf den Wert Keine Filterung
Overrides
Offline Seite
Die Offline Seite kann man durch eigenen Code ersetzen bzw ergänzen.
- Folgende Datei in den Ordner
template/mein_template
kopieren und bearbeiten:
template/system/offline.php
oder gleich eine eigene Offline-Seite mit PHP erstellen.
- Joomla verwendet dann nicht diese Standardseite im system Verzeichnis, sondern den Override im aktuell verwendeten Template.
Das ist meine Offline Seite: <?php defined('_JEXEC') or die; ?>
<head> </head> <body>
<style> .offline-container { max-width:100%; margin-top:4px; padding: 10px; background: #DDD; border: solid thin #999; } @media only screen and (min-width: 721px) { .offline-container { position: absolute; left: 50%; width: 600px; margin-left: -300px; } } </style>
require_once("/srv/www/include/php/application.php"); define ("DEVELOP",false); define ("PROJ_NAME","abendmusik.at"); define ("APP_NAME","Abendmusik in der Magdalenabergkirche"); echo application::render_offlinePage(array( "referer" => "joomla", "offline" => true, "days" => 1, "hours" => 2 )); ?>
</body> </html>
Die hier aufgerufene Funktion <code>application::renderOfflinePage</code>zeigt an, wie lang die Seite offline ist. Hier der Code meiner Offline Funktion: <pre> static function renderOfflinePage($params=array()) { date_default_timezone_set('Europe/Vienna'); foreach ( $params as $key => $value ) $$key = $value; $start = mktime(date('H'), 0, 0, date("m"), date("d") , date("Y")); $sec = ($days * 24 + $hours) * 60 * 60; $ende_timestamp = $start + $sec; $Uhrzeit = strftime ("%H:00",$ende_timestamp); if ( $days == 0 ) { $Datum = "heute"; } else { $Datum = strftime ("%d. %B %Y",$ende_timestamp); } $return = "<h1>Wartung</h1>"; $return .= "<h2>".$caption."</h2>"; $return .= "<p>Diese Seite ist voraussichtlich bis <strong>".$Datum." ".$Uhrzeit."</strong> nicht verfügbar.</p>"; $return .= "<p>Bitte um Verständnis.</p>"; $return .= "<a href='mail@example.com'>Mail</a>an Webmaster."; return $return; }
Overrides verwalten
Die Änderungen, die man im Code durchführt, sollten möglichst gut kommentiert werden.
Hat man von einer Komponente ein Override im Template angelegt, so wird das nicht überschrieben bei einem Update der Core Komponenten, was ja der Sinn von Overrides ist. Das hat aber auch zur Folge, dass Verbesserungen im Core nicht wirksam werden im Override.
Falls man einmal Overrides nach Core-Updates ändern muss, ist es hilfreich, wenn man das Override sauber mit Kommentaren versehen hat.