header-xh-01 header-xh-02 header-xh-03 header-xh-04 header-xh-05 header-xh-06 header-xh-07 header-xh-08 header-xh-09 header-xh-10 header-xh-11 header-xh-12 header-xh-13 header-xh-14
Templates für CMSimple_XH von
KRL Software-Development
private, nicht kommerzielle Website
by Karl Richard Lembach
Sie sind hier: Startseite > Template krl-3col-flex > Dateien des Templates > template.htm
Letzte Bearbeitung:

template.htm

Das CMSimple_XH erwartet als Name der Template-Datei 'template.htm' für das HTML-Gerüst und stylesheet.css für die Styles. Daher ist es bei 'template.htm' geblieben, obwohl die Datei von mir mittlerweile bis auf die letzten 30 und ein paar Zeilen komplett in PHP-Code umgeschrieben wurde.
Dies geschah aus folgenden Gründen:

  1. Die Datei beherbergt inzwischen die vielfältigsten Steuerfunktionen, die sich nur in einer Programmiersprache realisieren lassen. Dafür bietet sich PHP an, da PHP auf jedem Server läuft.
  2. Durch PHP den HTML-Code dynamisch erzeugen zu lassen bringt den Vorteil, dass nur der wirklich notwendige HTML-Code an den Browser ausgeliefert werden muss. So wird die Datenmenge und Ladezeit auf das notwendige Minimum reduziert. Da zur Realisierung einiger Styles ein serverseitiges Cachen nicht möglich ist, ist im Gegenzug eine Reduzierung der Ladezeit unverzichtbar.
  3. Die Datei ist umfangreich mit Kommentaren versehen. Kommentare sind für den Normalbetrieb einer Website jedoch komplett unnötig. Deshalb habe ich die Kommentierung komplett als PHP-Kommentare erstellt. Diese werden nicht an den Browser ausgeliefert.

 

Auf den folgenden Unterseiten werde ich auf die Teilbereiche der template.htm eingehen.

 

Dateiname: templates/krl-3col-flex/template.htm

<!DOCTYPE HTML>
<?php
/*
* @category Template for CMSimple_XH Version 1.7+
* @package krl-3col-flex
* @Version 3.2.1
* @file template.htm
* @last_modified 04.03.2024
* @author Karl Richard Lembach | https://lembach-cmsimple.de/?Home
* @copyright 2021 - 2024 Karl Richard Lembach <https://lembach-cmsimple.de>
* @license https://www.gnu.org/licenses/gpl-3.0 GNU GPLv3
* @link https://template.lembach-cmsimple.de/?Template-krl-3col-flex
* @contact https://lembach-cmsimple.de/?Home/Kontakt-Formular | webmaster@lembach-cmsimple.de

Dieses Programm ist freie Software.
Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht,
weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach Ihrer Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE,
sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.

Sie sollten ein Exemplar der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, siehe <https://www.gnu.org/licenses/gpl-3.0>.
Deutsche Übersetzung (kein rechtskräftiger Ersatz des Originals): http://www.gnu.de/documents/gpl.de.html

Die Version 1.0 dieses Templates basiert auf der Arbeit von Frank Seidel https://www.cmsimple-xh.org/de/?Downloads/Templates.

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Alle Kommentare werden in diesem Template als PHP-Kommentare implementiert.
An den Browser wird nur der generierte HTML-Code ausgeliefert.
Es werden keine Schriften mitgeliefert. Damit wird der Umfang der Datenmenge verkleinert und somit die Ladezeit der Seite ein klein wenig verkürzt.
Demzufolge sind außer dem Font Awesome (via Plugin in CMSimple_XH enthalten) nur die in Helvetica (https://de.wikipedia.org/wiki/Helvetica_(Schriftart))
und sans-serif (https://de.wikipedia.org/wiki/Grotesk_(Schrift)) enthaltenen Schriftzeichen im Template vorgesehen.
Andere Schriften lassen sich natürlich im Editor wählen.
Viele der zum Template gehörenden Dateien werden nur im Editormodus verwendet, andere Dadeien werden nur dann geladen, wenn sie für die jeweilige Aufgabe benötigt werden.
So sollen weitere Einsparungen an Datenverkehr erreicht werden.
*/

// Texte in der aktiven Sprache einlesen
// Für den Fall, dass in der fremdsprachlichen Sprachdatei nicht alle Variablen enthalten sind, wird zuerst einmal die deutsche Datei eingelesen.

$text = array();
if (is_readable($pth['folder']['template'].'languages/de.php'))
{
include $pth['folder']['template'].'languages/de.php';
} else {
echo '<p style="color: black; background-color: yellow; border: 2px solid red; padding:1ex;">Das Template "krl-3col-flex" kann die Sprachen-Datei nicht finden: "languages/de.php"<br>
The template "krl-3col-flex" cannot find the language file: "languages/de.php"</p>'."\n";
}
if ($sl !== "de")
{ // Wenn die aktive Sprache nicht Deutsch ist wird die Sprachdatei der aktiven Sprache nachzuladen versucht.
if (is_readable($pth['folder']['template'].'languages/'.$sl.'.php'))
{
include $pth['folder']['template'].'languages/'.$sl.'.php';
}
else // Wenn die Sprachdatei nicht existiert wird die englische (ersatzweise die deutsche) Sprachdatei als Default-Datei in die Ziel-Sprachdatei kopiert.
{
if (is_readable($pth['folder']['template'].'foreign-language.php'))
{
include $pth['folder']['template'].'foreign-language.php';
}
else
{
echo '<p style="color: black; background-color: yellow; border: 2px solid red; padding:1ex;">Das Template "krl-3col-flex" kann folgende Datei nicht finden: "foreign-language.php"<br>
The template "krl-3col-flex" cannot find the following file: "foreign-language.php"</p>'."\n";
}
}
}

// Wenn Konfigurationsdatei fehlt, diese aus der config-default.ini.php erstellen

$default_file = $pth['folder']['template'].'config/config-default.ini.php';
$ini_file = $pth['folder']['template'].'config/config.ini.php';

if (!file_exists($ini_file))
{
if (file_exists($default_file))
{
copy($default_file, $ini_file);
}
}

/*
Einige Dateien des Templates müssen zwingend beschreibbar sein, damit es nicht zu Fehlermeldungen kommt.
Hier werden diese Dateien einzeln auf Beschreibbarkeit getestet und im Fehlerfall (nicht beschreibbar) eine Fehlermeldung vor und oberhalb der Website ausgegeben.
*/

// Flag für Beschreibbarkeit auf "true" setzen

$template_is_writable = 1;

// Array anlegen mit den Namen der Dateien, die beschreibbar sein müssen.
// $pth['folder']['template'] hat als erstes Zeichen einen '.', der durch substr($pth....,1) abgeschnitten wird

$arr = array($pth['folder']['template'] . 'stylesheet.css');
$arr[] = $pth['folder']['template'] . 'template.htm';
$arr[] = $pth['folder']['template'] . 'colordefinition.css';
$arr[] = $pth['folder']['template'] . 'config/config.ini.php';

// Ordner der Sprachdateien

$languagedir = $pth['folder']['template'].'languages/';

// Sprachdateien in .../languages/**.php ermitteln und ans Array anhängen

if (is_dir($languagedir))
{
if ($dh = opendir($languagedir))
{
while (($file = readdir($dh)) !== false)
{
if (($file !== ".") and ($file !== ".."))
{
$arr[] = $languagedir . $file; // System-Ordnername mit Dateinamen
}
}
closedir($dh);
}
}
// Beschreibbarkeit für jedes Element im Array überprüfen und im Fehlerfall Meldung ausgeben

foreach ($arr as &$filename) {
if (!is_writable($filename)) {
echo '<p style="color: black; background-color: yellow; border: 2px solid red; padding:1ex;">' . $text['template_file_not_writable'] . ' ' . $filename . '</p>' . "\n";
$template_is_writable = 0;
}
}

