Joomla: Unterschied zwischen den Versionen

Aus Mediawiki Ferdinand Gruber
Zur Navigation springen Zur Suche springen
K
K
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 5: Zeile 5:
 
[[Joomla Templates]]
 
[[Joomla Templates]]
  
== Tipps und Tricks ==
+
[[Joomla Tipps]]
=== 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 <tt>user.css</tt> 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.
 
  
Es gibt noch wietere Möglichkeiten, wie man ein Modul in einen Beitrag einbetten kann: [https://docs.joomla.org/How_do_you_put_a_module_inside_an_article%3F/de https://docs.joomla.org]
+
[[Joomla Benutzerverwaltung]]
  
==== Iframe-Wrapper deaktiviert JQuery ====
+
[[Phoca Joomla Extensions]]
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 ====
+
[[Joomla Security und Troubles]]
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 <tt>http</tt> (statt <tt>https</tt>).
 
 
 
==== GET_Parameter an Wrapper übergeben ====
 
Override der Komponente Wrapper erstellen.
 
.../(child)template/html/com_wrapper/wrapper/default.php
 
Im folgenden Code unmittelbar vor dem <tt>Iframe</tt> 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:
 
<pre>
 
<div style="width: 160px; float: left;">
 
 
 
</div>
 
</pre>
 
Zwischen diese obigen zwei Zeilen kopiere ich dann die Codezeilen der Bilder hinein, dann schaut das ganze etwa so aus:
 
<pre>
 
* 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>
 
</pre>
 
Die Breite  der Bilder <code>width</code> 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
 
=== Joomla Druckvorschau bzw. Druckausgabe formatieren ===
 
Die Druckvorschau wird durch das Skript <code>component.php</code> 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 <code>#dedede</code> durch <code>#777777</code> ersetzen.
 
# /media/system/css/calendar-jos.css
 
 
 
=== Modulpositionen anzeigen ===
 
An die URL den Querystring <code>?tp=1</code> anhängen
 
: Beispiel: http://t2792.greatnet.de/joomla_sieglinde?tp=1
 
 
 
== 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.
 
: http://www.phoca.cz/download/category/14-phoca-gallery-plugin
 
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 <tt>wwwrun</tt> (... 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 <tt>Speichern und Schließen</tt> 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 <tt>Optionen</tt> 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
 
 
 
== 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 <code>Captcha - reCAPTCHA</code> 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 <tt>Benutzer / Optionen"</tt> '''reCAPTCHA''' aktiviert werden, wenn es für das Kontaktformular verwendet werden soll.
 
:: Falls reCAPTCHA im Kontaktformular nicht erscheint, dann unter <tt>Komponenten / Kontakte / Option</tt> 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 <code> template/mein_template </code> 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 ein Beispiel meiner Offline Seite(n):
 
<pre>
 
<?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>
 
 
 
    <div class="offline-container"> <?php
 
        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
 
        )); ?>
 
    </div>
 
</body>
 
</html>
 
</pre>
 
 
 
Die in obigem Code 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;
 
} </pre>
 
 
 
=== 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.
 

Aktuelle Version vom 11. Dezember 2024, 18:46 Uhr