[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Inhaltsmodul zeitgesteuert - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

Inhaltsmodul zeitgesteuert

6. Aug 2005, 22:13

Hi, liebe Programmierer,

könnt Ihr mir vielleicht bei folgendem Problem Hilfestellung leisten:

Ich will - wie schon mehrfach hier im Forum angesprochen - ein Inhaltsmodul zeitgesteuert anzeigen lassen. So ähnlich wie die Zeitsteuerung einer ganzen Seite dachte ich mir das.

Also hab ich beim Inhaltsmodul folgenden Codeblock eingefügt, mit dem man jeweils Jahr, Monat und Tag des Start- und Endedatums festlegt, die dann in insgesamt sechs Feldern landen:

Code: Alles auswählen

Online von<br />
<select name="VALUE[4]" >
<?php
foreach (array("2005","2006","2007","2008","2009","2010") as $jahr_von) {
	echo '<option value="'.$jahr_von.'" ';
	
	if ( "REX_VALUE[4]"=="$jahr_von" ) {
		echo 'selected="selected" ';
	}
	echo '>'.$jahr_von.'</option>';
}
?>

</select><select name="VALUE[5]" >
<?php
foreach (array("01","02","03","04",
"05","06","07","08","09","10","11","12") as $monat_von) {
	echo '<option value="'.$monat_von.'" ';
	
	if ( "REX_VALUE[5]"=="$monat_von" ) {
		echo 'selected="selected" ';
	}
	echo '>'.$monat_von.'</option>';
}
?>

</select><select name="VALUE[6]" >
<?php
foreach (array("01","02","03","04","05","06",
"07","08","09","10","11","12","13","14","15",
"16","17","18","19","20","21","22","23","24","25",
"26","27","28","29","30","31") as $tag_von) {
	echo '<option value="'.$tag_von.'" ';
	
	if ( "REX_VALUE[6]"=="$tag_von" ) {
		echo 'selected="selected" ';
	}
	echo '>'.$tag_von.'</option>';
}
?>
</select><br /><br />

Online bis<br />
<select name="VALUE[7]" >
<?php
foreach (array("2005","2006","2007","2008",
"2009","2010") as $jahr_bis) {
	echo '<option value="'.$jahr_bis.'" ';
	
	if ( "REX_VALUE[7]"=="$jahr_bis" ) {
		echo 'selected="selected" ';
	}
	echo '>'.$jahr_bis.'</option>';
}
?>

</select><select name="VALUE[8]" >
<?php
foreach (array("01","02","03","04","05","06",
"07","08","09","10","11","12") as $monat_bis) {
	echo '<option value="'.$monat_bis.'" ';
	
	if ( "REX_VALUE[8]"=="$monat_bis" ) {
		echo 'selected="selected" ';
	}
	echo '>'.$monat_bis.'</option>';
}
?>

</select><select name="VALUE[9]" >
<?php
foreach (array("01","02","03","04","05","06","07",
"08","09","10","11","12","13","14","15","16","17",
"18","19","20","21","22","23","24","25","26","27",
"28","29","30","31") as $tag_bis) {
	echo '<option value="'.$tag_bis.'" ';
	
	if ( "REX_VALUE[9]"=="$tag_bis" ) {
		echo 'selected="selected" ';
	}
	echo '>'.$tag_bis.'</option>';
}
?>
</select><br /><br />

Doch dummerweise funktioniert dann bei der Ausgabe folgender SQL-Befehl nicht, weil man nicht nach einem mittels concat zusammengefügten Wert selektieren kann:

Code: Alles auswählen

$sql = "select *, concat(value4,value5,value6) as start, concat(value7,value8,value9) as ende from rex_article_slice where article_id='19' and start <= ".$aktuelles_datum." and ende >= ".$aktuelles_datum;
Also funktioniert mein ganzer Ansatz nicht, und man muss das Start- und Endedatum irgendwie in jeweils nur ein Feld und nicht in drei reinbekommen? Aber wie (wenn man es nicht schnöde als 20050806 eintragen will, sondern mit schicken Dropdownfeldern machen will)?


Vielen Dank im voraus,
Peter.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

7. Aug 2005, 05:33

Hi Peter,

1)
schau dir mal die Funktion range an, dass macht deinen code einfacher