// Wenn eine der Dateien nicht beschreibbar ist Abbruch der Ausgabe der Webseite

if ($template_is_writable <> 1)
{
die;
}

// Konfigurationsdatei einlesen -----------------------------------------

if (is_readable($pth['folder']['template'].'config/config.ini.php')) {
include $pth['folder']['template'].'config/config.ini.php';
} else {
echo '<p style="color: black; background-color: yellow; border: 2px solid red; padding:1ex;">' . $text['template_configfile_not_found'] . '</p>' . "\n";
}

// Wenn das Plugin CnC installiert ist wird die Warnmeldung wegen inkompatibilität ausgegeben.

if (is_readable($pth['folder']['plugins'].'cnc/index.php')) {
die('Das Template <b>krl-3col-flex</b> ist in dieser Version nicht mehr mit dem Plugin CnC kompatibel.');
}

// Wenn jQuery4CMSimple installiert ist wird die Bibliothek geladen.

// if jQuery4CMSimple is installed, include its jQuery library
if (is_readable($pth['folder']['plugins'].'jquery/jquery.inc.php')) {
include_once $pth['folder']['plugins'].'jquery/jquery.inc.php';
include_jQuery();
}

// Wenn das FontAwesom Plugin installiert ist, wird die Funktion aufgerufen, andernfalls eine Warnmeldung ausgegeben.

// Plugin FA_XH
if (function_exists('fa_require')) {
fa_require();
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_fa_xh_not_installed1'] . '<br>' . $text['template_fa_xh_not_installed2'] . ' <a href="https://github.com/cmb69/fa_xh/releases" target="_blank">Download</a><br>' . $text['template_fa_xh_not_installed3'] . '</p>'."\n";
}

// Plugin Morepagedata nicht installiert? -> Warnmeldung ausgeben.

if (!function_exists('getPageDataFields')) {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_morepagedata_not_installed1'] . '<br>' . $text['template_morepagedata_not_installed2'] . ' <a href="https://github.com/cmsimple-xh/morepagedata/releases/" target="_blank">Download</a><br>' . $text['template_morepagedata_not_installed3'] . '</p>'."\n";
}

// Plugin Slideshow nicht installiert, die Slideshow nicht abgeschaltet und entweder die "headerslideshow" oder die "headerslideshowbelow" ist aktiviert, dann Warnmeldung ausgeben.

if ((!function_exists('slideshow')) and (!isset($NoSlideShow))) {
if (($Headertyp == "headerslideshow") or ($Headertyp == "headerslideshowbelow")) {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_slideshow_not_installed1'] . '<br>' . $text['template_slideshow_not_installed2'] . ' <a href="https://github.com/cmb69/slideshow_xh/releases/" target="_blank">Download</a><br>' . $text['template_slideshow_not_installed3'] . '</p>'."\n";
}
}

/* Plugin SimplePlugins_XH Edition KRL nicht installiert (für Funktion "recently_changed" notwendig) -> Warnmeldung ausgeben.

if (!function_exists('recently_changed')) {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_simpleplugins_not_installed1'] . '<br>' . $text['template_simpleplugins_not_installed2'] . ' <a href="https://lembach-cmsimple.de/?Download/Plugins-Modifikationen" target="_blank">Download</a><br>' . $text['template_simpleplugins_not_installed3'] . '</p>'."\n";
}
*/

// Templateerweiterung changeFontSizeByUser laden, wenn nicht möglich -> Warnmeldung ausgeben.

if (is_readable($pth['folder']['template'].'fontsize.inc.php')) {
include 'fontsize.inc.php';
$changeFontSize = true;
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "fontsize.inc.php"</p>'."\n";
}

// Im Editiermodus werden Dateien in Arrays eingelesen und die Eingaben via POST verarbeitet.

if ($edit) {
if (is_readable($pth['folder']['template'].'config/input_via_post.php')) {
include $pth['folder']['template'].'config/input_via_post.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "input_via_post.php"</p>'."\n";
}
}

// Dem Browser mitteilen in welcher Sprache die Website getextet ist.

echo '<html lang="'.$sl.'">'."\n";
echo '<head>'."\n";

// Im Admin-Modus wird der Browser-Cash abgeschaltet, damit Änderungen an den Einstellungen sofort nach einem Reload angezeigt werden (zumindest bei den Browsern, die diese Angaben auch berücksichtigen).

if (XH_ADM) {
echo '<meta http-equiv="cache-control" content="must-revalidate" />'."\n";
echo '<meta http-equiv="cache-control" content="no-store, no-transform" />'."\n";
echo '<meta http-equiv="pragma" content="no-cache" />'."\n";
echo '<meta http-equiv="Last-Modified" content="'.gmdate("D, d M Y H:i:s").' GMT" />'."\n";
} else {

// Im User-Modus wird die Gültigkeits-Dauer der Seite und das Datum der letzten Änderung ausgegeben

echo '<meta http-equiv="cache-control" content="max-age=3600" />'."\n";
echo '<meta http-equiv="Last-Modified" content="'.gmdate(" D, d M Y H:i:s",$pd_current['last_edit']).' GMT" />'."\n";
}

// Ausgabe des Seitenkopfes durch das CMS.

echo '<meta name="viewport" content="width=device-width, initial-scale=1">'."\n";
echo head();

// Benutzerdefinierte Modifikationen der stylesheet-Formate laden.

if (is_readable($pth['folder']['template'].'usermodify.css')) {
echo '<link rel="stylesheet" type="text/css" href="'.$pth['folder']['template'].'usermodify.css">'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "usermodify.css"</p>'."\n";
}

// Benutzerdefinierte Änderung der Fontgroesse - Stylesheet laden

if (isset($changeFontSize)) {
if (is_readable($pth['folder']['template'].'fontsize.css.php')) {
echo '<link rel="stylesheet" type="text/css" href="'.$pth['folder']['template'].'fontsize.css.php" media="all" />'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "fontsize.css.php"</p>'."\n";
}
}

// favicon.php enthält den HTML-Code zur Festlegung der Favivons, der sich nicht ändert, auch wenn das Template ein Update erhält -> Datei laden, wenn nicht möglich -> Warnmeldung ausgeben.

if (is_readable($pth['folder']['template'].'favicon.php')) {
include $pth['folder']['template'].'favicon.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "favicon.php"</p>'."\n";
}

// wenn das Plugin privacy installiert ist

if (function_exists('privacy')) {

// Wenn die Zustimmung zu Cookies gegeben wurde, Aufruf der cookie-perm-tools.php. Wenn nicht möglich -> Warnmeldung ausgeben.
if (privacy_agreed()) {
if (is_readable($pth['folder']['template'].'cookie-perm-tools.php')) {
include $pth['folder']['template'].'cookie-perm-tools.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' .$text['template_file_not_found'] . ' "cookie-perm-tools.php"</p>'."\n";
}
}
}

// Wenn im Browser Scripte erlaubt sind, wird hierdurch die Script-aktivieren-Warnmeldung (siehe am Ende des Templates) unsichtbar geschaltet.

echo "<script>
document.write('<style>#noScript { display: none; }<\/style>')
</script>\n";

// Begin der Erzeugung des dynamischen Stylesheet-Codes, der durch die Einstellungen und Zustände der Website spezifiziert on the fly erzeugt werden muß.
// PHP erzeugt Dezimalbrüche (floating point) mit Komma als Dezimaltrennzeichen. CSS erwartet den Punkt als Dezimaltrennzeichen. Daher müssen PHP-erzeugte Zahlen in CSS-Zahlen umgewandelt werden.
// Zeichengröße für Main-Content und Footer-Bereich:

$stylecode ='html{font-size: '.str_replace(",",".",$mainfontsize).'rem;}
#footer {font-size: '.str_replace(",",".",$footerfontsize).'em;}
';

