Plugin zur zeitgesteuerten Anzeige

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
lck
Posts: 2971
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by lck » Fri Oct 27, 2023 6:15 pm

Ich habe hier auch noch ein interessantes PHP-Script gefunden.
Sehr umfangreich, individuell einstellbar und doch kompakt. Die Einstellung erfolgt hier halt direkt in der PHP-Datei.

Ich habe testhalber noch um eine Abfrage für "Urlaub" von bis eingebaut. Code ist am Ende des Scripts und kommentiert.
Folgendes Code in die userfuncs.php kopieren und in der gewünschten Seite, Newsbox oder Footer etc. aufrufen per

Code: Select all

{{{oeffnungszeiten()}}}
userfuncs.php

Code: Select all

<?php
/*
 *  Öffnungszeiten
*/

date_default_timezone_set('Europe/Berlin');
  
function oeffnungszeiten() {

 // Wochentage ( Montag = 1, Dienstag = 2, ... Samstag = 6, Sonntag = 7 )
 $close = array(7); // an dieser Einstellung muss nichts mehr geändert werden

 $tage = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]; // Wochentage haben Namen...
 $monate = [1=>"Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
 $tag = date("w"); // Nummer des aktuellen Tages: 0 für Sonntag, 6  für Samstag

 // Offen ab - Uhrzeit der "normalen" Öffnung
 $time_start = '09:00';

 // Offen bis - Uhrzeit der "normalen" Schliessung
 $time_stop = '17:00';

 // Falls die Zeiten an einem Tag anders sind - zum Beispiel:
/*
  // Montag
  if (date('N') == "1") {
    $time_start = '09:30';    // Öffnungszeit am Montag  09.30
  // $time_stop = '15:00';    // Schliesszeit am Montag  15.00
  }
*/

 //Freitag
 if (date('N') == "5") {
// $time_start = '09:30';    // andere Öffnungszeit am Freitag
  $time_stop = '15:00';    // andere Schliesszeit am Freitag 15.00
 }

// Am Samstag ist geschlossen
 if (date('N') == "6") {
// $time_start = '09:00';    // andere Öffnungszeit am Samstag
  $time_stop = $time_start;   // Schliesszeit gleich der Öffnungszeit - Samstag geschlossen
 }


// Funktion Anrede, je nach Uhrzeit des Tages
$uhrzeit = date('H.i'); 
 if ($uhrzeit >= "03.30" && $uhrzeit < "05.00") {
  $gruss = 'Guten Morgen Besucher zur frühen Stunde, ';
}
elseif ($uhrzeit >= "05.00" && $uhrzeit < "12.00") {
 $gruss = 'Guten Morgen Besucher, ';
}
elseif ($uhrzeit >= "12.00" && $uhrzeit < "18.00") {
 $gruss = 'Guten Tag Besucher, ';
}
elseif ($uhrzeit >= "18.00" && $uhrzeit < "23.59") {
 $gruss = 'Guten Abend Besucher, ';
}
else {$gruss = 'Guten Abend Besucher zur späten Stunde, ';
}

// Funktion "vor" der Öffnung oder "nach" der Schliessung
if ($uhrzeit >= "00.00" &&
    $uhrzeit < "09.00") {
 $gruss2 = 'noch';
}
elseif ($uhrzeit >= $time_stop &&
          $uhrzeit < "00.00") {
 $gruss2 = 'schon';
} 
else {
 $gruss2 = 'schon';
}

// Feste und bewegliche Feiertage
$holiday =  [ 
 '01.01',             // Neues Jahr
//        $heute = date("d.m"), // heutiges Datum - zum testen!
 $Rosenmontag = date("d.m",easter_date()-48*86400), // Rosenmontag,  48 Tage vor Ostern
 $Karfreitag = date("d.m",easter_date()-2*86400), // Karfreitag, 2 Tage vor Ostern
 $Ostermontag = date("d.m",easter_date()+86400), // Ostermontag
 '01.05',             // Erster Mai
 $ChristiHimmelfahrt = date("d.m",easter_date()+39*86400),
 $Pfingstmontag = date("d.m",easter_date()+50*86400),
 $Fronleichnam = date("d.m",easter_date()+60*86400),
 '03.10', // Tag der deutschen Einheit
 '01.11',  // Allerheiligen
 '24.12', // Heiliger Abend
 '25.12', // 1 Weihnachtstag
 '26.12', // 2 Weihnachtstag
 '31.12', // Silvester
];

$feiertag ="keiner";


  // Prüfen ob geöffnet ist (Wochentag, Uhrzeit und Feiertag)
  if (date('N') != in_array(date('N'), $close) &&
      date('H:i') >= $time_start &&
      date('H:i') <= $time_stop &&
      date('d.m') != in_array(date('d.m'), $holiday)) {
    $offen = $gruss . ' Unser Büro ist heute, am ' . $tage[$tag] . '  den ' . date(" d") . ' ' . $monate[date("n")] . ' von ' . $time_start . ' bis ' . $time_stop . ' geöffnet';
   }
   else {
     if (date('d.m') == in_array(date('d.m'), $holiday)) {
      if (date("d.m") == "01.01") $feiertag = 'Neujahr';
//    if (date("d.m") == "$heute")  $feiertag = 'Aktuelles Datum'; // heutiges Datum - zum testen!
      if (date("d.m") == "$Rosenmontag") $feiertag = 'Rosenmontag';
      if (date("d.m") == "$Karfreitag") $feiertag = 'Karfreitag';
      if (date("d.m") == "$Ostermontag") $feiertag = 'Ostemontag';
      if (date("d.m") == "01.05") $feiertag = 'Tag der Arbeit';
      if (date("d.m") == "$ChristiHimmelfahrt") $feiertag = 'Christi Himmelfahrt';
      if (date("d.m") == "$Pfingstmontag") $feiertag = 'Pfingstmontag';
      if (date("d.m") == "$Fronleichnam ") $feiertag = 'Fronleichnam';
      if (date("d.m") == "03.10") $feiertag = 'Tag der Deutschen Einheit';
      if (date("d.m") == "01.11") $feiertag = 'Allerheiligen';
      if (date("d.m") == "24.12") $feiertag = 'Heiliger Abend';
      if (date("d.m") == "25.12") $feiertag = '1. Weihnachtstag';
      if (date("d.m") == "26.12") $feiertag = '2. Weihnachtstag';
      if (date("d.m") == "31.12") $feiertag = 'Silvester';
      
   }

   if ($feiertag != "keiner") {
    $offen = $gruss . " Heute, am " . $feiertag . ', ist unser Büro geschlossen.';
   }
   elseif ($tage[$tag] == "Samstag") {
    $offen = $gruss . ' heute am ' . $tage[$tag] . ', ist unser Büro geschlossen.';
   }
   elseif ($tage[$tag] == "Sonntag") {
    $offen = $gruss . ' heute am ' . $tage[$tag] . ', ist unser Büro geschlossen.';
   }
   else {
    $offen = $gruss . 'unser Büro hat heute, am ' . $tage[$tag] . ' den ' . date(" d") . ' ' . $monate[date("n")] . ' ' . $gruss2 . ' geschlossen.';
   }
  }


// Prüfen ob Urlaub ist, von bis ... (lck)
    $currentDate = date('d.m.Y');
    $currentDate = date('d.m.Y', strtotime($currentDate));

    $startDate = date('d.m.Y', strtotime("2023/10/20"));
    $endDate = date('d.m.Y', strtotime("2023/10/31"));

    if (($currentDate >= $startDate) && ($currentDate <= $endDate)) {
        $offen = ' Unserer Büro ist vom ' . $startDate . ' bis ' . $endDate . ' wegen Urlaub geschlossen. ';
    }
// Urlaub end (lck)


//   $offen = 'Wir haben Urlaub. Unser Büro ist bis Dienstag, den 14. April 2021 geschlossen'; // Info über Urlaub   
    return($offen);
}