Dabei aber folgendes beachten:
php-manual hat geschrieben: If you set number range via variables (eg., range($from, $to)) make sure
you've set type of the variables to integer or your code won't work with version 4.1.0 and above.

$from = 0;
$to = 7;
foreach( range((int) $from, (int) $to) as $number ) {
print "$number\n";
}
2)
Warum nicht PHP Seitig die 3 Eingaben zu einem Timestamp zusammenfassen und dann in ein Feld in der DB schreiben?

Dann funktioniert dein SQL auch ;)

3) Gut, dass noch nicht so spät ist (5.35?)... Ich geh pennen, gute Nacht ;)

Gruß,
Markus

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

7. Aug 2005, 09:59

Hallo Markus,

vielen Dank ...
kills hat geschrieben:schau dir mal die Funktion range an, dass macht deinen code einfacher
Guter Tipp, werde ich für die Zukunft beachten. Nun aber zu 2:
kills hat geschrieben:Warum nicht PHP Seitig die 3 Eingaben zu einem Timestamp zusammenfassen und dann in ein Feld in der DB schreiben?
Weil ich's nicht kann. :oops:
Hatte mir die Funktion mktime sogar schon mal angesehen, aber wie müsste das im Inhaltsmodul gemacht werden, dass die drei Dropdownfelder zu einem Wert zusammengefasst werden, dieser dann als value4 in die Datenbank geschrieben wird (als hidden value oder wie würde man das machen) und beim erneuten Editieren des Moduls wieder aufgesplittet und als jeweils selektierter Wert in die Dropdownfelder übernommen wird? Puh ...

Meinst Du, Du könntest (nach ausgiebigem Ausschlafen, einem englischen Frühstück und drei Kannen Kaffee natürlich) mal ein Beispiel für das Online-von-Datum zusammenbasteln? Nur wenn's nicht zuviel Mühe macht, denn das übersteigt meine Fähigkeiten ...

Herzlichen Dank schon mal,
Peter.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

7. Aug 2005, 17:35

Hi Peter,
pbickel hat geschrieben: Meinst Du, Du könntest (nach ausgiebigem Ausschlafen, einem englischen Frühstück und drei Kannen Kaffee natürlich) mal ein Beispiel für das Online-von-Datum zusammenbasteln? Nur wenn's nicht zuviel Mühe macht, denn das übersteigt meine Fähigkeiten ...
Heute hab ich leider keine Zeit, aber ich kann am Mo mal probieren.

Gruß,
Markus

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

8. Aug 2005, 13:45

Hi Peter,

also ich hab mir das ganze grad nochmal durch den Kopf gehen lassen?

Eingabe:

Code: Alles auswählen

Online von<br />
<select name="VALUE[4]" >
<?php
foreach (range( 2005,2010) as $jahr_von) {
   echo '<option value="'.$jahr_von.'" ';
   
   if ( "REX_VALUE[4]"=="$jahr_von" ) {
      echo 'selected="selected" ';
   }
   echo '>'.$jahr_von.'</option>';
}
?>

</select><select name="VALUE[5]" >
<?php
foreach (range(1,12) as $monat_von) {
   echo '<option value="'.$monat_von.'" ';
   
   if ( "REX_VALUE[5]"=="$monat_von" ) {
      echo 'selected="selected" ';
   }
   echo '>'.$monat_von.'</option>';
}
?>

