[gelöst] smarty und javascript

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [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.
    Zuletzt geändert von activexactive; 07.11.2009, 11:10.

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

    Kommentar


    • #3
      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.

      Kommentar


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

        Kommentar


        • #5
          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
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            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

            Kommentar


            • #7
              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.

              Kommentar


              • #8
                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.
                Zuletzt geändert von activexactive; 07.11.2009, 20:31.

                Kommentar

                Lädt...
                X