// echo  '<p>' . oeffnungszeiten() . '</p>';
Man könnte daraus auch ein Plugin machen, um das komfortabler bedienen zu können. (@olape: das wär doch was für dich ;) )

*Ein simples Plugin ist auch jetzt schon möglich. Einfach den Code nicht in die userfuncs.php packen, sondern unter Plugins einen neuen Ordner names oeffnungszeiten anlegen und dort eine index.php mit dem geposteten Code anlegen. Eine admin.php ist hierbei auch nicht nötig. Der Plugin-Aufruf ist der gleiche wie oben.

Plugin
oeffnungszeiten.zip
You do not have the required permissions to view the files attached to this post.
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

Berni
Posts: 132
Joined: Wed Feb 12, 2014 4:38 pm
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by Berni » Sat Oct 28, 2023 11:11 am

Super, danke an euch (@olape, @Ick) beide.
Da habe ich dann wohl genut Input für das nächste Wochenende :D

olape
Posts: 2752
Joined: Fri Mar 13, 2015 8:47 am
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by olape » Mon Oct 30, 2023 7:04 am

Berni wrote:
Sat Oct 28, 2023 11:11 am
Super, danke an euch (@olape, @Ick) beide.
Warum mir? Ich bin an der ganzen Sache gar nicht beteiligt.
lck wrote:
Fri Oct 27, 2023 6:15 pm
@olape: das wär doch was für dich
Und schon habe ich wieder ein Wurm im Ohr. :o