</select><select name="VALUE[6]" >
<?php
foreach (range(1,31) as $tag_von) {
   echo '<option value="'.$tag_von.'" ';
   
   if ( "REX_VALUE[6]"=="$tag_von" ) {
      echo 'selected="selected" ';
   }
   echo '>'.$tag_von.'</option>';
}
?>
</select><br /><br />

Online bis<br />
<select name="VALUE[7]" >
<?php
foreach (range(2005,2010) as $jahr_bis) {
   echo '<option value="'.$jahr_bis.'" ';
   
   if ( "REX_VALUE[7]"=="$jahr_bis" ) {
      echo 'selected="selected" ';
   }
   echo '>'.$jahr_bis.'</option>';
}
?>

</select><select name="VALUE[8]" >
<?php
foreach (range(1,12) as $monat_bis) {
   echo '<option value="'.$monat_bis.'" ';
   
   if ( "REX_VALUE[8]"=="$monat_bis" ) {
      echo 'selected="selected" ';
   }
   echo '>'.$monat_bis.'</option>';
}
?>

</select><select name="VALUE[9]" >
<?php
foreach (range(1,31) as $tag_bis) {
   echo '<option value="'.$tag_bis.'" ';
   
   if ( "REX_VALUE[9]"=="$tag_bis" ) {
      echo 'selected="selected" ';
   }
   echo '>'.$tag_bis.'</option>';
}
?>
</select><br /><br />
Ausgabe:

Code: Alles auswählen

$jahr_von = 'REX_VALUE[4]';
$monat_von = 'REX_VALUE[5]';
$tag_von = 'REX_VALUE[6]';

$jahr_bis = 'REX_VALUE[7]';
$monat_bis = 'REX_VALUE[8]';
$tag_bis = 'REX_VALUE[9]';

if ( $jahr_von != ''
     && $monat_von != ''
     && $tag_von != ''
     && $jahr_bis != ''
     && $monat_bis != ''
     && $tag_bis != '') {
  $von = mktime( 0, 0, 0, $monat_von, $tag_von, $jahr_von);
  $bis  = mktime( 0, 0, 0, $monat_bis, $tag_bis, $jahr_bis);
  $jetzt = time();

  if( $jetzt > $von && $jetzt < $bis) {
    // hier machen was immer du willst, wenn der Artikel im Bereich von VON und BIS ist
  } else {
    // hier machen was immer du willst, wenn der Artikel NICHT im Bereich von VON und BIS ist
  }
}
ungetestet!!

Gruß,
Markus
Zuletzt geändert von Markus.Staab am 9. Aug 2005, 17:10, insgesamt 1-mal geändert.

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

9. Aug 2005, 16:59

Hallo Markus,

vielen vielen Dank!
Du hast mir damit einen großen Dienst erwiesen.
Dafür bekommst Du einen Credit auf meiner aktuell bearbeiteten Website ...

Nur eine Korrektur für die, die den Code übernehmen wollen:
Statt

Code: Alles auswählen

  if( $time > $von && $time < $bis) { 
muss es heißen:

Code: Alles auswählen

  if( $jetzt > $von && $jetzt < $bis) { 
Schöne Grüße,
Peter.

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

9. Aug 2005, 17:12

Hi Peter,
pbickel hat geschrieben: vielen vielen Dank!
Du hast mir damit einen großen Dienst erwiesen.
Dafür bekommst Du einen Credit auf meiner aktuell bearbeiteten Website ...
Immer wieder gerne.
Dass du mich auf deiner Seite erwähnen willst, freut mich umso mehr ;)
pbickel hat geschrieben: Nur eine Korrektur für die, die den Code übernehmen wollen:
Statt

Code: Alles auswählen

  if( $time > $von && $time < $bis) { 
muss es heißen:

Code: Alles auswählen

  if( $jetzt > $von && $jetzt < $bis) { 
Hab ich oben geändert.

Diese Module werde ich dann auch ins myREDAXO übernehmen, wenn es soweit ist.

Danke!

Gruß,
Markus

Zurück zu „Allgemeines [R2]“