// Dynamische Berechnung der Farben für Maincolor und Menuhintergrundfarben
// Wenn der Variablen $MainColor2019 ein Wert zugewiesen wurde, wird der Default-Wert der stylesheet.css überschrieben.

if (isset($MainColor2019)) {
// umrechnen der Hex-Farbe in RGB-Werte
if (!isset($maxbrightness)) {$maxbrightness = 221;} // max. erlaubter dezimaler Helligkeitswert der RGB-Einzelfarbe
$color = str_replace("#", "", $MainColor2019);
$r = 1;
$g = 2;
$b = 3;
if (strlen($color) <> 6) { // wenn statt eines 6-stelligen Farbwertes nur ein kürzerer angegeben wurde, wird ein 3-stelliger angenommen und die einzelnen Stellen verdoppelt: a => aa
$r1 = substr($color, 0, 1);
$r1 = $r1.$r1;
$g1 = substr($color, 1, 1);
$g1 = $g1.$g1;
$b1 = substr($color, 2, 1);
$b1 = $b1.$b1;
$main = array(
$r => hexdec($r1),
$g => hexdec($g1),
$b => hexdec($b1)
);
}
else { // wenn ein 6-stelliger Farbwert angegeben wurde
$main = array(
$r => hexdec(substr($color, 0, 2)),
$g => hexdec(substr($color, 2, 2)),
$b => hexdec(substr($color, 4, 2))
);
}
// Begrenzung der Einzelfarben auf die max. Helligkeit
if ($main[$r]>$maxbrightness) $main[$r]=$maxbrightness;
if ($main[$g]>$maxbrightness) $main[$g]=$maxbrightness;
if ($main[$b]>$maxbrightness) $main[$b]=$maxbrightness;
$MainColor2019 = '#'.sprintf("%02X%02X%02X", $main[$r], $main[$g], $main[$b]);
$hexTransluzenz = sprintf("%02X", ($transluzenzwert * 255));

// generiert Style-Code
$stylecode .=':root {
--dynakzent: '.$MainColor2019.';
--dynakzent2: '.$MainColor2019.$hexTransluzenz.';
}'."\n";
}

// Wenn der Variablen $MenuBGColor2021 ein Wert zugewiesen wurde, wird der Default-Wert von .secmenu li 'background' in der stylesheet.css überschrieben.
// Berechnung der Hintergrundfarben im Haupt-Navigations-Menü.

if (isset($MenuBGColor2021)) {
// umrechnen der Hex-Farbe in RGB-Werte
if (!isset($maxbrightness)) {$maxbrightness = 221;} // max. erlaubter dezimaler Helligkeitswert der RGB-Einzelfarbe
if (!isset($minbrightness)) {$minbrightness = 68;} // min. erlaubter dezimaler Helligkeitswert der RGB-Einzelfarbe
$color = str_replace("#", "", $MenuBGColor2021);
if (substr($color, 0, 3) == '---') { // wenn nur drei --- eingegeben wurden steht das für die Maincolor (Akzentfarbe)
$color = str_replace("#", "", $MainColor2019);
}
$r = 1;
$g = 2;
$b = 3;
if (strlen($color) <> 6) { // wenn statt eines 6-stelligen Farbwertes nur ein kürzerer angegeben wurde, wird ein 3-stelliger angenommen und die einzelnen Stellen verdoppelt: a => aa
$r1 = substr($color, 0, 1);
$r1 = $r1.$r1;
$g1 = substr($color, 1, 1);
$g1 = $g1.$g1;
$b1 = substr($color, 2, 1);
$b1 = $b1.$b1;
$hover = array(
$r => hexdec($r1),
$g => hexdec($g1),
$b => hexdec($b1)
);
}
else { // wenn ein 6-stelliger Farbwert angegeben wurde
$hover = array(
$r => hexdec(substr($color, 0, 2)),
$g => hexdec(substr($color, 2, 2)),
$b => hexdec(substr($color, 4, 2))
);
}
// Begrenzung der Einzelfarben auf die min. Helligkeit
if ($hover[$r]<$minbrightness) $hover[$r]=$minbrightness;
if ($hover[$g]<$minbrightness) $hover[$g]=$minbrightness;
if ($hover[$b]<$minbrightness) $hover[$b]=$minbrightness;
if ($hover[$r]>$maxbrightness) $hover[$r]=$maxbrightness;
if ($hover[$g]>$maxbrightness) $hover[$g]=$maxbrightness;
if ($hover[$b]>$maxbrightness) $hover[$b]=$maxbrightness;
$MenuBGColor2021 = '#'.sprintf("%02X%02X%02X", $hover[$r], $hover[$g], $hover[$b]);

// generiert Style-Code
$stylecode .=':root {
--dynmenuhover: '.$MenuBGColor2021.' ;
--dynmenumain: rgb('.($hover[$r]-($minbrightness/2)).','.($hover[$g]-($minbrightness/2)).','.($hover[$b]-($minbrightness/2)).');
--dynmenuaktiv: rgb('.($hover[$r]-$minbrightness).','.($hover[$g]-$minbrightness).','.($hover[$b]-$minbrightness).');
}'."\n";
}

// Ende der Berechnung der Hintergrundfarben im Haupt-Navigations-Menü

// Cookie-Erlaubnis abhängige Sichtbarkeit bestimmter Text-Formate

if (function_exists('privacy')) {
if (privacy_agreed()) {
// generiert Style-Code
$stylecode .='p.no_cookies_text, div.no_cookies_text { display: none; }'."\n";
$stylecode .='p.cookies_text, div.cookies_text { display: block; }'."\n";
}
else {
// generiert Style-Code
$stylecode .='p.cookies_text, div.cookies_text { display: none; }'."\n";
$stylecode .='p.no_cookies_text, div.no_cookies_text { display: block; }'."\n";
}
}

// Wenn Silbentrennung für das ganze Web / die ganze Seite aktiviert wird:
// strpos gibt 'false' für nicht gefunden zurück, bei Fund die Position, erstes Zeichen = 0!!!
// Damit bei Fund immer ein Ergebnis größer Null herauskommt, wird dem zu durchsuchenden String ein einzelnes Blank voraus gestellt!

// Wegen Abwärtskompatibilität zu früheren Versionen des Templates, kann in höheren Versionen entfallen.

$SiteSilbentrennung = strpos(' '.$tx['template']['text3'],'Silbentrennung');

// Prüfung ob einer der Parameter zur Silbentrennung aktiviert ist

if (($SiteSilbentrennung) or (isset($GlobaleSilbentrennung)) or (boolval($ConfigSilbentrennung))) {
// generiert Style-Code
$stylecode .='body {hyphens: auto;}'."\n";
}

// Wenn $aktionswahl nicht definiert ist, auf den Wert $text["noAktion"] setzen.
if (!isset($aktionswahl)) {
$aktionswahl = $text["noAktion"];
}
// Nur wenn der Headertyp "headershiftimage" ist und der Editor inaktiv ist oder wenn im Editor die Aktionswahl $text["headershiftimage"] ist -> laden der CSS-Datei.

if ((($Headertyp == "headershiftimage") and !$edit) or (($aktionswahl == $text["headershiftimage"]) and $edit)) {
if (isset($Image_Shift_2021)) {
if (is_readable($pth['folder']['base'].$Image_Shift_2021)) {
$imageshiftbgimage = $Image_Shift_2021;
}
}
if (is_readable($pth['folder']['template'].'config/imageshift.css.php')) {
include $pth['folder']['template'].'config/imageshift.css.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "config/imageshift.css.php"</p>'."\n";
}
}

// Nur wenn der Headertyp "headerslideshow" ist und der Editor inaktiv ist oder wenn im Editor die Aktionswahl $text["headerslideshow"] ist -> laden der CSS-Datei.

if ((($Headertyp == "headerslideshow") and !$edit) or (($aktionswahl == $text["headerslideshow"]) and $edit)) {
if (is_readable($pth['folder']['template'].'config/slideshow.css.php')) {
include $pth['folder']['template'].'config/slideshow.css.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "config/slideshow.css.php"</p>'."\n";
}
}