Wenn man alle Möglichkeiten per Konfiguration und / oder Parameter zugänglich machen will, dann wird es trotz der vermeintlichen Einfachheit doch sehr umfangreich.
Aber im Moment hätte ich auch wirklich keine Zeit dafür.
Gruß Olaf, Plugins for CMSimple_XH

Ich habe schon lange den Verdacht, dass so viele so eifrig auf Gender, Trans und Queer machen:
Weil sie für das Fachliche ganz einfach zu doof sind.

Berni
Posts: 132
Joined: Wed Feb 12, 2014 4:38 pm
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by Berni » Mon Oct 30, 2023 9:50 am

olape wrote:
Mon Oct 30, 2023 7:04 am
Warum mir? Ich bin an der ganzen Sache gar nicht beteiligt.
Doch, doch.
Du hast ja den Download Link gepostet den ich einfach nicht gefunden habe :)

Motsch
Posts: 100
Joined: Tue Dec 10, 2019 10:18 am

Re: Plugin zur zeitgesteuerten Anzeige

Post by Motsch » Thu Nov 02, 2023 9:32 am

Hallo,
dieser Thread wäre hilfreich, aber ...
lck wrote:
Sat Oct 21, 2023 10:26 am
Berni wrote:
Sat Oct 21, 2023 8:41 am
Ich suche ein Plugin das es mir ermöglicht, Textinhalt (oder eine Box) zeitgesteuert auf einer Seite ein- und auszublenden.
Ein Plugin wüsste ich momentan nicht, aber es gibt von olape (olaf) ein script für die userfuncs.php. Eventuell passt das schon für dich.

Code siehe: viewtopic.php?f=16&t=16051&start=20#p74721
Anleitung: viewtopic.php?f=16&t=16051&start=20#p74716
... diese Informationen habe umgesetzt, leider ohne Erfolg. Denn auch geänderte Datumsbereiche(auf aktuelle Datum) für den Urlaub sind nicht da, einfach leer ?
Das Plugin von http://sitr-plugins.cmsimple.sk/ ist zwar gut, aber funktioniert nicht mit jedem template (bei mir als Bsp. fhs-whitespace). Kann auch sein, dass ich die eine oder andere Datei vom Plugin falsch übersetzt habe, denke aber, dass Deepl das kann, so denke ich.

Wahrscheinlich wird die Lösung einfach sein, aber ich ???

Tata
Posts: 3588
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by Tata » Thu Nov 02, 2023 10:13 am

Motsch wrote:
Thu Nov 02, 2023 9:32 am
Das Plugin von http://sitr-plugins.cmsimple.sk/ ist zwar gut, aber funktioniert nicht mit jedem template.
Das ist wohl so. Die Plugins Umgebung muss schon dem bestimmten Template anpassen.
Die Strukture is im Block /* create the newsbox content */ definiert. Es geht nur darum, dass die unnötige Konteiners können auskommentiert werden, oder dann im Stylesheet ander gestaltet.
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

Motsch
Posts: 100
Joined: Tue Dec 10, 2019 10:18 am

Re: Plugin zur zeitgesteuerten Anzeige

Post by Motsch » Thu Nov 02, 2023 11:05 am

Hallo Tata,
wie soll ich das verstehen?
###
Das ist wohl so. Die Plugins Umgebung muss schon dem bestimmten Template anpassen.
###
Muss man dann selbst diese templates nochmal erstellen? Das wäre für mich als Laie sehr ????

Struktur im Block:
was ist das? Was ist ein "Konteiners"? Wikipedia kennt das nicht.

Tata
Posts: 3588
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by Tata » Thu Nov 02, 2023 3:32 pm

Motsch wrote:
Thu Nov 02, 2023 11:05 am
Hallo Tata,
wie soll ich das verstehen?
###
Das ist wohl so. Die Plugins Umgebung muss schon dem bestimmten Template anpassen.
###
Muss man dann selbst diese templates nochmal erstellen? Das wäre für mich als Laie sehr ????

