PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   [gelöst] smarty und javascript (https://www.php-resource.de/forum/php-developer-forum/97994-geloest-smarty-und-javascript.html)

activexactive 07-11-2009 11:07

[gelöst] smarty und javascript
 
Hey nochmal zusammen...
Ich weiß eure Hilfe immer zu würdigen. Daher hab ich nochmal eine kleine Frage. Ich weiß auch nicht ob ich hier
damit überhaupt richtig bin. Wenn nicht, einfach löschen oder verschieben.

Ich versuche eine Schleife von Smarty in einen javascript text ticker einzubinden.
Dabei hab ich folgendes versucht. Javascript mit {literal} getrennt und da wo die Susgabe von Javascript stattfindet den Smartycode zugefügt.
Das ganze ohne die Smarty Tags funktioniert mit literal prima. Nur sobald die Schleife dort drin ist, kommt garnix mehr. Woran kann das liegen ?
Zur veranschaulichung hier mal mein kleines Script.

edit: Da wo der Inhalt reinsoll ist unmittelbar am Anfang des scriptes bei der variable var marqueecontent=''

HTML-Code:


{literal}
<script language="JavaScript1.2">

/*
Cross browser Marquee script- © Dynamic Drive (www.dynamicdrive.com)
For full source code, 100's more DHTML scripts, and Terms Of Use, visit http://www.dynamicdrive.com
Credit MUST stay intact
*/

//Specify the marquee's width (in pixels)
var marqueewidth="500px"
//Specify the marquee's height
var marqueeheight="25px"
//Specify the marquee's marquee speed (larger is faster 1-10)
var marqueespeed=2
//configure background color:
var marqueebgcolor="#DEFDD9"
//Pause marquee onMousever (0=no. 1=yes)?
var pauseit=1

//Specify the marquee's content (don't delete <nobr> tag)
//Keep all content on ONE line, and backslash any single quotations (ie: that\'s great):

var marqueecontent='{/literal}  {foreach item=row from=$news_data}{$row.text}            {/foreach}  {literal} '


////NO NEED TO EDIT BELOW THIS LINE////////////
marqueespeed=(document.all)? marqueespeed : Math.max(1, marqueespeed-1) //slow speed down by 1 for NS
var copyspeed=marqueespeed
var pausespeed=(pauseit==0)? copyspeed: 0
var iedom=document.all||document.getElementById
if (iedom)
document.write('<span id="temp" style="visibility:hidden;position:absolute;top:-100px;left:-9000px">'+marqueecontent+'</span>')
var actualwidth=''
var cross_marquee, ns_marquee

function populate(){
if (iedom){
cross_marquee=document.getElementById? document.getElementById("iemarquee") : document.all.iemarquee
cross_marquee.style.left=parseInt(marqueewidth)+8+"px"
cross_marquee.innerHTML=marqueecontent
actualwidth=document.all? temp.offsetWidth : document.getElementById("temp").offsetWidth
}
else if (document.layers){
ns_marquee=document.ns_marquee.document.ns_marquee2
ns_marquee.left=parseInt(marqueewidth)+8
ns_marquee.document.write(marqueecontent)
ns_marquee.document.close()
actualwidth=ns_marquee.document.width
}
lefttime=setInterval("scrollmarquee()",20)
}
window.onload=populate

function scrollmarquee(){
if (iedom){
if (parseInt(cross_marquee.style.left)>(actualwidth*(-1)+8))
cross_marquee.style.left=parseInt(cross_marquee.style.left)-copyspeed+"px"
else
cross_marquee.style.left=parseInt(marqueewidth)+8+"px"

}
else if (document.layers){
if (ns_marquee.left>(actualwidth*(-1)+8))
ns_marquee.left-=copyspeed
else
ns_marquee.left=parseInt(marqueewidth)+8
}
}

if (iedom||document.layers){
with (document){
document.write('<table border="0" cellspacing="0" cellpadding="0"><td>')
if (iedom){
write('<div style="position:relative;width:'+marqueewidth+';height:'+marqueeheight+';overflow:hidden">')
write('<div style="position:absolute;width:'+marqueewidth+';height:'+marqueeheight+';
background-color:'+marqueebgcolor+'"
onMouseover="copyspeed=pausespeed" onMouseout="copyspeed=marqueespeed">
')
write('<div id="iemarquee" style="position:absolute;left:0px;top:0px"></div>')
write('</div></div>')
}
else if (document.layers){
write('<ilayer width='+marqueewidth+' height='+marqueeheight+' name="ns_marquee" bgColor='+marqueebgcolor+'>')
write('<layer name="ns_marquee2" left=0 top=0 onMouseover="copyspeed=pausespeed"
onMouseout="copyspeed=marqueespeed">
</layer>')
write('</ilayer>')
}
document.write('</td></table>')
}
}
</script>

{/literal}

Wäre Klasse wenn ihr mit Tipps geben könnt was da schief läuft.

Viele Grüße und danke im vorraus.

onemorenerd 07-11-2009 13:25

Das language-Attribut des Script-Tags ist deprecated. Verwende type!
Was heißt "kommt gar nix mehr"? Keine Fehlermeldung und gar keine Ausgabe?

activexactive 07-11-2009 13:58

ja,ich weiß der tag..den hatte ich auch schonmal geänert gehabt. aber durch das ständige copy&paste und rumprobieren blieb es dann beim alten.

alsoja, wenn ich die smarty schleife entferne und text dafür hinmache, wird das js geladen. nur sobald die schleife drin ist, kommt garnichts mehr. keine fehlermeldung, der rest des templates wird geladen.nur halt an der stelle wo das js steht, wird es nicht angezeigt.

onemorenerd 07-11-2009 14:55

Ändert sich etwas, wenn die Schleife auf einer eigenen Zeile steht?
Gibt die Schleife überhaupt was aus?
Wie testest du "JS nicht geladen"?

Kropff 07-11-2009 15:07

Also wenn mich meine mittlerweile etwas eingerosteten Smarty-Kenntnisse nicht im Stich lassen, so ist das Template korrekt. Hast du denn mal im PHP-Code dir $news_data ausgeben lassen? Ich vermute mal, dass die leer ist.

Peter

activexactive 07-11-2009 15:58

hey.. wenn ich das ganze ohne javascript laufen lasse, bekomme ich meine ausgaben.. habe auch zuerst gedacht das da nichts rauskommt. aber dem ist leider nicht so.da sind 3 eingetragene news die müssten angezeigt werden.

das smarty script müssteso korrekt sein es sei denn durch die implementierung in javascript das da irgendwas nicht funzt.

wenn ich die füßchenvon der javascriptvariable von '' in "" änder,funktioniert zwar das javascript aber ich bekomme den codeinhalt von smarty zu sehenstatt meines textes.. zumindest war so meine kontrolle gewesen

edit: naja, ich teste es indem ich es ausprobiere.. ist der smarty code nicht drin stattdessen normaler text, funzt es.

die schleife hat inhalt..ja

onemorenerd 07-11-2009 17:29

Welchen Inhalt hat die Schleife? Wenn du zum Beispiel Strings ausgibst, die ' enthalten, erzeugst du damit invalides Javascript. Dein Browser müsste das mit einer Fehlermeldung quittieren. Tut er das?

Versuch mal das:
Code:

<script type="text/javascript">
{literal}
....
{/literal}
{foreach item=row from=$news_data} foo {/foreach}
{literal}
...
{/literal}
</script>

Ansonsten bliebe dir noch, alle { und } im Javascript-Code durch {ldelim} und {rdelim} zu ersetzen und auf {literal} zu verzichten.

activexactive 07-11-2009 20:16

hi.. mit deinem foo erhalte ich 2 ausgaben ..nämlich foo foo

der inhalt der schleife ist wie folgt:

1. News. Ich bin eine wichtige Information.<br />

direkt aus dem quelltext kopiert.

nun hab ich in die db geschaut um zu sehen was die tabelle an
inhalt hat. du hast recht es enthielt zwar kein '
aber ein <br /> und das mochte er wohl nicht.
wieso komme ich nicht auf solch einfache sachen? *amkopfkratz..

ohje..danke für die hilfe.ihr seid klasse :)

PS: das mit dem foo merk ich mir mal direkt *hehe..danke

edit: achso..zuerst hatte ich es auch mit {ldelim} und {rdelim} probiert. hat aber nicht geklappt.


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:25 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG