Wochenplan

Gesperrt
chobbert
Beiträge: 371
Registriert: Mo 14. Jul 2003, 10:14
Wohnort: Frankfurt am Main
Kontaktdaten:

Wochenplan

Beitrag von chobbert » So 14. Mär 2004, 14:15

Hallo,

hier ein neues Modul, mit dem ein einfacher Wochenplan dargestellt werden kann. Die einzelnen Termine werden jeweils mit CSS plaziert.

Eine Beispiel-Anwendung findet man hier:

Bild
http://www.dance-in-ffm.de/cms/front_co ... hp?idcat=5

Bild

vgl. auch http://www.contenido.de/forum/viewtopic.php?t=3574




Schöne Grüße

Robert





INPUT

Code: Alles auswählen


/*
* Modul W O C H E N P L A N
* INPUT
*
* Robert Strouhal www.clearcreative.de
* Version: 1.1
* 24.01.2004
*
*
*
*/



echo "<table>";

echo "<tr><td>Tage</td><td><input type=\"text\" name=\"CMS_VAR[1]\" value=\"CMS_VALUE[1]\" size=50></td>\n";
echo "<tr><td>Anfangszeit</td>";
echo "<td>";
echo "<select name=\"CMS_VAR[2]\">\n";

for ($i=0; $i<=23; $i++){
	echo "<option value=\"".$i.":00\" ";
	if ("CMS_VALUE[2]" == ($i.":00")){
		echo " selected ";
	}
	echo ">".sprintf('%02d',$i).":00</option>";
}
echo "</select></td>";
echo "</tr>\n";

echo "<tr><td>Endzeit</td>";
echo "<td>";
echo "<select name=\"CMS_VAR[3]\">\n";

for ($i=0; $i<=23; $i++){
	echo "<option value=\"".$i.":00\" ";
	if ("CMS_VALUE[3]" == ($i.":00")){
		echo " selected ";
	}
	echo ">".sprintf('%02d',$i).":00</option>";
}
echo "</select></td>";
echo "</tr>\n";


echo "<tr><td>Breite</td><td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\" size=5></td></tr>\n";
echo "<tr><td>Höhe</td><td><input type=\"text\" name=\"CMS_VAR[6]\" value=\"CMS_VALUE[6]\" size=5></td></tr>\n";

echo "<tr>";
echo "<td>Termine (siehe Erläuterung)</td>";
echo "<td><text"?><? echo "area name=\"CMS_VAR[4]\" cols=60 rows=10 style=\"font-size: 8pt;\">CMS_VALUE[4]</text";
echo "area></td></tr>\n";


echo "<tr><td>&nbsp;</td><td style=\"background-color: #D7F0AF;\" ><b>Erläuterung</b>: Termine werden nach folgendem Schema eingetragen:<br>";
echo "<pre style=\"font-size: 8pt;\">Tag;Anfangszeit;Endzeit;Text;Style</pre>\n";
echo "<ul>";
echo "<li><b>Tag</b> wie oben in der Liste eingetragen (ausgeschrieben!)</li>\n";
echo "<li><b>Anfangszeit</b> z.B. 10:00</li>\n";
echo "<li><b>Endzeit</b> z.B. 11:00</li>\n";
echo "<li><b>Text</b> der als Beschriftung erscheint</li>\n";
echo "<li><i><b>Style</b> Verweis auf CSS-Angabe (optional)</i></li>\n";
echo "</ul>";
echo "</td></tr>\n";
echo "</table>\n";



OUTPUT

Code: Alles auswählen


<?
/*
* Modul W O C H E N P L A N
* OUTPUT
*
* Robert Strouhal www.clearcreative.de
* Version: 1.1
* 24.01.2004
*
*
*
*/




define ("RANDBREITE", "50");
define ("RANDHOEHE", "30");


function hours2decimal($hour){
	$hour = str_replace(".",":",$hour);
	$hour = explode(":",$hour);
	
	return $hour[0]+($hour[1]/60);
}

function decimal2hours($hour){
	$minutes = $hour-floor($hour);
	$hour    = floor($hour);
	$minutes = 60*$minutes;

	return sprintf('%02d',$hour).":".sprintf('%02d',$minutes);
}


class Wochenplan{

	var $tage;
	var $anfangsZeit;
	var $endZeit;
	
	var $hoehe;
	var $breite;
	var $stundenHoehe;
	var $tagesBreite;
	
	var $termine;
	
	
	function Wochenplan($breite, $hoehe, $tage, $anfangsZeit, $endZeit){
		$this->breite = $breite;
		$this->hoehe  = $hoehe;
		$this->tage   = $tage;		
		$this->anfangsZeit = hours2decimal($anfangsZeit);
		$this->endZeit     = hours2decimal($endZeit);
		
		$this->stundenHoehe = ($this->hoehe-RANDHOEHE)/($this->endZeit-$this->anfangsZeit);
		$this->tagesBreite  = ($this->breite-RANDBREITE)/count($this->tage);
		
		$this->termine  = array();
	}
	
