| 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
, 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ö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;\">« Zurück</a></B> <b><a href=?m=$vnext&yr=$year class=textlink>Vor »</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&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>'; |
| |  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>Ü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ö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&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>';
}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;\">« Zurück</a></B> <b><a href=?m=$vnext&yr=$year class=textlink>Vor »</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
| |