Seite 1 von 1

Scrolltext Modul

Verfasst: So 4. Nov 2007, 13:02
von Jamest
Hallo Leute,

ich habe im Moment einen Scrolltext auf meiner Seite im Einsatz, den würde ich jetzt wo ich die Seite auf Contenido umstelle gern in ein Modul umbauen.

Ich schildere euch mal wie der scrolltext im Moment aufgebaut ist:

Zuallererst gibt es eine scroll.txt in der der Text steht welcher auf der Seite in einem bestimmten Bereich scrollen soll:

Code: Alles auswählen

Haben Sie einen <b>Anhörungsbogen</b> oder einen <b>Bußgeldbescheid</b> vom Umweltbundesamt erhalten?<br>
...
Dann eine Datei namens scroller.php welche so aufgebaut ist:

Code: Alles auswählen

<script language="JavaScript">
document.write('<table border="0"><tr><td width='+swidth+' align="right">');
if (document.getElementById || document.all ){
    document.write('<span style="height:'+sheight+';"><div style="position:relative;overflow:hidden;width:'+swidth+';height:'+sheight+';clip:rect(0 '+swidth+' '+sheight+' 0);" onMouseover="sspeed=0;" onMouseout="sspeed=restart"><div align="right" id="slider" style="position:relative;width:'+swidth+';"></div></div></span>')
}
</script>
<ilayer width=&{swidth}; height=&{sheight}; name="slider1" bgcolor=&{sbcolor};>
<layer name="slider2" width=&{swidth}; onMouseover="sspeed=0;" onMouseout="sspeed=restart"></layer></ilayer>
</td>
</tr></table>
Und zu guter letzt die Datei index.php wo die schon eben genannten beiden Dateien dann includet werden:

Code: Alles auswählen

<?PHP
//Scrolltext
$filename = "scroll.txt";
$handle = fopen ($filename, "r");
$scrolltext = fread($handle, filesize ($filename));
$scrolltext = nl2br($scrolltext);
$scrolltext = nl2br($scrolltext);
$scrolltext = str_replace (chr(10), "", $scrolltext);
$scrolltext = str_replace (chr(13), "", $scrolltext);
//echo $scrolltext;
fclose ($handle);
?>

<html>
<head>
<title></title>
<SCRIPT LANGUAGE="JavaScript">
//scroller width: change to your own;
var swidth=180;
//scroller height: change to your own;
var sheight=68;
//scroller's speed: change to your own;
var sspeed=2;
var restart=sspeed;
rspeed=sspeed;
//text: change to your own
wholemessage='<?PHP echo $scrolltext; ?>';
//-- end Parameters and message -->
//-- begin: Scroller's Algorithm -->
function goup(){if(sspeed!=rspeed*8){sspeed=sspeed*2;restart=sspeed;}}
function godown(){if(sspeed>rspeed){sspeed=sspeed/2;restart=sspeed;}}
function start(){if(document.all) iemarquee(slider);else if(document.getElementById )ns6marquee(document.getElementById('slider'));else if(document.layers)ns4marquee(document.slider1.document.slider2);}function iemarquee(whichdiv){iediv=eval(whichdiv);iediv.style.pixelTop=sheight;iediv.innerHTML=wholemessage;sizeup= iediv.offsetHeight;ieslide();}function ieslide(){if(iediv.style.pixelTop>=sizeup*(-1)){iediv.style.pixelTop-=sspeed;setTimeout("ieslide()",100);}else{iediv.style.pixelTop=sheight;ieslide();}}function ns4marquee(whichlayer){ns4layer=eval(whichlayer);ns4layer.top=sheight;ns4layer.document.write(wholemessage);ns4layer.document.close();sizeup= ns4layer.document.height;ns4slide();}function ns4slide(){if(ns4layer.top>=sizeup*(-1)){ns4layer.top-=sspeed;setTimeout("ns4slide()",100);}else{ns4layer.top=sheight;ns4slide();}}function ns6marquee(whichdiv){ns6div=eval(whichdiv);ns6div.style.top=sheight;ns6div.innerHTML=wholemessage;sizeup= ns6div.offsetHeight;ns6slide();}function ns6slide(){if(parseInt(ns6div.style.top)>=sizeup*(-1)){ns6div.style.top=parseInt(ns6div.style.top)-sspeed;setTimeout("ns6slide()",100);}else{ns6div.style.top=sheight;ns6slide();}}
//-- end Algorithm -->
</script>
</head>
<body onload="start();">
<table width="823" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td width="823" height="46"><img src="img/<?PHP echo $farbe; ?>/header/header1.jpg" width="823" height="46"></td>
  </tr>
  <tr>
    <td class="scroller" background="img/<?PHP echo $farbe; ?>/header/header2.jpg" width="823" height="79" align="right"><?PHP include " scroller.php"; ?></td>
  </tr>
