<?php
/* 'Dynamischer PHP-Countdown' (c) cybaer@binon.net - http://Coding.binon.net/Countdown */
define('XHTML',FALSE);
define('LN',"\r\n");
/* Funktionen um JavaScript-Code mit PHP einzubinden (Auszug) 051005/070618 */
/* Lizenz CC <http://creativecommons.org/licenses/by-nc-sa/2.5/> */
// Benoetigt die Konstanten XHTML & LN
// Schreibt Daten in Element mit angegebener ID, letztes Element mit angegebenen Tag-Namen, oder, um etwaige HTML-Tags bereinigt, in die Statuszeile
function dhtml_insert($data,$element=NULL,$noscript=FALSE,$htmlComments=NULL) { $jsFunction=''; $jsCall=''; if($element) { if($htmlComments===NULL) { $htmlComments=TRUE; } $jsFunction=' function dhtml_insert(data) { var obj=null; if(document.getElementsByTagName) { obj=document.getElementById("'.$element.'"); if(!obj && document.getElementsByTagName("'.$element.'").length) { obj=document.getElementsByTagName("'.$element.'")[document.getElementsByTagName("'.$element.'").length-1]; } if(obj) { obj.innerHTML=unescape(data); } else { window.status=unescape(data).replace(/<([^>]+)>/g,""); } } } '; } if($data!==NULL) { $jsCall='dhtml_insert("'.rawurlencode($data).'")'; } insertJS($jsFunction.$jsCall,($noscript===TRUE)?$data:str_replace('$$DHTML_INSERT$$',$data,$noscript),$htmlComments); }
// Erzeugt das SCRIPT-Start-Tag
function startJS($jsVersion='',$htmlComments=TRUE) { echo '<script'.(($jsVersion===NULL && !XHTML)?'':(' type="text/javascript'.$jsVersion.'"')).((XHTML || !$jsVersion)?'':(' language="JavaScript'.$jsVersion.'"')).'>'.(($htmlComments || XHTML)?(((XHTML)?'<!--//--><![CDATA[//><!--':'<!--').LN):''); }
// Erzeugt den SCRIPT-Code
function writeJS($jsCode) { echo $jsCode; }
// Erzeugt das SCRIPT-End-Tag und ggf. das NOSCRIPT-Element
function endJS($noscript='',$htmlComments=TRUE) { echo (($htmlComments || XHTML)?(LN.((XHTML)?'//--><!]]>':'//-->')):'').'</script>'; if(!empty($noscript)) { echo '<noscript>'.$noscript.'</noscript>'; } }
// Erzeugt das komplette SCRIPT-Element
function insertJS($jsCode,$noscript='',$htmlComments=TRUE,$jsVersion='') { startJS($jsVersion,$htmlComments); writeJS($jsCode); endJS($noscript,$htmlComments); }
/* Beispiel */
// Eventuell aktives Output-Buffering beenden
while(ob_get_length()!==FALSE) { ob_end_clean(); }
// Eventuell aktive Output-Kompression abstellen
@ini_set('zlib.output_compression',0);
// Notwendiger "Kick-Off" fuer IE & Safari
echo str_repeat(' ',1022).LN;
?>
<html>
<head>
<title>"Explosive" - Beispiel einer PHP Statusanzeige/Countdown/... (mit JavaScript und ohne)</title>
</head>
<body>
<h3 id="counter">Counter</h3>
<ul>
<li>Bei aktiviertem JavaScript sollte oben der Zähler bis 0 laufen.</li>
<li>Ohne JavaScript wird im Anschluß an diese Liste gezählt.</li>
<li>Wenn JavaScript aktiviert ist, aber das Element mit der ID "counter"
fehlt/nicht angesprochen werden kann, wird in der Statuszeile gezählt.</li>
</ul>
<p>Anschließend wird nach einer kurzen Pause "Boooom" ausgegeben ... <tt>;-)</tt></p>
<?php
// Erstellen der JS-Funktion fuer das Element mit der ID "counter" (ohne Aufruf)
dhtml_insert(NULL,'counter');
$i=5;
while($i>=0) {
sleep(1);
// Aufruf der (bestehenden) JS-"counter"-Funktion
// mit "Count x", und NOSCRIPT-Ausgabe mit "x, "
dhtml_insert('Count '.$i,NULL,$i.', ');
@ob_flush();
flush();
$i--;
}
// Auf Browsern, die es koennen: Counter blinken lassen
// (bei deaktiviertem Scripting wird "Deckung!" ausgegeben)
insertJS('if(document.getElementById && document.getElementById("counter")) { document.getElementById("counter").style.textDecoration="blink"; }','Deckung!');
@ob_flush();
flush();
sleep(3);
// Seiteninhalt durch "Boooom" ersetzen
// Erstellen der JS-Funktion fuer das BODY-Element mit
// anschliessendem Aufruf (inkl. NOSCRIPT und auskommentiertem JS)
dhtml_insert('<h1 align="center">Boooom</h1>','body',TRUE,TRUE);
?>
<p align="center">Quelltext: <a href="http://coding.binon.net/PHPJSLib">http://Coding.binon.net/PHPJSLib</a></p>
</body>
</html>