• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Content nur in bestimmten Zeitraum anzeigen

No3x

Mitglied
Habe ein kleenes Problem bei meinem Vorhaben:

main.php (Auszug)
PHP:
if((date('H') >= "12") && date('H') <= "15") { 
$playeron = 1;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
}
else {
$playeron = 0;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
}

und hier lade ich mir die main.tpl Datei rein.
Also, wenn es später als 12 und früher als 15 Uhr ist wird $playeron auf 1 gesetzt, wenn es nicht in dem Zeitraum ist wird es auf 0 gesetzt.

main.tpl (Auszug)
Code:
<html>
.
.
<body>
{if}$playeron = 1{/if}
<div>AUSGABE</div>
{else}{/else}
{/endif}

</body>
</html>
Hier prüfe ich ob $playeron auf 1 steht, wenn ja soll etwas ausgegeben werden.

Nun haut es aber nicht wirklich hin, dass es in der gewünschten Zeit angezeigt und sonst versteckt ist. Zudem bin ich zum ersten mal mit dieser PHP Template-Klasse (tpl) konfrontiert, benutze ich sonst nicht, muss aber damit arbeiten. Kennt sich da jemand aus?
 
Werbung:
Zu manchen Uhrzeiten wird es angezeigt, obwohl es nicht sollte und wenn es soll wird es nicht angezeigt. Ich kann nicht wirklich einen Zusammenhang erkennen. Stimmt der Syntax des Codes so, dachte vielleicht ich habe einen Fehler bei &(statt &&) und = (statt==,!=,<=,>=) drin?:-o
 
Werbung:
Ne, das stimmt soweit!

Wie wird denn die If-Abfrage beim parsen übersetzt? Also dies hier:
Code:
{if}$playeron = 1{/if}
normalerweise ist ein einfaches = erst einmal nur eine Zuweisung und kein Vergleich, das kann natürlich von Templatesystem zu Templatesystem unterschiedlich gehandhabt werden!

Vielleicht solltest du dort den Fehler suchen, wenn du mit den ausgegebenen Werten hier:
PHP:
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
zufrieden bist!
 
Ohne jetzt Dein Script angeguckt zu haben. Hast Du Dir mal die Serverzeit ausgeben lassen? Die muss ja nicht identisch mit Deiner lokalen Zeit sein.

Gruß thuemmy
 
Vielleicht solltest du dort den Fehler suchen, wenn du mit den ausgegebenen Werten hier:
PHP:
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
zufrieden bist!

Das habe ich nur zum debuggen benutzt, als Orientierung wie spät es ist,welchen Status dem zur Folge die $playeron hat.
wie z.B. jetzt: es ist ca. 14:12 also steht am anfang meiner Seite
Zeit:14
Status:1
aber die Ausgabe die in der tpl definiert ist erfolgt nicht.

edit: die Serverzeit stimmt.
mhh Spoiler ned gefunden:
Es war 14 Uhr, Serverzeit und Lokal.
Code:
if((date('H') >= "12") && date('H') <= "12") 

Zeit:14
Status:0

Ausgabe: JA
--------------------------------------------
if((date('H') >= "12") && date('H') <= "13")  

Zeit:14
Status:0

Ausgabe: JA
--------------------------------------------
if((date('H') >= "12") && date('H') <= "14") 

Zeit:14
Status:1

Ausgabe: JA
--------------------------------------------
if((date('H') >= "12") && date('H') <= "15") 

Zeit:14
Status:1

Ausgabe: JA
--------------------------------------------
if((date('H') >= "12") && date('H') <= "16") 

Zeit:14
Status:1

Ausgabe: JA
--------------------------------------------
if((date('H') >= "12") && date('H') <= "17") 

Zeit:14
Status:1

Ausgabe: JA
--------------------------------------------
if((date('H') >= "12") && date('H') <= "18") 

Zeit:14
Status:1

Ausgabe: JA
Es wird immer ausgegeben obwohl sich die $playeron richtig ändert, daraus kann ich schließen das meine if Abfrage im der .tpl nicht richtig ist. Leider kenn ich mich mit dem Syntax der tpl nicht aus.
 
Zuletzt bearbeitet:
Werbung:
Daraus schließe ich jetzt erst einmal dass
PHP:
{if}$playeron = 1{/if}
wirklich wie eine Zuweisung behandelt wird!
PHP:
if ($playeron = 1) {
  //Ausgabe: Ja
}
Dort wird $playeron der Wert 1 zugewiesen und dann auf "wahr" geprüft, was bei 1 natürlich immer der Fall ist! Du müsstest uns dann den Teil vom Templatessystem zeigen, der die If-Abfragen in.tpl Dateien behandelt! Ansonsten können wir dir da nicht helfen!

Du kannst auch mal in der Doku dieses Templatesystems schauen. Oder du probierst mal aus was bei $playeron == 1 passiert. Smarty macht einen Vergleich z.B. neben == auch mit "eq" (equal):
Code:
{if $playeron eq "1"}
	//Ausgabe: Ja
{/if}

Irgendwo müsstest du ja schon einen Hinweis finden können, wie If-Abfragen in den Templatedateien richtig formuliert werden müssen!
 
ich denke dieses smarty wurde nicht verwandt, da:
1. eq statt == nicht verarbeitet wird
2. die if anders aufgebaut sind (smarty: {if}{/if}, bei meinem code {if}{/if}{/endif})

in der main.tpl ein paar Zeilen darüber ist eine if so aus:

{if}isset($_SESSION['cbuser']){/if}
[....CONTENT...]
{else}
[...ZUGRIFF VERWEIGERT...]
{/endif}
Nach dieser habe ich meine if aufgebaut.

Puh, ich weiß nicht wie eine solche Datei aussieht die diese tpl umwandelt, ich müsste mich durch 500 Dateien wühlen. Ich habe es nicht selber geschrieben sondern wollte nur ein paar Anpassungen vornehmen.
Da ich den Namen der Template Engine nicht weiß werde ich keine Doku finden, wenn sie nicht sogar selbst geschrieben ist. Ich versuche in den anderen Dateien erst einmal eine if mit ==(bzw. Äquivalent oder sowas in der Richtung) suchen um ein Beispiel vom Syntax zu haben.

/edit: Mh habe so etwas gefunden: {if}$variable == 0{/if} Ist ja das selbe Prinzip wie bei meiner if.
 
Zuletzt bearbeitet:
Werbung:
eben nicht!:-o es ist jetzt 00:59:
Zeit:00
Status:0
Anzeige: JA
Ich blick das ganze ned mehr.:idea:
 
Wie sieht denn dein aktueller Code im Template aus?
Möglicherweise musst du die Variable $playeron noch dem Templatesystem übergeben, damit es diese für einen Vergleich nutzen kann!
 
Ich glaube ich habe etwas gefunden, das die Variable übergibt.
z.B.
Code:
$tpl->vars("user",$user);
wird in der tpl so benutzt:
Code:
Hallo {$user}
Also habe ich einfach das Beispiel auf meins angewandt, aber:
Fatal error: Call to a member function vars() on a non-object in C:\xampp\htdocs\cms\main.php on line 22
main.php
PHP:
//SELFplayer
if((date('H') >= "10") && date('H') <= "12") { 
$playeron = 1;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
$tpl->vars("playeron",$playeron); //Zeile 22
}
else {
$playeron = 0;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
$tpl->vars("playeron",$playeron);
}
main.tpl
HTML:
{if}$playeron == 1{/if}
AUSGABE
{else}
Funktioniert nicht
{/else}
{/endif}
 
Werbung:
Hi,

du musst die Stelle heraussuchen, wo in etwa:

Code:
$tpl = new Template();
Dabei kann "Template" auch anders heißen!

Dies musst du unbedingt auch ausführen bevor du $tpl benutzen kannst. Diese Variable enthält dann eine Referenz auf ein Objekt aus der Klasse "Template".
 
Code:
$tpl = new template($design['templatefolder'],$config['design']);
gefunden

zu main.php
PHP:
//SELFplayer
if((date('H') >= "12") && date('H') <= "18") { 
$playeron = 1;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
$tpl = new template($playeron['playeron']);
$tpl->vars("playeron",$playeron);
}
else {
$playeron = 0;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
}
main.tpl
verändert.
HTML:
{if}$playeron == 1{/if}
AUSGABE
{else}
Funktioniert nicht
{/else}
{/endif}
So richtig?
Problem ist jetzt genauso wie Anfangs. :|
 
Zuletzt bearbeitet:
Ich kann jetzt eigentlich nur raten da ich die Templatedateien nicht habe, aber so:

PHP:
//SELFplayer
$tpl = new template($design['templatefolder'],$config['design']);

if((date('H') >= "12") && date('H') <= "18") {
$playeron = 1;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
$tpl->vars("playeron",$playeron);
}
else {
$playeron = 0;
echo "Zeit:" . date('H') . "<br />\n";
echo "Status:" . $playeron;
}

in der Art könnte es funktionieren. Der Vergleich, den du in der Templatedatei anstellst, dürfte so richtig sein!

Achtung: Beim initialisieren des Objekts
Code:
$tpl = new template($design['templatefolder'],$config['design']);

werden $design['templatefolder'] und $config['design'] benötigt. Irgendwoher müssen diese Variablen/Arrays kommen. Wenn es auf diese Weise nicht sofort klappt, musst du mal wieder nach diesen Arrays suchen ;)

Viel Erfolg!
 
Werbung:
Auch wenn es der Validität garantiert nicht entspricht hab ich es nun so gemacht:

main.tpl
PHP:
<?php 
if((date('H') >= "12") && date('H') <= "19") {
echo "<div id=\"player\">This text will be replaced</div>
<script type=\"text/javascript\">
var so = new SWFObject('viral.swf','mpl','470','320','9');
so.addParam('allowscriptaccess','always');
so.addParam('allowfullscreen','true');
so.addParam('flashvars','&file=videos/video.flv&skin=modieus/modieus.swf');
so.write('player');
</script></div>";} 
else {
echo "falscher Zeitraum";} 
?>
:p -- und so kann ich einfach mit "normalem" php arbeiten.
Danke an alle die sich 'n Kopf gemacht haben. Vielleicht komm ich ja i.wann später wenn ich es noch einmal brauche dahinter.
 
Ich erlaube mir hier nochmal zu posten, nach der langen Zeit.

main.php
PHP:
.
.
if((date('H') >= "13") && date('H') <= "15") { //Wenn es zwischen 13 und 15 Uhr ist
$playeron = 1; //Variable auf 1 setzen
}
.
.
$tpl->vars("playeron",$playeron);//Variable an tpl übergeben
main.tpl .
PHP:
{if}$playeron == 1{/if}AUSGABE{else}{/else}{/endif}
Habe die $tpl->vars("playeron",$playeron); zu den anderen, die standart schon im Dokument waren, hinzugesellt. So funktioniert es.:p
 
Zurück
Oben