</table>
</body>
</html>
Ich habe noch kein Modul für Contenido gebaut, daher wende ich mich an euch, ist es möglich das ganze auf basis des TEXT (HTML) Moduls zu machen? Das im Backend der Texteingegeben wird und im Frontend erst das Javascript dazukommt, welches dafür sorgt das der Text scrollt?

Vielleicht hat ja schonmal jemand etwas ähnliches realisiert.

Ich versuche es mit einem Modul, weil das includen in einem Layout nicht mehr funktioniert.

Danke und Gruß

Jamest

Verfasst: Di 6. Nov 2007, 22:16
von Jamest
Hat nicht jemand eine Anregung, so ein kleiner Stubs in die richtige Richtung, ich will garnicht das ich alles vorgekaut bekomme, weiss nur nicht wo ich anfangen soll.

Grüße

Jamest

Verfasst: Mi 7. Nov 2007, 00:22
von HerrB
Du machst aus dem letzten Code ein Modul (einfach in den Output-Bereich des Moduls eintragen).

Den Code aus der scroller.php kannst DU IMHO auch direkt in das Modul statt <?PHP include " scroller.php"; ?> packen - so richtig kann ich da kein PHP drin entdecken. Mal ausprobieren.

Dann ist die Frage, wo Du die Texte eingeben möchtest. Du kannst statt

Code: Alles auswählen

$filename = "scroll.txt"; 
$handle = fopen ($filename, "r"); 
$scrolltext = fread($handle, filesize ($filename)); 
$scrolltext = nl2br($scrolltext); 
$scrolltext = nl2br($scrolltext); 
$scrolltext = str_replace (chr(10), "", $scrolltext); 
$scrolltext = str_replace (chr(13), "", $scrolltext); 
//echo $scrolltext; 
fclose ($handle); 
auch einfach $scrolltext = "Bla"; verwenden. Ist ein bisschen die Frage, wieviel Scrolltext das wird und man muss beachten, dass neue Zeilen gleich mit <br /> geschrieben werden müssen.

Dann könntest Du auch einen Eingabebereich für das Modul vorsehen (siehe Code anderer Module). Dann könnte man den Scrolltext bei der Konfiguration des Templates eingeben (nur sinnvoll, wenn dieses Modul nur auf einer Seite bzw. für alle Seiten in einer Kategorie verwendet wird).

Oder Du lässt es bei der Datei und bist bei $filename = "scroll.txt"; etwas genauer, z.B. "<Serverpfad bis Mandant>/includes/scroll.txt" - dann würde die Datei beim Beispielmandanten in cms/includes liegen.

Gruß
HerrB

Verfasst: Mi 7. Nov 2007, 12:38
von Jamest
Vielen Dank für den Tipp,

ich habe jetzt das Script von mir getestet, jedoch scrollt dort der Text einfach nicht, dann habe ich zusätzlich noch 3 weitere Scripte getestet.

Quelle ist diese Seite (Kategorie vertikal newsticker):

http://www.nightfire.ch/java/index.html ... htm~mypage

Auch die 3 scripte die ich von der Seite getestet hab scrollen nicht. Ich habe das script auch mal ohne modul direkt ins layout gepackt, aber auch dort, es scrollt einfach nicht.

Hat jemand eine Idee warum es nicht funktioniert?

Grüße

Jamest

Verfasst: Mi 7. Nov 2007, 13:23
von wayfearer
Du musst dir erst mal der semantischen Struktur klar werden:

1. Das Script erwartet im HEAD die entsprechenden Funktionsdefinitionen in JavaScript. Diese Funktionen erwarten auch, dass dort schon der Scrolltext definiert wird, das heißt du bindest am besten dort dann wieder deine *.txt Datei ein aber halt ausgehend vom der front_content.php also am besten aus "includes/text.php"

2. Folgendes Script packst du in die Ausgabe eines Moduls:

Code: Alles auswählen

?>
<script language="JavaScript">
document.write('<table border="0"><tr><td width='+swidth+' align="right">');
if (document.getElementById || document.all ){
    document.write('<span style="height:'+sheight+';"><div style="position:relative;overflow:hidden;width:'+swidth+';height:'+sheight+';clip:rect(0 '+swidth+' '+sheight+' 0);" onMouseover="sspeed=0;" onMouseout="sspeed=restart"><div align="right" id="slider" style="position:relative;width:'+swidth+';"></div></div></span>')
}
</script>
<ilayer width=&{swidth}; height=&{sheight}; name="slider1" bgcolor=&{sbcolor};>
<layer name="slider2" width=&{swidth}; onMouseover="sspeed=0;" onMouseout="sspeed=restart"></layer></ilayer>
</td>
</tr></table> 
So ich gehe jetzt aber davon aus, dass du gerne den Inhalt auch über das CMS ändern möchtest, dazu wären noch ein paar weitere Schritte nötig.
Mein vorschlag wäre hier einen extra artikel anlegen, der in der DB abgelegt wird und den inhalt enthält und dann in deinem Layout eine abfrage machen der dir den Inhalt zieht und in einer Variable speichert.