// Nur wenn der Headertyp "slideshowaktiv" ist und der Editor inaktiv ist oder wenn im Editor die Aktionswahl $text["slideshowaktiv"] ist -> laden der CSS-Datei.

if ((($Headertyp == "headerslideshowbelow") and !$edit) or (($aktionswahl == $text["headerslideshowbelow"]) and $edit)) {
if (is_readable($pth['folder']['template'].'config/SlideshowBelowHeader.css.php')) {
include $pth['folder']['template'].'config/SlideshowBelowHeader.css.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "config/SlideshowBelowHeader.css.php"</p>'."\n";
}
}

// Nur wenn der Headertyp "headercrossfade" ist und der Editor inaktiv ist oder wenn im Editor die Aktionswahl $text["headercrossfade"] ist -> laden der CSS-Datei.

if ((($Headertyp == "headercrossfade") and !$edit) or (($aktionswahl == $text["headercrossfade"]) and $edit)) {
if (is_readable($pth['folder']['template'].'config/crossfade.css.php')) {
include $pth['folder']['template'].'config/crossfade.css.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . ' "config/crossfade.css.php"</p>'."\n";
}
}

// Style-Code in den HTML-Text ausgeben.

echo '<style type="text/css">'."\n"."\n";
echo $stylecode;
echo "\n";
echo '</style>'."\n";

// externe Scripte einbinden

if (is_readable($pth['folder']['template'].'scriptimporter.php')) {
if (isset($ScriptImporter2021)) {
include $pth['folder']['template'].'scriptimporter.php';
}
}

// ENDE Kopfbereich der Webseite

echo '</head>'."\n";

// Begin des Bodys der Webseite

echo '<body ';
// Spezial - Formate aktivieren, wenn die Seite im Front-End-Modus ist. Dies ist notwendig wegen einiger sehr speziellen Formatdefinitionen für die Darstellung im Editor,
// die im Frontend-Modus anders als Editor-Modus nicht oder anders dargestellt werden dürfen/müssen und daher im Front-End-Modus überschrieben werden müssen.
// Das wird erreicht durch die aktivierung der Klasse frondend. Diese Klasse wird den Formaten vorangestellt, die nur im Frondend-Modus gelten sollen.
if ((!$edit) or (!XH_ADM)) {
echo 'class="frontend" ';
}
echo onload().'>'."\n";
// Vorstehende Zeile blendet unter Anderem auch das original-Administratormenü von CMSimple_XH ein (sofern kein anderes Admin-Menü-Plugin aktiv ist).

// Test auf Internet Explorer vor Edge - wenn ja, dann Ausgabe der Inkompatibilitätsmeldung

if ((strpos($_SERVER["HTTP_USER_AGENT"], 'Internet') > 0) or (strpos($_SERVER["HTTP_USER_AGENT"], 'Trident') > 0)) {
echo '<div style="padding: 20px; background-color: red; color: yellow; font-size: 18px; font-weight: bold;">
Dieser Browser wird als Internet Explorer erkannt!<br>
Das Template dieser Website ist nicht mit dem IE kompatibel!<br>
Um die normale Darstellung und Funktion dieser Website zu erhalten<br>
verwenden Sie bitte einen der modernen Browser.<br>
Getestet wurde dieses Template mit folgenden Browsern: Firefox, Chrome, Edge, Opera in Versionen von 2021<br></div>'."\n";
}

// Spannt einen Rahmen vor dem Verlaufshintergrund auf, mit der Hintergrundfarbe var(--hintergrund) und max. 1920 Pixel breit. Darauf wird der Content samt Header und Navigation projeziert.

echo '<div class="body">'."\n";

// --- Headerbereich Anfang --------------------------------------------------------------------------------