	function display(){
                                echo "<img src=\"i/spacer.gif\" height=\"CMS_VALUE[6]\" width=\"1\" border=\"0\"><br>\n";
                                echo "<img src=\"i/spacer.gif\" height=\"75\" width=\"1\" border=\"0\"><br>\n";

		echo "<div style=\"position:absolute; top: 285px; left: 42px;\">\n";
		echo "<table cellpadding=0 cellspacing=0 border=0 class=\"WochenplanTable\">\n";
		echo "<tr>\n";
		echo "<th width=\"".RANDBREITE."\" height=\"".RANDHOEHE."\">&nbsp;</th>";
		
		
		foreach ($this->tage as $t){
			echo "<th width=\"".$this->tagesBreite."\" class=\"WochenplanHead\">".$t."</th>\n";
		}
		echo "</tr>\n";
		
		for ($i=$this->anfangsZeit; $i<=$this->endZeit; $i++){
			echo "<tr><th class=\"WochenplanHead\"height=\"".$this->stundenHoehe."\">".decimal2hours($i)."</th>";
			
			for ($j=0; $j<count($this->tage); $j++){
				echo "<td class=\"WochenplanCell\">&nbsp;</td>\n";
			}
			echo "</tr>\n";
		}
		
		echo "</table>\n";
		
		foreach ($this->termine as $t){
			echo $this->printTermin($t);
		}
		
		echo "</div>\n";
	}
	
	
	function addTermin($termin){
		$this->termine[] = $termin;
	}
	
	
	function printTermin($termin){

		// die x-Position
		// 5 Pixel Rand nach links
		$xpos = array_search($termin->tag,$this->tage)*($this->tagesBreite+0)+RANDBREITE+5;
		
		// die y-Position
		
		$ypos  = (($termin->anfangsZeit)-($this->anfangsZeit))*($this->stundenHoehe+0)+RANDHOEHE;
		//$ypos  = $termin->anfangsZeit*($this->stundenHoehe+0)+RANDHOEHE;
		
		$width = $this->tagesBreite-5; // 5 px Rand nach rechts
		$height = $this->stundenHoehe*$termin->dauer;
		
		return "<div style=\"position: absolute; height:".$height."; width:".$width."; top:".$ypos."; left:".$xpos."; z-index: 1;\" class=\"".$termin->style."\"><b>".$termin->text."</b><br>".decimal2hours($termin->anfangsZeit)." - ".decimal2hours($termin->endZeit)."</div>\n";
	}
}


class WochenTermin{
	
	var $tag;
	var $anfangsZeit;
	var $endZeit;
	var $dauer;
	var $text;
	var $style;
	
	
	function WochenTermin($tag,$anfangsZeit,$endZeit,$text="",$style="WochenplanItem"){
		
		$this->anfangsZeit = hours2decimal($anfangsZeit);
		$this->endZeit     = hours2decimal($endZeit);
		$this->dauer       = $this->endZeit-$this->anfangsZeit;
		$this->tag         = $tag;
		$this->text		   = $text;
		$this->style       = $style;
		
	}
}

$tage = explode(";",trim("CMS_VALUE[1]"));
$w = &new Wochenplan("CMS_VALUE[5]","CMS_VALUE[6]",$tage,"CMS_VALUE[2]","CMS_VALUE[3]");

$termine = explode("\n","$CMS_VALUE[4]");

$i = 0;
$terminItem = array();
foreach ($termine as $t){
	$tdetails = explode(";",$t);
	
	if (is_array($tdetails)){
 
        if (strlen(trim($tdetails[4])) == 0){
              $tdetails[4] = "WochenplanItem";
        }

        $terminItem[$i] = &new WochenTermin($tdetails[0],$tdetails[1],$tdetails[2],$tdetails[3],$tdetails[4]);
        $w->addTermin($terminItem[$i]);
        unset($tdetails);
    }
	$i++;
}

$w->display();
?>



Darth-Vader
Beiträge: 661
Registriert: So 25. Jan 2004, 19:06
Wohnort: Stuttgart-Bad Cannstatt
Kontaktdaten:

Beitrag von Darth-Vader » So 14. Mär 2004, 15:57

hey, thx! :)

sieht genial aus, werd ich mal bei Gelegenheit an unseren Semsterstundenplänen ausprobieren ;)

Jens*
Beiträge: 26
Registriert: Sa 6. Mär 2004, 12:42
Kontaktdaten:

Beitrag von Jens* » So 14. Mär 2004, 20:13

wow super teil danke!!!

hab aber nen Problem
hab mal für ein paar tage Termin eigegeben aber es sieht wie folgt aus


Bild
Contenido Version 4.4.4

