Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » Wie PHP-Kalender-Script anpassen? Statt Popup lieber Layer. Antworten
Wie PHP-Kalender-Script anpassen? Statt Popup lieber Layer.

..:hilflos:..
Pixelschubser


Beiträge: 6


Hallo Allerseits!

Im Netz habe ich einen sehr netten Veranstaltungskalender (PHP Kalender V1.0 von Michael Müller, http://www.netz2k.de) gefunden, der keine Datenbank benötigt. Entscheidender Nachteil (und Problem, an dem ich seit vielen Stunden kaue) ist, dass er die Veranstaltungen in einem Popup öffnet.

Kann mir ein PHP-Crack sagen, wie ich anstellen kann, dass sich die einzelnen Veranstaltungen in einem Layer öffnen?

Hier der entscheidende Auszug aus dem Code:

... onclick=javascript:window.open(\"?act=see_event&month=$sho&year=$yr&cc=$t&link=$link\",TOP=50,LEFT=40,WIDTH=400,HEIGHT=250);>"


Für einen hilfreichen Tipp vielen Dank im voraus!

Diese Nachricht wurde geändert von: ..:hilflos:..
  Profil   Editieren   Zitieren

Ori
Fachidiot


Beiträge: 116


Davon abgesehen, dass in den Code unbedingt Anführungszeichen sollten, etwa
1:
<... onclick="...">
, kannst Du, anstatt ein Fenster zu öffnen, das ganze mittels Control.Modal in einen <iframe> umleiten:
1: 
2:
echo '<a href="?act=see_event&month=' . $sho . '&year=' . $yr .
    '&cc=' . $t . '&link=' . $link '" class="modal">...</a>';

Das klappt natürlich nur, wenn es vorher ein Link war, sonst mach im Zweifelsfall einen Link draus.

Am Ende der Datei solltest Du dann noch die Links durch einen Aufruf von
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8:
<script type="text/javascript">
// <![CDATA[
$$('a.modal').each(function (link)
   {
      new Control.Modal(link, { iframe: true, width: 400, height: 250 });
   });
// ]]>
</script>

umwandeln.

PS: Bevor das alles klappen kann, müssen natürlich die Bibliotheken Prototype und Control.Modal eingebunden werden, für Effekte auch script.aculo.us (vor Control.Modal).

Diese Nachricht wurde geändert von: Ori
  Profil   E-Mail   Website   Editieren   Zitieren

..:hilflos:..
Pixelschubser


Beiträge: 6


Hi Ori,

vielen Dank für die super schnelle Antwort!

Ich sehe, Du kennst Dich aus (ich verstehe nämlich nur noch Bahnhof . Mein Problem jetzt ist, dass ich nicht weiss, wo zwischen allen "echo", "if", "while" und "for" ich die Tipps von Dir unterbringen kann.

Zur besseren Übersicht paste ich Dir hier mal den gesamten Quellcode meiner Seite, in die der Kalender rein soll:


1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 
89: 
90: 
91: 
92: 
93: 
94: 
95: 
96: 
97: 
98: 
99: 
100: 
101: 
102: 
103: 
104: 
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: 
115: 
116: 
117: 
118: 
119: 
120: 
121: 
122: 
123: 
124: 
125: 
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
140: 
141: 
142: 
143: 
144: 
145: 
146: 
147: 
148: 
149: 
150: 
151: 
152: 
153: 
154: 
155: 
156:
<?php
    $titel = "Marktplatz";
    $startgrafik = "img/titel-intergenerativ.jpg";
    include "header.inc.php";
?>

<div style="width: 300px; height: 300px; float: right;">
<h2 style="text-align:center;">Veranstaltungen</h2>
<?php

//+-------------------------------------------------------------------------+
//+ PHP Kalender V1.0 von Michael Müller (m-mueller@arcor.de)               +
//+ http://www.netz2k.de                                                    +
//+-------------------------------------------------------------------------+

// Konfiguration Anfang
$hcolor="'#dedede'"; // Farbe Ereignis								
$bcolor="'#475370'"; // Rahmen Farbe												
//// Konfiguration Ende

extract($HTTP_GET_VARS);
extract($HTTP_POST_VARS);
if($act=="see_event"){
if (file_exists($link)){
$fd = fopen ($link, "r"); 
$stuff = fread ($fd, filesize ($link)); 
fclose ($fd);
$read=explode("[event]",$stuff);
$temp=explode("|~~|",$read[1]);
echo "<table width='100%'>
<tr>
<td><h2>$cc.". " $month $year</h2></td>
</tr>
</table>
<table><tr><td width=\"100%\" bgcolor='#f1f1f1'><h3>";
echo "$temp[0]</h3></td></tr>\n
<tr><td>$temp[1]</td></tr>\n
</table>";
}else{
echo "Dieses Ereignis wurde gel&ouml;scht";
}
exit;
}
?>

<?php
$date=array("So","Mo","Di","Mi","Do","Fr","Sa");
$month=date("M");
$day=date("D");
$dt=date("d");
$datearray = getdate();
$month = $datearray['mon'];
$year = $datearray['year'];
if($m != ""){
if($m>"12"){
$year=$yr+1;
$month="1";
}
elseif($m<="0"){
$year=$yr-1;
$month="12";
}else{
$year=$yr;
$month=$m;
}
}else{
$month=date("m");
$m = $month;
$yr=$year;
$m=round($m,0);
$yr=round($yr,0);
}if($m=="1"){
$sho="Januar";
}elseif($m=="2"){
$sho="Februar";
}elseif($m=="3"){
$sho="März";
}elseif($m=="4"){
$sho="April";
}elseif($m=="5"){
$sho="Mai";
}elseif($m=="6"){
$sho="Juni";
}elseif($m=="7"){
$sho="Juli";
}elseif($m=="8"){
$sho="August";
}elseif($m=="9"){
$sho="September";
}elseif($m=="10"){
$sho="Oktober";
}elseif($m=="11"){
$sho="November";
}elseif($m=="12"){
$sho="Dezember";
}elseif($m=="13"){
$sho="Januar";
}elseif($m=="0"){
$sho="Dezember";
}
echo"<p style=\"text-align:center; font-weight:bold; color:#c03;\">$sho $year</p>";
echo "<center><table><tr><td align=center style=\"border:0;\">"; //Umrandung Kalender
$start= mktime(0,0,0,$month,1,$year);
$firstdayarray = getdate($start);
$mo=$m;
$start1= mktime(0,0,0,$mo+1,$day,$year);
$firstmontharray = getdate($start1);
echo"<table><tr>";
foreach($date as $day){
if($day=="Sun"){
$class="sun";
}else{
$class="norm";
}
echo "<td class=$class>$day</td>";
}
echo "</tr>";
if($firstdayarray[wday]=="0"){
$x=0;
}else{
$x=1;
}
for($y=$x;$y<=($firstmontharray[mday]+$firstdayarray[wday]);$y++){
if($y % 7 == 1){
echo "<tr>";
}
if($y == $firstdayarray[wday]+1){
$t=1;
}
$m=round($m);
if (file_exists("events/kalender/".$m.$t.$yr.".txt")) {
$link="events/kalender/".$m.$t.$yr.".txt";
$ti="<input type=button name=cc style=\"height:18px;border-width:0;font-weight:bold;text-align:center;vertical-align:middle;\" value=\"$t\" onclick=javascript:window.open(\"?act=see_event&month=$sho&year=$yr&cc=$t&link=$link\",TOP=50,LEFT=40,WIDTH=400,HEIGHT=250);>";
}else{
$ti= "$t";
}
if($t==$dt){
echo "<td><form method=post action=\"events.php\"><B>$ti</B></form></td>";
}else{
echo "<td><form method=post action=\"events.php\">$ti</form></td>";
}
if($t>="1"){
$t=$t+1;
}
}
$vnext=$month+01;
$vlast=$month-01;
echo"</tr></table><b><a href=?m=$vlast&yr=$year class=textlink style=\"margin-right:100px;\">&laquo; Zur&uuml;ck</a></B>&nbsp;<b><a href=?m=$vnext&yr=$year class=textlink>Vor &raquo;</a></b></td></table></center>";
?></div>
<p>bla bla  <a href="#" class="textlink">Textlink</a></p>

<?php
    include "footer.inc.php";
?>


Blickst Du da noch durch?


  Profil   Editieren   Zitieren

Ori
Fachidiot


Beiträge: 116


Zeile 134 ändern in:
1: 
2:
$ti = '<a href="?act=see_event&month=' . $sho . '&year=' . $yr .
    '&cc=' . $t . '&link=' . $link '" class="modal" style="height:18px;border-width:0;font-weight:bold;text-align:center;vertical-align:middle;">' . $t . '</a>';


In Zeile 152 den Skriptblock von meinem ersten Beitrag einfügen, in Zeile 7 das hier:
1: 
2:
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript" src="control.modal.js"></script>


Außerdem die Dateien prototype.js von http://www.prototypejs.org/download und control.modal.js von http://livepipe.net/projects/control_modal/ im gleichen Pfad wie das PHP-Skript ablegen.

Diese Nachricht wurde geändert von: Ori
  Profil   E-Mail   Website   Editieren   Zitieren

..:hilflos:..
Pixelschubser


Beiträge: 6


Hi Ori,

vielen Dank, dass Du Dich meiner annimmst!!!

Also, Deine Tipps habe ich Schritt für Schritt befolgt und jetzt scheint mich nur noch dieses

unexpected T_CONSTANT_ENCAPSED_STRING

in Zeile 134 von der Lösung meines Problems zu trennen.

Ich habe schon mit einfachen und doppelten Anführungszeichen jongliert, Kommas eingesetzt etc., aber damit bekomme ich nur andere Fehlermeldungen.

Weißt Du wieder Rat?

  Profil   Editieren   Zitieren

Ori
Fachidiot


Beiträge: 116


Nach $link fehlt ein Punkt, richtig lautet es:
1:
$ti = '<a href="?act=see_event&amp;month=' . $sho . '&amp;year=' . $yr . '&amp;cc=' . $t . '&amp;link=' . $link . '" class="modal" style="height:18px;border-width:0;font-weight:bold;text-align:center;vertical-align:middle;">' . $t . '</a>';

  Profil   E-Mail   Website   Editieren   Zitieren

..:hilflos:..
Pixelschubser


Beiträge: 6


Ori, Du glaubst gar nicht, wie sehnsüchtig ich Dich erwartet habe !

Ich bin gerade dran, Deine Lösung umzusetzen. Der Punkt alleine hat es nicht gelöst. Jetzt muss ich noch an meinem Dokument feilen, weil offenbar die Aufrufe im Header einen bisher noch unbekannten Konflikt verursachen.

Sobald ich näheres weiß (oder gar die neuen Probleme behoben habe *hoff*) melde ich mich wieder. Bis später und wieder ein ganz großes Danke an Dich!

  Profil   Editieren   Zitieren

..:hilflos:..
Pixelschubser


Beiträge: 6


Hey Ori - der Layer ist da!!!!

Aber ... dieses Kalenderscript lädt den Text für die Veranstaltung wieder in einer kompletten Seite in voller Größe und mit Stylesheet (Scrollbalken in alle Richtungen). Kann man das irgendwo im Script korrigieren?

Zur besseren Übersicht stelle ich den Quellcode der aufs Notwendigste abgespeckten Seite noch mal hier ein

1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 
89: 
90: 
91: 
92: 
93: 
94: 
95: 
96: 
97: 
98: 
99: 
100: 
101: 
102: 
103: 
104: 
105: 
106: 
107: 
108: 
109: 
110: 
111: 
112: 
113: 
114: 
115: 
116: 
117: 
118: 
119: 
120: 
121: 
122: 
123: 
124: 
125: 
126: 
127: 
128: 
129: 
130: 
131: 
132: 
133: 
134: 
135: 
136: 
137: 
138: 
139: 
140: 
141: 
142: 
143: 
144: 
145: 
146: 
147: 
148: 
149: 
150: 
151: 
152: 
153: 
154: 
155: 
156: 
157: 
158: 
159: 
160: 
161: 
162: 
163: 
164: 
165: 
166: 
167: 
168: 
169: 
170:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Veranstaltungen</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="shortcut icon" href="favicon.ico">
<link href="styles.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="print.css" media="print">
<script type="text/javascript" src="events/prototype.js"></script>
<script type="text/javascript" src="events/control.modal.js"></script>
</head>
<body>
<div id="seite">
 <div id="content">
   <h1>&Uuml;berschrift</h1>
<div style="width: 300px; height: 300px; float: right;">
<h2 style="text-align:center;">Veranstaltungen</h2>
<?php
//+-------------------------------------------------------------------------+
//+ PHP Kalender V1.0 von Michael Müller (m-mueller@arcor.de)               +
//+ http://www.netz2k.de                                                    +
//+-------------------------------------------------------------------------+

extract($HTTP_GET_VARS);
extract($HTTP_POST_VARS);
if($act=="see_event"){
if (file_exists($link)){
$fd = fopen ($link, "r"); 
$stuff = fread ($fd, filesize ($link)); 
fclose ($fd);
$read=explode("[event]",$stuff);
$temp=explode("|~~|",$read[1]);
echo "<table width='100%'>
<tr>
<td><h2>$cc.". " $month $year</h2></td>
</tr>
</table>
<table><tr><td width=\"100%\" bgcolor='#f1f1f1'><h3>";
echo "$temp[0]</h3></td></tr>\n
<tr><td>$temp[1]</td></tr>\n
</table>";
}else{
echo "Dieses Ereignis wurde gel&ouml;scht";
}
exit;
}
?>

<?php
$date=array("So","Mo","Di","Mi","Do","Fr","Sa");
$month=date("M");
$day=date("D");
$dt=date("d");
$datearray = getdate();
$month = $datearray['mon'];
$year = $datearray['year'];
if($m != ""){
if($m>"12"){
$year=$yr+1;
$month="1";
}
elseif($m<="0"){
$year=$yr-1;
$month="12";
}else{
$year=$yr;
$month=$m;
}
}else{
$month=date("m");
$m = $month;
$yr=$year;
$m=round($m,0);
$yr=round($yr,0);
}if($m=="1"){
$sho="Januar";
}elseif($m=="2"){
$sho="Februar";
}elseif($m=="3"){
$sho="März";
}elseif($m=="4"){
$sho="April";
}elseif($m=="5"){
$sho="Mai";
}elseif($m=="6"){
$sho="Juni";
}elseif($m=="7"){
$sho="Juli";
}elseif($m=="8"){
$sho="August";
}elseif($m=="9"){
$sho="September";
}elseif($m=="10"){
$sho="Oktober";
}elseif($m=="11"){
$sho="November";
}elseif($m=="12"){
$sho="Dezember";
}elseif($m=="13"){
$sho="Januar";
}elseif($m=="0"){
$sho="Dezember";
}
echo"<p style=\"text-align:center; font-weight:bold; color:#c03;\">$sho $year</p>";
echo "<center><table><tr><td align=center style=\"border:0;\">"; //Umrandung Kalender
$start= mktime(0,0,0,$month,1,$year);
$firstdayarray = getdate($start);
$mo=$m;
$start1= mktime(0,0,0,$mo+1,$day,$year);
$firstmontharray = getdate($start1);
echo"<table><tr>";
foreach($date as $day){
if($day=="Sun"){
$class="sun";
}else{
$class="norm";
}
echo "<td class=$class>$day</td>";
}
echo "</tr>";
if($firstdayarray[wday]=="0"){
$x=0;
}else{
$x=1;
}
for($y=$x;$y<=($firstmontharray[mday]+$firstdayarray[wday]);$y++){
if($y % 7 == 1){
echo "<tr>";
}
if($y == $firstdayarray[wday]+1){
$t=1;
}
$m=round($m);
if (file_exists("events/kalender/".$m.$t.$yr.".txt")) {
$link="events/kalender/".$m.$t.$yr.".txt";
$ti = '<a href="?act=see_event&amp;month=' . $sho . '&amp;year=' . $yr . '&amp;cc=' . $t . '&amp;link=' . $link . '" class="modal" style="height:18px;border-width:0;font-weight:bold;text-align:center;vertical-align:middle;">' . $t . '</a>';

}else{
$ti= "$t";
}
if($t==$dt){
echo "<td><form method=post action=\"events.php\"><B>$ti</B></form></td>";
}else{
echo "<td><form method=post action=\"events.php\">$ti</form></td>";
}
if($t>="1"){
$t=$t+1;
}
}
$vnext=$month+01;
$vlast=$month-01;
echo"</tr></table><b><a href=?m=$vlast&yr=$year class=textlink style=\"margin-right:100px;\">&laquo; Zur&uuml;ck</a></B>&nbsp;<b><a href=?m=$vnext&yr=$year class=textlink>Vor &raquo;</a></b></td></table></center>";
?>
<script type="text/javascript">
// <![CDATA[
$$('a.modal').each(function (link)
   {
      new Control.Modal(link, { iframe: true, width: 400, height: 250 });
   });
// ]]>
</script>
</div>
<p>bla bla  <a href="#" class="textlink">Textlink</a></p>

</div>
<br style="clear:both;" />
</div>
</body>
</html>

  Profil   Editieren   Zitieren

Ori
Fachidiot


Beiträge: 116


Schiebe den ersten PHP-Block (Zeilen 18 bis 47) nach ganz vorne, das ist zwar hässlich und man bekommt Alpträume davon, aber es ist die schnellste Lösung.

Dabei verlieren die Veranstaltungen aber jegliche Formatierung, das lässt sich vermutlich durch das Entfernen der Angabe iframe: true gerade biegen (oder es passiert etwas Schlimmes).

PS: Auch das Komma danach entfernen.

  Profil   E-Mail   Website   Editieren   Zitieren

..:hilflos:..
Pixelschubser


Beiträge: 6


Ori, bitte entschuldige die späte Antwort.

Den betreffenden Scriptteil in den Header zu setzen hat funktioniert! Die Formatierung war gar nicht so übel und was fehlte konnte ich mit CSS in den Griff bekommen. Aber insgesamt mußte ich noch fürchterlich improvisieren. So konnte ich meinen 'Bausatz' Header, Inhalt, Footer nicht beibehalten, sondern mußte für die Seite mit dem Kalender alles am Stück lassen, um ihr die entsprechenden Angaben im Kopfbereich und ein eigenes Stylesheet geben zu können. Als ich das Ergebnis dann erstmals im IE 6 aufrief, traf mich beinahe der Schlag: Ging doch ein Event nicht im iFrame, sondern in einer neuen Seite auf! Und wenn man die wieder schloss, war alles weg. Also mußte ich einen Link 'Schließen' einsetzen und ihn mit dem Neuaufruf der Ursprungsseite belegen. Auch die Anzeige des Kalenders ist im IE etwas verzerrt, aber damit kann man zur Not noch leben.

Auf jeden Fall war es ein echter Act und ich danke Dir aus tiefstem Herzen für Deine Hilfe, denn Du hast es möglich gemacht, dass ich dieses Script überhaupt einsetzen konnte!

  Profil   Editieren   Zitieren
 

Antworten
Nach oben