if (($Headertyp !== "headernone") or ($edit)) { // wenn der Header nicht abgeschaltet ist

/*
Der jeweilige Header wird ausgegeben wenn:
1. Der Type des Headers ausgewählt ist (in der Konfiguration) und der Editormodus nicht aktiv ist oder
2. der Editormodus aktiv ist und der jeweilige Headertyp gerade in der Konfiguration bearbeitet wird ($aktionswahl = Headertyp)
*/

// Headertyp "slideshowbelowheader" (Logografik links oben, Motto-Text rechts oben, unter beiden eine Slideshow)

if ((($Headertyp == "headerslideshowbelow") and !$edit) or (($aktionswahl == $text["headerslideshowbelow"]) and $edit)) {

// Nur wenn entweder die Datei des Logos lesbar ist oder der Motto-Text definiert wurde wird der Bereich oberhalb der Slideshow ausgegeben

if ((is_readable($pth['folder']['base'].$sbhlogofile)) or ($sbhMotto <> "")) {
echo '<header class="row-full-width" id="randoben">'."\n";

// Wenn die Variable $keinLogoAnzeigen nicht gesetzt ist, wird das Logo und evtl. der Text ausgegeben.

if (!isset($keinLogoAnzeigen)) {
echo ' <div class="header-cont clear">'."\n";

// Wenn über die seitenspezifische Modifikation (Reiter MEHR) ein anderes Logo ausgewählt wurde, wird dies statt des über die Konfiguration ausgewählten Logos ausgegeben

if (isset($alternatives_Seitenlogo_2021)) { // alternatives Logo ausgeben
if (is_readable($pth['folder']['templateimages'].$alternatives_Seitenlogo_2021)) {
echo ' <div class="sbhlogo"><a href="./" class="logo"><img id="sbhlogo" src="'.$pth['folder']['templateimages'].$alternatives_Seitenlogo_2021.'"></a></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['templateimages'] . $alternatives_Seitenlogo_2021 . '"</p>'."\n";
}
} else { // über die Konfiguration gewähltes Logo ausgeben
if (is_readable($pth['folder']['base'].$sbhlogofile)) {
echo ' <div class="sbhlogo"><a href="./" class="logo"><img id="sbhlogo" src="'.$pth['folder']['base'].$sbhlogofile.'"></a></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['base'] . $sbhlogofile . '"</p>'."\n";
}
}

// Wenn die Variable $keinLogoTextAnzeigen nicht gesetzt ist und ein Motto-Text definiert wurde, wird der Text ausgegeben

if ((!isset($keinLogoTextAnzeigen)) and ($sbhMotto <> "")) {
echo ' <div id="sbhmottotext">'.$sbhMotto.'</div>'."\n";
}

echo ' <br class="clear" style="line-height: 0px;"></div>'."\n"; // beendet float ohne eine Zeilenhöhe zu erzeugen
}
echo '</header>'."\n";
}
echo '<div class="row-full-width">'."\n";

// Wenn die Variable $NoSlideShow nicht gesetzt ist, wird die Slideshow ausgegeben.

if (!isset($NoSlideShow)) {

// Für die Konfiguration dieser Headervariante ist das Slideshow-Plugin erforderlich.

if (!function_exists('slideshow')) {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_slideshow_not_installed1'] . '<br>' . $text['template_slideshow_not_installed2'] . ' <a href="https://github.com/cmb69/slideshow_xh/releases/" target="_blank">Download</a><br>' . $text['template_slideshow_not_installed3'] . '</p>'."\n";
goto afterslideshow;
}

// Wenn die Variable $SliderFolder2019 ein Wert zugewiesen bekommen hat, wird die Slideshow mit dem dadurch festgelegten Bilderordner ausgeführt, sonst mit dem Stanard-Ordner

if (isset($SliderFolder2019)) {
echo slideshow($SliderFolder2019);
} else {
echo slideshow($sbhslidefolder);
}
afterslideshow:
}
echo '</div>'."\n";
}
// ENDE Headertyp "slideshowbelowheader"

// Headertyp "headershiftimage" (Logo links im Vordergrund, Motto-Text rechts im Vordergrund, im Hintergrund ein seitlich durchlaufendes Bild)

if ((($Headertyp == "headershiftimage") and !$edit) or (($aktionswahl == $text["headershiftimage"]) and $edit)) {

echo '<header class="row-full-width" id="header">
<div';

// Wenn die Variable $NoSlideShow nicht gesetzt ist, wird das durchlaufende Hintergrundbild ausgegeben.

if (!isset($NoSlideShow)) {
echo ' class="logobg">'."\n"; // mit Hintergrundbild
} else {
echo '>'."\n"; // ohne Hintergrundbild
}

// Wenn die Variable $keinLogoAnzeigen nicht gesetzt ist, wird das Logo und evtl. der Text ausgegeben.

if (!isset($keinLogoAnzeigen)) {

// Wenn über die seitenspezifische Modifikation (Reiter MEHR) ein anderes Logo ausgewählt wurde, wird dies statt des über die Konfiguration ausgewählten Logos ausgegeben

if (isset($alternatives_Seitenlogo_2021)) { // alternatives Logo ausgeben
if (is_readable($pth['folder']['templateimages'].$alternatives_Seitenlogo_2021)) {
echo ' <div><img class="logo" src="'.$pth['folder']['templateimages'].$alternatives_Seitenlogo_2021.'"></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['templateimages'] . $alternatives_Seitenlogo_2021 . '"</p>'."\n";
}
} else { // über die Konfiguration gewähltes Logo ausgeben
if (is_readable($pth['folder']['base'].$imageshiftlogo)) {
echo ' <div><img class="logo" src="'.$pth['folder']['base'].$imageshiftlogo.'"></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['base'] . $imageshiftlogo.'"</p>'."\n";
}
}

// Wenn die Variable $keinLogoTextAnzeigen nicht gesetzt ist und der Motto-Text definiert wurde, wird der Text ausgegeben

if ((!isset($keinLogoTextAnzeigen)) and ($imageshiftmotto <> "")){
echo ' <div class="mottotext">'.$imageshiftmotto.'</div>'."\n";
}
}
echo ' </div>
</header>
';
}
// ENDE headertyp "headershiftimage"

//Headertyp "headerslideshow" (Logo links, Motto-Text rechts, im Hintergrund eine Slideshow)

if ((($Headertyp == "headerslideshow") and !$edit) or (($aktionswahl == $text["headerslideshow"]) and $edit)) {
echo '<header class="row-full-width">'."\n";

// Wenn die Variable $NoSlideShow nicht gesetzt ist, wird die Slideshow ausgegeben.

if (!isset($NoSlideShow)) {

// Für die Konfiguration dieser Headervariante ist das Slideshow-Plugin erforderlich.

if (!function_exists('slideshow')) {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_slideshow_not_installed1'] . '<br>' . $text['template_slideshow_not_installed2'] . ' <a href="https://github.com/cmb69/slideshow_xh/releases/" target="_blank">Download</a><br>' . $text['template_slideshow_not_installed1'] . '</p>'."\n";
goto nachderslideshow;
}

echo '<div id="randoben">'."\n";

// Wenn die Variable $SliderFolder2019 ein Wert zugewiesen bekommen hat, wird die Slideshow mit dem dadurch festgelegten Bilderordner ausgeführt, sonst mit dem Stanard-Ordner

if (isset($SliderFolder2019)) {
echo slideshow($SliderFolder2019);
} else {
echo slideshow($slidefolder);
}
nachderslideshow:
echo '</div>'."\n";
}

// Wenn die Variable $NoSlideShow gesetzt ist, wird das Logo und der Motto-Text in der Ebene der übrigen Website ausgegeben, andernfalls werden sie in einem DIV-Container ausgegeben, der einen z-index hat.

if (isset($NoSlideShow)) {
$logoz = '';
$textz = '';
} else {
$logoz = ' id="slidelogoz"';
$textz = ' id="slidemottotextz"';
}

// Wenn die Variable $keinLogoAnzeigen nicht gesetzt ist, wird das Logo und evtl. der Text ausgegeben.

if (!isset($keinLogoAnzeigen)) {
echo ' <div id="hintergrund">'."\n";

// Wenn über die seitenspezifische Modifikation (Reiter MEHR) ein anderes Logo ausgewählt wurde, wird dies statt des über die Konfiguration ausgewählten Logos ausgegeben

if (isset($alternatives_Seitenlogo_2021)) { // alternatives Logo ausgeben
if (is_readable($pth['folder']['templateimages'].$alternatives_Seitenlogo_2021)) {
echo ' <div'.$logoz.'><div id="slidelogo"><a href="./" class="logo"><img src="'.$pth['folder']['templateimages'].$alternatives_Seitenlogo_2021.'" alt="Logo"></a></div></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;"' . $text['template_file_not_found'] . '"' . $pth['folder']['templateimages'] . $alternatives_Seitenlogo_2021 . '"</p>'."\n";
}
} else { // über die Konfiguration gewähltes Logo ausgeben
if (is_readable($pth['folder']['base'].$slidelogofile)) {
echo ' <div'.$logoz.'><div id="slidelogo"><a href="./" class="logo"><img src="'.$pth['folder']['base'].$slidelogofile.'" alt="Logo"></a></div></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['base'] . $slidelogofile . '"</p>'."\n";
}
}

// Wenn die Variable $keinLogoTextAnzeigen nicht gesetzt ist und ein Motto-Text definiert wurde, wird der Text ausgegeben

if (($SlideMotto <> "") and (!isset($keinLogoTextAnzeigen))) {
echo ' <div'.$textz.'><div id="slidemottotext">'.$SlideMotto.'</div></div>'."\n";
}

echo ' </div>'."\n";
}
echo '</header>'."\n";
}
// ENDE Headertyp "headerslideshow"

// Headertyp "headercrossfade" (Logo links im Vordergrund, Motto-Text rechts im Vordergrund, die Crossfading-Show dahinter im Hintergrund)

if ((($Headertyp == "headercrossfade") and !$edit) or (($aktionswahl == $text["headercrossfade"]) and $edit)) {

echo '<header class="row-full-width">'."\n";
echo ' <div class="header-cont">'."\n";

// Wenn die Variable $NoSlideShow nicht gesetzt ist, wird die Slideshow ausgegeben.

if (!isset($NoSlideShow)) {
echo '<div id="slideheigt"></div>'."\n"; // gibt auf der Ebene der Website die obere Linie über der Crossfading-Show in der Akzent-Farbe aus und nimmt den Platz in der Höhe der Crossfading-Show in Anspruch
echo '<div class="cross_show">'."\n"; // positioniert und gibt die Bilder der Show genau vor dem zuvor aufgespanntem Bereich aus

// Die Dateien im ausgewählen Ordner der Hintergrundbilder als Folge von <figure><img></figure> - Containern ausgeben
for ($i = 0; $i < $imagecount; $i++) {
echo ' <figure>
<img src="'.$pth['folder']['base'].$crossdateiliste[$i].'" alt="">
</figure>'."\n";
}

echo '</div>'."\n";
}

// Wenn die Variable $NoSlideShow gesetzt ist, wird das Logo und der Motto-Text in der Ebene der übrigen Website ausgegeben, andernfalls werden sie in einem DIV-Container ausgegeben, der einen z-index hat.

if (isset($NoSlideShow)) {
$logoz = '';
$textz = '';
} else {
$logoz = ' id="slidelogoz"';
$textz = ' id="slidemottotextz"';
}

// Wenn die Variable $keinLogoAnzeigen nicht gesetzt ist, wird das Logo und evtl. der Text ausgegeben.

if (!isset($keinLogoAnzeigen)) {
echo ' <div id="hintergrund">'."\n";

// Wenn über die seitenspezifische Modifikation (Reiter MEHR) ein anderes Logo ausgewählt wurde, wird dies statt des über die Konfiguration ausgewählten Logos ausgegeben

if (isset($alternatives_Seitenlogo_2021)) { // alternatives Logo ausgeben
if (is_readable($pth['folder']['templateimages'].$alternatives_Seitenlogo_2021)) {
echo ' <div'.$logoz.'><div id="slidelogo"><a href="./" class="logo"><img src="'.$pth['folder']['templateimages'].$alternatives_Seitenlogo_2021.'" alt="Logo"></a></div></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['templateimages'] . $alternatives_Seitenlogo_2021 . '"</p>'."\n";
}

} else { // über die Konfiguration gewähltes Logo ausgeben
if (is_readable($pth['folder']['base'].$CrossLogoImage)) {
echo ' <div'.$logoz.'><div id="slidelogo"><a href="./" class="logo"><img src="'.$pth['folder']['base'].$CrossLogoImage.'" alt="Logo"></a></div></div>'."\n";
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['base'] . $CrossLogoImage . '"</p>'."\n";
}
}

// Wenn die Variable $keinLogoTextAnzeigen nicht gesetzt ist und ein Motto-Text definiert wurde, wird der Text ausgegeben

if (($CrossMotto <> "") and (!isset($keinLogoTextAnzeigen))) {
echo ' <div'.$textz.'><div id="mottotext";">'.$CrossMotto.'</div></div>'."\n";
}

echo ' </div>'."\n";
}
echo '</div>'."\n";
echo '</header>'."\n";
}
}
// --- Headerbereich Ende ------------------------------------------------------------------------------------------