Mfg,

Way[/code]

Verfasst: Mi 7. Nov 2007, 14:02
von Jamest
Hallo way,

genau das was du schreibst hab ich auch gemacht, die semantische Struktur ist mir auch geläufig, von daher passen die Vorraussetzungen. ;-)

Ich geb mal kurz nen Überblick:

Im Layout im Head steht das:

Bem.: Die PHP Funktion hab ich erstmal rausgelassen, und den Text im
Javascript code des headers direkt angegeben, nur um erstmal vorerst
zusehen ob es generell geht.

Code: Alles auswählen

<SCRIPT LANGUAGE="JavaScript">
//scroller width: change to your own;
var swidth=180;
//scroller height: change to your own;
var sheight=68;
//scroller's speed: change to your own;
var sspeed=2;
var restart=sspeed;
rspeed=sspeed;
//text: change to your own
wholemessage='Dies ist ein Test<br />Zeile2<br />Zeile3';
//-- end Parameters and message -->
//-- begin: Scroller's Algorithm -->
function goup(){if(sspeed!=rspeed*8){sspeed=sspeed*2;restart=sspeed;}}
function godown(){if(sspeed>rspeed){sspeed=sspeed/2;restart=sspeed;}}
function start(){if(document.all) iemarquee(slider);else if(document.getElementById )ns6marquee(document.getElementById('slider'));else if(document.layers)ns4marquee(document.slider1.document.slider2);}function iemarquee(whichdiv){iediv=eval(whichdiv);iediv.style.pixelTop=sheight;iediv.innerHTML=wholemessage;sizeup= iediv.offsetHeight;ieslide();}function ieslide(){if(iediv.style.pixelTop>=sizeup*(-1)){iediv.style.pixelTop-=sspeed;setTimeout("ieslide()",100);}else{iediv.style.pixelTop=sheight;ieslide();}}function ns4marquee(whichlayer){ns4layer=eval(whichlayer);ns4layer.top=sheight;ns4layer.document.write(wholemessage);ns4layer.document.close();sizeup= ns4layer.document.height;ns4slide();}function ns4slide(){if(ns4layer.top>=sizeup*(-1)){ns4layer.top-=sspeed;setTimeout("ns4slide()",100);}else{ns4layer.top=sheight;ns4slide();}}function ns6marquee(whichdiv){ns6div=eval(whichdiv);ns6div.style.top=sheight;ns6div.innerHTML=wholemessage;sizeup= ns6div.offsetHeight;ns6slide();}function ns6slide(){if(parseInt(ns6div.style.top)>=sizeup*(-1)){ns6div.style.top=parseInt(ns6div.style.top)-sspeed;setTimeout("ns6slide()",100);}else{ns6div.style.top=sheight;ns6slide();}}
//-- end Algorithm -->
</script>
So, als nächstes habe ich im Body Tag das onload reingepackt:

Code: Alles auswählen

<body onload="start();">
Der dritte schritt war im Layout noch einen Container zu definieren, dem ich dann im Template das modul zugewiesen hab, welches folgenden Inhalt hat:

Code: Alles auswählen

<script language="JavaScript">
document.write('<table border="0"><tr><td width='+swidth+' align="right">');
if (document.getElementById || document.all ){
    document.write('<span style="height:'+sheight+';"><div style="position:relative;overflow:hidden;width:'+swidth+';height:'+sheight+';clip:rect(0 '+swidth+' '+sheight+' 0);" onMouseover="sspeed=0;" onMouseout="sspeed=restart"><div align="right" id="slider" style="position:relative;width:'+swidth+';"></div></div></span>')
}
</script>
<ilayer width=&{swidth}; height=&{sheight}; name="slider1" bgcolor=&{sbcolor};>
<layer name="slider2" width=&{swidth}; onMouseover="sspeed=0;" onMouseout="sspeed=restart"></layer></ilayer>
</td>
</tr></table>
Es sieht auf der Seite auch in dem Sinne gut aus, weil der Text aus dem
Javascript auch unten angezeigt wird, das einzige Problem ist jedoch, das
der Text einfach nur da steht, und nichts scrollt.

Geschaut werden kann hier: (ende der Seite ganz unten links)

http://dev.recht-und-vertrag.de/de/impressum/

Danke für eure geduld.

Jamest

Verfasst: Di 20. Nov 2007, 20:48
von Jamest
Tja,

es scheint so als habe ich das Problem gefunden, warum der Text nicht gescrollt wird sondern komplett dargestellt wird.

Der Doctype ist bei mir der folgende:

Code: Alles auswählen

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
benutze ich beispielsweise:

Code: Alles auswählen

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
dann funktioniert es wieder.

Weiss jemand wie ich diesen Fehler umgehen kann und meinen Doctype beibehalten kann?

Grüße

Jamest