Struktur im Block:
was ist das? Was ist ein "Konteiners"? Wikipedia kennt das nicht.
Ach so!
1. Ein Pluginautor kann nicht wissen, welche Templates benutzt werden. Darum haben die Plugins (falls nötig) die Templates (meistens) direkt in der index.php Datei integriert. In diesem Fall suche in idex.php nach

Code: Select all

    /* create the newsbox content */ *etwa die Zeile 43
Dort beginnt der Code.

Code: Select all

        /* create the newsbox content */
$o = '		<div class="sitr_box">';
$o .= '			<div class="sitr_time">'
   					. $today_name . ', ' . date($plugin_tx['sitr']['dateformat'])
   					. ' </div>';
$o .= '			<div  class="sitr_box_content">';
    if(strlen(newsbox($plugin_tx['sitr']['day'])) < 50 ) {
$o .= '				<div class="sitr_box_content_inner">' . newsbox($plugin_tx['sitr']['page_no_information']) . '</div>';
    } elseif($time < $announceTime){
$o .= '				<div class="text_above">' . $plugin_tx['sitr']['text_above'] . '</div>';
$o .= '				<div class="sitr_box_content_inner">' . sprintf($plugin_tx['sitr']['text_before_announcement'],$plugin_cf['sitr']['information_announce_on']) . '</div>';
$o .= '				<div class="text_below">' . $plugin_tx['sitr']['text_below'] . '</div>';
    } elseif(($announceTime < $time) && ($time < $startTime)) {
$o .= '				<div class="announce">' . sprintf($plugin_tx['sitr']['text_before_start'],$plugin_cf['sitr']['information_start_time']) . '</div>
	 					<div class="text_above">' 
	. 						$plugin_tx['sitr']['text_above'] . '
						 
	  				</div>';
$o .= '				<div class="sitr_box_content_inner">' . newsbox($plugin_tx['sitr']['day']) . '</div>';
$o .= '				<div class="text_below">' . $plugin_tx['sitr']['text_below'] . '</div>';
    } elseif(($startTime < $time) && ($time < $stopTime)) {
$o .= '				<div class="text_above">' . $plugin_tx['sitr']['text_above'] . '</div>';
$o .= '				<div class="sitr_box_content_inner">' . newsbox($plugin_tx['sitr']['day']) . '</div>'; 
$o .= '				<div class="text_below">' . $plugin_tx['sitr']['text_below'] . '</div>';
    } else {
$o .= '				<div class="sitr_box_content_inner">';
$o .= '					<div class="no_information">' . newsbox($plugin_tx['sitr']['page_no_information']) . '</div>';
$o .= '				</div>';
    }
$o .= '				<div class="sitr_footer">' . $plugin_tx['sitr']['copyright'] . '</div>';
$o .= '			</div>';
    // end of box
$o .='		</div>';

return $o;
} 
Ist s.g. Block oder Konteiner, in dem auch mehrere Konteiners reingebaut sein können. Es gibt mehrere Blöcke in der Datei, je nach der Situazion (Zeit, Tag usw.).
Möchtest Du z.B. den Text über dem Hauptkontent auslassen, lösche die Zeile mit

Code: Select all

<div class="text_above">' . $plugin_tx['sitr']['text_above'] . '</div>';
oder lösche nur den Text in Deiner Sprachdatei unter

Code: Select all

$plugin_tx['sitr']['text_above']
Möchtest Du nur die Farben ändern suche die entsprechende Class in der css/stylesheet.css. Die Farben können auch generrel raus - in dem Fall lösche in der stzlesheet.css alle Farbendeklarationen.
Etwa klarer jetzt?
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

Motsch
Posts: 100
Joined: Tue Dec 10, 2019 10:18 am

Re: Plugin zur zeitgesteuerten Anzeige

Post by Motsch » Thu Nov 02, 2023 4:24 pm

Tata wrote:
Thu Nov 02, 2023 3:32 pm
Motsch wrote:
Thu Nov 02, 2023 11:05 am
Hallo Tata,
wie soll ich das verstehen?
###
Das ist wohl so. Die Plugins Umgebung muss schon dem bestimmten Template anpassen.
###
Muss man dann selbst diese templates nochmal erstellen? Das wäre für mich als Laie sehr ????