// Ausgabe Brot-Krümel-Navigation, Such-Form, Burger-Menü und Multilanguage-Flaggen

echo ' <div class="row-full-width secHeader">'."\n";

// Ausgabe Brot-Krümel-Navigation auf der linken Seite der Zeile

echo ' <div class="locator">
'.$tx['locator']['text'] . ' ' . locator().'
</div>'."\n";

// Ausgabe des Bereichs auf der rechten Seite der Zeile

echo ' <div class="floatRightNavi">'."\n";

// Bei floatRight wird das erste in der Reihenfolge am weitesten rechts ausgegeben, alles Folgende rückt nach links ein.

// Bei mehrsprachlichen Webs Ausgabe der Sprachumschaltung

echo ' <div class="langSwitch">'.languagemenu().'</div>'."\n";

// Bei Viewports unter 485 Pixel Breite wird statt des Menüs das Burger-Symbol ausgegeben (Toggelfunktion)

echo ' <div class="burger"> </div>'."\n";

// Ausgabe des Such-Formulars

echo ' <div title="'.$tx['search']['button'].'" class="searchBox">'."\n";
echo ' <form method="post" id="searchform" action="'.$sn.'">'."\n";
echo ' <input accesskey="f" id="searchfield" type="text" name="search" placeholder="&#xf002;">'."\n";
echo ' <label class="searchLabel" for="searchfield">'.$tx['search']['button'].'</label>'."\n";
echo ' <input type="hidden" name="function" value="search">'."\n";
echo ' </form>'."\n";
echo ' </div>'."\n";

// Ausgabe des Formulars für die Fontgrößenumschaltung

echo ' <div title="'.$text['fontusersize'].'" class="changeFontsize">'."\n";
echo ' ';
print(get_fontsize_link('dec', '<span class="fa fa-minus-square-o" title="'.$text['fontminus'].'"><span>'));
echo ' ';
print(get_fontsize_link('base', '<strong title="'.$text['font100'].'">A</strong>'));
echo ' ';
print(get_fontsize_link('inc', '<span class="fa fa-plus-square-o" title="'.$text['fontplus'].'"></span>'));
echo "\n".' </div>'."\n";

// Wenn die Funktion recently_changed (via Plugin) installiert ist, wird der Link zu dieser Seite ausgegeben

if (function_exists('recently_changed')) {
echo ' <div title="'.$text['last_modified_description'].'" class="lastChanged"><a href="./?last-changed">'.$text['last_modified'].'</a></div>'."\n";
}

// ENDE Ausgabe des Bereichs auf der rechten Seite der Zeile

echo ' </div>'."\n";

// ENDE Ausgabe Brot-Krümel-Navigation, Such-Form, Burger-Menü und Multilanguage-Flaggen

echo ' </div>'."\n";

// Ende der Zeile unter Slideshow, Begin maincontent

// Begin des eigentlichen Contentbereiches mit Menü links, Content mittig und Newsboxen rechts (bzw. unten)
// nochmalige Definition der Sprache des Inhaltes (erstes mal im Head-Bereich), damit die Silbentrennung mit der richtigen Sprache funktioniert

echo '<div class="row-full-width" id="wrapper" lang="'.$sl.'">'."\n";

// Spalte des Navigationsmenüs

echo '<nav class="secmenu '.$cleft.'">'.toc(); // <- toc() = Funktion gibt das Menü aus, $cleft enthält den Formatnamen der Spaltenbreite

// Zusätzliche Menüpunkte "vorherige Seite" und "nächste Seite" werden unter dem Menü angehäNavigation

echo '<ul class="menulevel1"><li class="doc">'.previouspage().'</li><li>'.nextpage()."</li></ul>\n";

// Wenn memberpages installiert ist und der Login-Link angezeigt werden soll, wird er unter dem Menü angehängt

if ((function_exists('memberslogin')) and (isset($MembersLogin))) {

// Wurde die Zustimmung zu Cookies erteilt, darf das Anmeldeformular ausgegeben werden

if (privacy_agreed()) {
echo '<ul class="menulevel1"><li class="doc"><div class="memberslogin"> '."\n";
echo memberslogin()."\n";
echo '</div></li></ul>'."\n";
}
}

// Wenn Register installiert ist, wird das Formular mit dem Link zu Benutzereinstellungen und Logout angezeigt, wenn der User angemeldet ist.
if (is_readable($pth['folder']['plugins'].'register/classes/Plugin.php')) {
if (!isset($RegisterLogin2021)) {
echo Register_loggedInForm()."\n";
}
}


// ENDE der Navigationsspalte

echo '</nav>'."\n";

/*
Mittlere Spalte für Content und evtl. News-Boxen darunter
Wenn die Variablen für die Newsboxen leer sind und kein Untermenü vorhanden ist, wird die Breite der mittleren Spalte auf der verbleibenden Rest der Breite gesetzt.
Ebenfalls wenn durch Anhaken der Variablen $TwoColumn2021 das Template auf 2 Spalten umgeschaltet wird.
Dies alles gilt nur, wenn die Seite nicht im Editormodus ist und das fhs-adminmenu nicht aktiv ist! D.h. ist das fhs-adminmenu aktiv wird !immer! eine dritte Spalte angezeigt!
*/

echo '<'.'main class="maincont';
if (
(
(
(!isset($NewsBox2019A)) // keine 1. Newsbox aktiv
and
(!isset($NewsBox2019B)) // keine 2. Newsbox aktiv
and
(!isset($NewsBox2019C)) // keine 3. Newsbox aktiv
and
(!isset($NewsBox2019D)) // keine 4. Newsbox aktiv
and
(!isset($SubmenuRight2021)) // evtl. vorhandenes Submenü nicht zwangsweise in die 3. Spalte verschoben
)
or
(isset($TwoColumn2021)) // zwangsweise auf 2 Spalten umgestellt
)
and
(!$edit) // Editiermodus ist nicht aktiv
) {
echo ' '.$cdouble; // wenn vorstehende Bedingung erfüllt: Content-Spalte nimmt den gesamten Rest der Breite ein
} else {
echo ' '.$cmiddle; // wenn Bedingung nicht erfüllt ist: Content-Spalte nur so breit, dass dritte Spalte hinenpasst
}
echo '">'."\n";

// Im Editormodus wird die Oberfläche 'Configuration' oberhalb des eigentlichen Editors angezeigt.

