Seite 1 von 1

Wochenplan

Verfasst: So 14. Mär 2004, 14:15
von chobbert
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();
?>



Verfasst: So 14. Mär 2004, 15:57
von Darth-Vader
hey, thx! :)

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

Verfasst: So 14. Mär 2004, 20:13
von Jens*
wow super teil danke!!!

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


Bild

Verfasst: So 14. Mär 2004, 20:25
von chobbert
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

Verfasst: So 14. Mär 2004, 21:21
von Jens*
hallo,

hab dir mal die URL per PN geschickt.

Schonmal danke

Jens

Verfasst: So 14. Mär 2004, 21:55
von chobbert
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

Verfasst: Di 20. Jul 2004, 13:33
von alter schwede
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?

Verfasst: Mo 25. Okt 2004, 13:24
von djw
chobbert:
Hast du zufällig auch die CSS noch, die du benutzt hast und kannst sie hier posten?

Verfasst: Mo 25. Okt 2004, 22:01
von chobbert
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

schlecht

Verfasst: Mo 25. Okt 2004, 23:04
von djw
Bei mir zeigts auch nicht wirklich was gutes an:
http://www.bandwebsite.de/bandwebsite/c ... t=92&m=&s=

Verfasst: Mo 4. Jul 2005, 16:39
von 2pauli
: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?

Verfasst: Sa 3. Sep 2005, 16:49
von astar
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";

Verfasst: Mi 7. Sep 2005, 11:20
von Chopper
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 ;)