chobbert
Beiträge: 371
Registriert: Mo 14. Jul 2003, 10:14
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von chobbert » So 14. Mär 2004, 20:25

Kannst Du bitte mal den Code posten, der an dieser Stelle ausgegeben wird? Danke!

Welchen Browser nutzt Du? Kannst Du die oben genannte Seite wie auf dem Screenshot gezeigt betrachten?

Robert

Jens*
Beiträge: 26
Registriert: Sa 6. Mär 2004, 12:42
Kontaktdaten:

Beitrag von Jens* » So 14. Mär 2004, 21:21

hallo,

hab dir mal die URL per PN geschickt.

Schonmal danke

Jens
Contenido Version 4.4.4

chobbert
Beiträge: 371
Registriert: Mo 14. Jul 2003, 10:14
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von chobbert » So 14. Mär 2004, 21:55

Was hast Du denn als Breite eingetragen? Nimm mal mindestes 600 px oder mehr.

Die Spalten scheinen ja sonst bei allen Tagen so eng wie möglich zu sein, dann kann die Positionierung eh nicht funktionieren...

Robert

alter schwede
Beiträge: 65
Registriert: So 13. Jun 2004, 01:27
Kontaktdaten:

Beitrag von alter schwede » Di 20. Jul 2004, 13:33

Möchte das Modul gerne für unsere Semesterstundenpläne verwenden.

Leider kommt aufgrund dynamischer Seiteninhalte darüber keine absolute Positionierung in betracht. Ich müsste das sonst nach jedem Update neu einstellen.

Wie könnte man das ganze denn umfrickeln? Hast du u.U. noch eine andere Version rumliegen?

djw
Beiträge: 129
Registriert: Di 6. Apr 2004, 21:27
Wohnort: Baden
Kontaktdaten:

Beitrag von djw » Mo 25. Okt 2004, 13:24

chobbert:
Hast du zufällig auch die CSS noch, die du benutzt hast und kannst sie hier posten?

chobbert
Beiträge: 371
Registriert: Mo 14. Jul 2003, 10:14
Wohnort: Frankfurt am Main
Kontaktdaten:

Beitrag von chobbert » Mo 25. Okt 2004, 22:01

Hier die CSS:

Code: Alles auswählen

.WochenplanHead{
	font-size: 8pt;
	background-color: #DC3614;
	color: #E2E1E2;
	border-left-width: 1px;
	border-top-width: 1px;
	border-bottom-width: 0px;
	border-right-width: 0px;
	border-color: #000000;
	border-style: solid;
}

.WochenplanCell{
	border-left-width: 1px;
	border-top-width: 1px;
	border-bottom-width: 0px;
	border-right-width: 0px;
	border-color: #000000;
	border-style: solid;
}

.WochenplanItem{
	background-color: #D5D5D5;
	color: #000000;
	font-size: 7pt;
}

Schöne Grüße

Robert

djw
Beiträge: 129
Registriert: Di 6. Apr 2004, 21:27
Wohnort: Baden
Kontaktdaten:

schlecht

Beitrag von djw » Mo 25. Okt 2004, 23:04

Bei mir zeigts auch nicht wirklich was gutes an:
http://www.bandwebsite.de/bandwebsite/c ... t=92&m=&s=

2pauli
Beiträge: 20
Registriert: Do 16. Jun 2005, 13:00
Kontaktdaten:

Beitrag von 2pauli » Mo 4. Jul 2005, 16:39

:D Tolles Ding!

Hab folgende Änderungswünsche und brings leider nicht hin:

Der Wochenplan soll bei 200px von links anfangen (das hab ich noch geschafft). Aber jetzt wird die Matrix leider nicht gleichzeitig breiter. Wenn ich die Tabellenbreite ändere, werden nur die Termine dementsprechend verbreitert, der Tabellenhintergrund / die Matrix bleibt schmal. Wie schaff ich das?

astar
Beiträge: 60
Registriert: Di 26. Jul 2005, 11:43
Kontaktdaten:

Beitrag von astar » Sa 3. Sep 2005, 16:49

klasse modul!

aber wie bekomm das richtig positioniert? wenn ich hier bei left: auf 250px setzt ist sie richtig positioniert, bis ich die bookmarleiste öffne. denn dann rutscht die tabelle nicht mit.

kann ich das irgendwie ändern?

echo "<div style=\"position:absolute; top: 285px; left: 250px;\">\n";

Chopper
Beiträge: 108
Registriert: Mi 9. Feb 2005, 17:09
Wohnort: Berlin
Kontaktdaten:

Beitrag von Chopper » Mi 7. Sep 2005, 11:20

ah jo sieht gut aus ... sowas kann man echt immer mal gebrauchen ...

wobei schade ist das das wohl in den tiefen des Modul Forums verschwinden wird ;)

Gesperrt