if ($edit) {
if (is_readable($pth['folder']['template'].'config/config.php')) {
include $pth['folder']['template'].'config/config.php';
} else {
echo '<p style="color: black; background-color: white; border: 2px solid red; padding:1ex;">' . $text['template_file_not_found'] . '"' . $pth['folder']['template'] . 'config/config.php"</p>'."\n";
}
}

// Wenn in der Bit-Maske der Variablen zum Scriptimport ein falsches Zeichen enthalten ist

if (isset($ImporterError)) {
echo '<p style="color: white; background-color: red; border-radius: .2em; padding: 5px; font-weight: 600;">' . $text['template_bit_maske_wrong'] . '"' . $ScriptImporter2021 .'"</p>'."\n";
}

// Wenn das RegisterLogin-Formular oder das MemberpagesLogin-Formular ausgegeben werden soll, muss auch das Privacy-Formular ausgegeben werden.

if ((isset($RegisterLogin2021)) or (isset($MembersLogin))) {
$Privacy2021 = true;
}
// Wenn die Variable gesetzt ist wird das Cookie-Formular ausgegeben

if ((function_exists('privacy')) and (isset($Privacy2021))) {
if ($Privacy2021) {
echo privacy();
}
}

// Wenn das RegisterLogin-Formular oberhalb des Content ausgegeben werden soll: Wenn Privacy_XH nicht installiert ist oder wenn es installiert ist und die Zustimmung zu Cookies gegeben wurde

if (isset($RegisterLogin2021)) {
if ($RegisterLogin2021 == "top") {
if ((!function_exists('privacy')) or ((function_exists('privacy')) and (privacy_agreed()))) {
if (is_readable($pth['folder']['plugins'].'register/classes/Plugin.php')) {
echo '<div id="registerlogincontainer">'."\n";
echo registerloginform()."\n";
echo '</div>'."\n";
}
}
}
}

// Ausgabe des eigentlichen Seiteninhaltes

echo content();

// Wenn das RegisterLogin-Formular unterhalb des Content ausgegeben werden soll: Wenn Privacy_XH nicht installiert ist oder wenn es installiert ist und die Zustimmung zu Cookies gegeben wurde

if (isset($RegisterLogin2021)) {
if ($RegisterLogin2021 == "bottom") {
if ((!function_exists('privacy')) or ((function_exists('privacy')) and (privacy_agreed()))) {
if (is_readable($pth['folder']['plugins'].'register/classes/Plugin.php')) {
echo '<div id="registerlogincontainer">'."\n";
echo registerloginform()."\n";
echo '</div>'."\n";
}
}
}
}

// Ausgabe der Zeile mit Links zur vorherigen Seite, Seitenanfang und nächster Seite

echo '<hr>'."\n".'<p>'.previouspage().' | '.top().' | '.nextpage()."\n";

// Wenn das Plugin crazystat installiert ist, wird die Zählergrafik ausgegeben

if (function_exists('crazystat')) {
if ((!file_exists($pth['folder']['base'].$sl)) or (file_exists($pth['folder']['base'].$sl.'/plugins/crazystat/stat'))) { // wenn crazystat für die aktive (Fremd-)Sprache installiert ist
if (XH_ADM) {
echo " | ".$text['nocountingadmin'];
} else {
echo " | ", crazystat();
}
} else { // wenn crazystat nicht für die aktive (Fremd-)Sprache installiert ist
echo " | ".$text['nocountinglanguage'];
}
}

echo '</p>'."\n";

// Beginn des Bereichs unter dem Content ----------------------------------------------------------

// Wenn ein evtl. vorhandenes Submenü nicht in der rechten Spalte angezeigt werden soll oder wenn das Layout auf 2-Spalten umgeschaltet wurde, dann soll das Submenü unter den Content angezeigt werden

if ((!isset($SubmenuRight2021)) or (isset($TwoColumn2021))) {

// Ausgabe des Submenüs

echo '<div class="submenDiv">'.submenu('<span>%s</span>').'</div>'."\n";
}

// ***** Bereich wird erst sichtbar bei Viewport kleiner 1026 Pixel oder wenn auf 2-Spalten-Layout umgeschaltet wurde

// der Newsboxen ausgeben

echo '<'.'aside id="newsboxes2" class="clear"';

// Wenn das Layout auf 2 Spalten umgeschaltet ist (und Viewport > 1025 Pixel breit), werden die Newsboxen auf sichtbar umgeschaltet (Voreinstellung: unsichtbar solange Viewport > 1025 Pixel Breit ist)

if (isset($TwoColumn2021)) {
echo ' style="display: block;"';
}

echo '>'."\n";

// Wenn in der rechten Spalte ein Submenu angezeigt werden soll (class 'news' um .news ul {...} erweitert), bei schmäleren Viewports alternative Position und Darstellung des Submenüs

if ((isset($SubmenuRight2021)) and (!isset($TwoColumn2021))) {
echo '<section class="news">'.submenu('%s').'</section>'."\n";
}

// Die News-Boxen werden mit den durch $NewsBox2019A und $NewsBox2019B festgelegten versteckten Seiten dargestellt.
// Haben die Variablen keinen Wert, werden keine News-Boxen angezeigt. Die Ausblendung erfolgtdurch PHP. Das Layout wird durch CSS angepasst.

if (isset($TwoColumn2021)) { // *** Wenn das Template auf 2 Spalten eingestellt ist ***
echo '<div class="flexContainer">'."\n"; // *** Dadurch werden die beiden Newsboxen nebeneinander ausgegeben ***
} else {
echo '<div>'."\n";
}

if (isset($NewsBox2019A)) {
echo '<section class="news">'.newsbox($NewsBox2019A).'</section>'."\n";
}
if (isset($NewsBox2019B)) {
echo '<section class="news">'.newsbox($NewsBox2019B).'</section>'."\n";
}
if (isset($NewsBox2019C)) {
echo '<section class="news">'.newsbox($NewsBox2019C).'</section>'."\n";
}
if (isset($NewsBox2019D)) {
echo '<section class="news">'.newsbox($NewsBox2019D).'</section>'."\n";
}
echo '</div>'."\n";
echo '</aside>'."\n";

// ***** ENDE Bereich wird erst sichtbar bei Viewport kleiner 1026 Pixel oder wenn auf 2-Spalten-Layout umgeschaltet wurde
// ***** Ende des Bereichs News-Boxen unter dem Content

// ENDE Main - Contentbereich (mittlere / Hauptspalte)

echo '</main>'."\n";

// ***** Beginn der (rechten) 3. Spalte mit optionalen Konfigurations-Hilfetext, Submenü, optionaler Snipetsbox und den zwei möglichen Newsboxen

// Wenn die Newsboxen nicht definiert sind und kein Untermenü in die Dritte Spalte verschoben ist oder wenn das Layout auf 2 Spalten umgeschaltet ist und der Editomodus nicht aktiv ist, dann wird die dritte Spalte nicht angezeigt.
// Die 3. Spalte soll jedoch angezeigt werden, wenn der Editormode aktiv ist.

// Wenn keine 3. Spalte angezeigt werden soll, wird style="display: none" ausgegeben

if (((!isset($NewsBox2019A) and !isset($NewsBox2019B) and !isset($NewsBox2019C) and !isset($NewsBox2019D) and !isset($SubmenuRight2021)) or (isset($TwoColumn2021))) and !$edit) {
echo '<aside id="newsboxes" class="'.$cright.'" style="display: none">'."\n";
} else {
echo '<aside id="newsboxes" class="'.$cright.'">'."\n";
}

// Wenn im Editormodus die Template-Konfiguration aktiviert wird, dann soll in der dritten Spalte oberhalb der SnipetBox eine Hilfebox für die Konfigurtion ausgegeben werden.

if ($edit and ($aktionswahl <> $text['noAktion']) and ($aktionswahl <> "")) {
if (is_readable($pth['folder']['template'].'config/help.'.$sl.'.php')) {
include $pth['folder']['template'].'config/help.'.$sl.'.php';
} else { // Wenn in der aktiven Sprache keine Hilfedatei vorhanden ist, soll die deutsche Hilfedatei ausgegeben werden.
if (is_readable($pth['folder']['template'].'config/help.de.php')) {
include $pth['folder']['template'].'config/help.de.php';
}
}
}