Struktur im Block:
was ist das? Was ist ein "Konteiners"? Wikipedia kennt das nicht.
Ach so!
1. Ein Pluginautor kann nicht wissen, welche Templates benutzt werden. Darum haben die Plugins (falls nötig) die Templates (meistens) direkt in der index.php Datei integriert. In diesem Fall suche in idex.php nach

Code: Select all

    /* create the newsbox content */ *etwa die Zeile 43
Dort beginnt der Code.

Code: Select all

        /* create the newsbox content */
$o = '		<div class="sitr_box">';
$o .= '			<div class="sitr_time">'
   					. $today_name . ', ' . date($plugin_tx['sitr']['dateformat'])
   					. ' </div>';
$o .= '			<div  class="sitr_box_content">';
    if(strlen(newsbox($plugin_tx['sitr']['day'])) < 50 ) {
$o .= '				<div class="sitr_box_content_inner">' . newsbox($plugin_tx['sitr']['page_no_information']) . '</div>';
    } elseif($time < $announceTime){
$o .= '				<div class="text_above">' . $plugin_tx['sitr']['text_above'] . '</div>';
$o .= '				<div class="sitr_box_content_inner">' . sprintf($plugin_tx['sitr']['text_before_announcement'],$plugin_cf['sitr']['information_announce_on']) . '</div>';
$o .= '				<div class="text_below">' . $plugin_tx['sitr']['text_below'] . '</div>';
    } elseif(($announceTime < $time) && ($time < $startTime)) {
$o .= '				<div class="announce">' . sprintf($plugin_tx['sitr']['text_before_start'],$plugin_cf['sitr']['information_start_time']) . '</div>
	 					<div class="text_above">' 
	. 						$plugin_tx['sitr']['text_above'] . '
						 
	  				</div>';
$o .= '				<div class="sitr_box_content_inner">' . newsbox($plugin_tx['sitr']['day']) . '</div>';
$o .= '				<div class="text_below">' . $plugin_tx['sitr']['text_below'] . '</div>';
    } elseif(($startTime < $time) && ($time < $stopTime)) {
$o .= '				<div class="text_above">' . $plugin_tx['sitr']['text_above'] . '</div>';
$o .= '				<div class="sitr_box_content_inner">' . newsbox($plugin_tx['sitr']['day']) . '</div>'; 
$o .= '				<div class="text_below">' . $plugin_tx['sitr']['text_below'] . '</div>';
    } else {
$o .= '				<div class="sitr_box_content_inner">';
$o .= '					<div class="no_information">' . newsbox($plugin_tx['sitr']['page_no_information']) . '</div>';
$o .= '				</div>';
    }
$o .= '				<div class="sitr_footer">' . $plugin_tx['sitr']['copyright'] . '</div>';
$o .= '			</div>';
    // end of box
$o .='		</div>';

return $o;
} 
Ist s.g. Block oder Konteiner, in dem auch mehrere Konteiners reingebaut sein können. Es gibt mehrere Blöcke in der Datei, je nach der Situazion (Zeit, Tag usw.).
Möchtest Du z.B. den Text über dem Hauptkontent auslassen, lösche die Zeile mit

Code: Select all

<div class="text_above">' . $plugin_tx['sitr']['text_above'] . '</div>';
oder lösche nur den Text in Deiner Sprachdatei unter

Code: Select all

$plugin_tx['sitr']['text_above']
Möchtest Du nur die Farben ändern suche die entsprechende Class in der css/stylesheet.css. Die Farben können auch generrel raus - in dem Fall lösche in der stzlesheet.css alle Farbendeklarationen.
Etwa klarer jetzt?
Hallo TATA,
danke, aber ...
... was sind bitte sind nun Konteiner? Ich kenne nur Container?
Die Beschreibung ist zwar ausreichend, aber ich komme mit diesen Dingen nicht klar.
Wahrscheinlich ist das was für cms, olape oder wie die Informatiker hier heißen, ich bin da raus.
Hilfe ist das keine.

Tata
Posts: 3588
Joined: Tue May 20, 2008 5:34 am
Location: Slovakia
Contact:

Re: Plugin zur zeitgesteuerten Anzeige

Post by Tata » Thu Nov 02, 2023 4:50 pm

Sei es nun Conteiner.
Falls Du kein Lust hast bischen tiefer in HTML und CSS reingehen, jede Hilfe wird kaum helfen.
CMSimple.sk
It's no shame to ask for an answer if all efforts failed.
But it's awful to ask without any effort to find the answer yourself.

Post Reply