// Wenn die Ausgabe der SnipetBox aktiviert ist wird sie hier ausgegeben

if (isset($SnipetsBox2021) and $edit) {
echo '<section class="news">'.newsbox($SnipetsBox2021).'</section>'."\n";
}

// Wenn das Submenü in die 3. Spalte verschoben wird, dann die alternative Position und Darstellung des Submenüs (class 'news' um .news ul {...} wurde dazu erweitert) hier ausgeben

if (isset($SubmenuRight2021)) {
echo '<section class="news">'.submenu('%s').'</section>'."\n";
}

// Ist die 1. Newsbox definieert, wird sie hier ausgegeben

if (isset($NewsBox2019A)) {
echo '<section class="news">'.newsbox($NewsBox2019A).'</section>'."\n";
}

// Ist die 2. Newsbox definieert, wird sie hier ausgegeben

if (isset($NewsBox2019B)) {
echo '<section class="news">'.newsbox($NewsBox2019B).'</section>'."\n";
}

// Ist die 3. Newsbox definieert, wird sie hier ausgegeben

if (isset($NewsBox2019C)) {
echo '<section class="news">'.newsbox($NewsBox2019C).'</section>'."\n";
}

// Ist die 4. Newsbox definieert, wird sie hier ausgegeben

if (isset($NewsBox2019D)) {
echo '<section class="news">'.newsbox($NewsBox2019D).'</section>'."\n";
}

echo '</aside>'."\n".'</div>'."\n";

// ***** ENDE der (rechten) 3. Spalte mit optionalen Konfigurations-Hilfetext, Submenü, optionaler Snipetsbox und den zwei möglichen Newsboxen

// ***** Beginn des Bereichs Footer, der über die gesamte Breite der Website geht

// Trennlinie in der Akzentfarbe, Hintergrund in abweichender Hintergrundfarbe wie der Haupt-Contentbereich

echo '<div class="row-full-width" id="footer">'."\n";

// Zeilenbreite auf die Breite der mittleren Spalte begrenzen

// 1. Zeile: Druckansicht | Inhaltsverzeichnis | Kontakt | Datenschutz | Impressum | Login

echo '<div class="row">';
echo printlink().' | '.sitemaplink().'
| <a href="?'.$KontaktLink.'">'.$text['contact'].'</a>
| <a href="?'.$DatenschutzLink.'">'.$text['privacy'].'</a>
| <a href="?'.$ImpressumLink.'">'.$text['imprint'].'</a> | ';
if (!XH_ADM) {
echo loginlink();
} else {
echo '<a href="?&logout" title="Logout">'.$text['adminisloggedin'].'</a>';
}
echo '</div>
';

// 2. Zeile: © 2024 Webmaster der Domain | Template by fhs modified by krl | Powered by CMSimple_XH

echo '<div class="row">&copy; '.date("Y").' '.$text['webmaster_of_domain'].' | <a href="'.$pth['folder']['template'].'templateinfo.htm" target="_blank">'.$text['template_by'].'</a> | '.poweredbylink().'</div>';

// 3. Footerzeile wird angezeigt, wenn weitere eigene Websites verlinkt werden.

if ($linkurl1 <> "") {
echo '<div class="row">'.$text['other_own_webs'].':&nbsp;
<a title="'.$titleattribute1.'" href="'.$linkurl1.'" target="_blank" rel="noopener"><span class="noBr">'.$linktext1.'</span></a>';
if ($linkurl2 <> "") {
echo ' &nbsp; <a title="'.$titleattribute2.'" href="'.$linkurl2.'" target="_blank" rel="noopener"><span class="noBr">'.$linktext2.'</span></a>';
if ($linkurl3 <> "") {
echo ' &nbsp; <a title="'.$titleattribute3.'" href="'.$linkurl3.'" target="_blank" rel="noopener"><span class="noBr">'.$linktext3.'</span></a>';
if ($linkurl4 <> "") {
echo ' &nbsp; <a title="'.$titleattribute4.'" href="'.$linkurl4.'" target="_blank" rel="noopener"><span class="noBr">'.$linktext4.'</span></a>';
if ($linkurl5 <> "") {
echo ' &nbsp; <a title="'.$titleattribute5.'" href="'.$linkurl5.'" target="_blank" rel="noopener"><span class="noBr">'.$linktext5.'</span></a>';
}
}
}
}
echo '</div>';
}

// 4. Link zum Hoster wird angezeigt, wenn dieser definiert wurde.

if ($hostedlinkurl <> "") {
echo '<div class="row">'.$text["hosterlink"].':&nbsp;<a title="'.$hostedtitleattribute.'" href="'.$hostedlinkurl.'" target="_blank" rel="noopener"><span class="noBr">'.$hostedlinktext.'</span></a></div>';
}

// 5. Link zum Sponsor wird angezeigt, wenn er definiert wurde.

if ($sponsorlinkurl <> "") {
echo '<div class="row">'.$text["sponsorlink"].':&nbsp;<a title="'.$sponsortitleattribute.'" href="'.$sponsorlinkurl.'" target="_blank" rel="noopener"><span class="noBr">'.$sponsorlinktext.'</span></a></div>';
}

// 6. Link zum Validierungsdienst ausgeben oder nicht.

if ($validierung == "true") {
echo '<div class="row"><a title="'.$text["w3c_css_validierungs_titel"].'" href="https://jigsaw.w3.org/css-validator/check/referer" target="_blank" rel="noopener">
<img style="border:0;width:88px;height:31px" src="https://jigsaw.w3.org/css-validator/images/vcss-blue" alt="Test ob der CSS-Code valide ist." /></a></div>';
}

// Ausgabe des "Seitenanfang-Links" in Form dee nach oben zeigenden Pfeilspitz im Browserfenster unten rechts

echo '<div><a id="topLink" href="#"><i class="fa fa-angle-up fa-3x"></i></a></div>'."\n";

// Warnhinweis "Bitte JS aktivieren" oben rechts im Browserfenster ausgeben wenn im Browser keine Scripte erlaubt sind

echo '<div id="noScript">'."\n".'<br>'.$text['pleasaktivateJS'].'<br>'."\n";
echo ' <p><a href="?&amp;sitemap">&raquo; Sitemap</a></p>'."\n";
echo '</div>'."\n";

// Wenn das Plugin privacy installiert ist

if (function_exists('privacy')) {

// Wenn die Zustimmung zu Cookies gegeben wurde, Einbinden der cookie-permission.php

if (privacy_agreed()) {
if (is_readable($pth['folder']['template'].'cookie-permission.php')) {
include $pth['folder']['template'].'cookie-permission.php';
}
}
}

// Script - Bereich der Seite

echo '<script>'."\n";

// ENDE PHP-Bereich
?>

// *** scroll to top ***
jQuery(document).ready(function() {
var offset = 200; // start position
var duration = 600; // scroll speed
jQuery(window).scroll(function() {
if (jQuery(this).scrollTop() > offset) {
jQuery('#topLink').fadeIn(duration);
} else {
jQuery('#topLink').fadeOut(duration);
}
});
jQuery('#topLink').click(function(event) {
event.preventDefault();
jQuery('html, body').animate({scrollTop: 0}, duration);
return false;
})

// *** mobile menu ***
mobNavHeight = function () {
if ($(window).innerWidth() > 768) {
$('nav.secmenu').css({'display': 'block'});
$('.burger').addClass('active');
}
}
mobNavHeight();
$(window).resize(function () {
mobNavHeight();
});
$('.burger').click(function () {
$('nav.secmenu').fadeToggle();
$('.burger').toggleClass('active');
});
});
</script>
</div>
</body>
</html>

 


| Seitenanfang |