Avatar billede komputerdk Mester
07. august 2009 - 00:21 Der er 5 kommentarer og
1 løsning

få variabler fra php

hi

jeg prøver at lave et automatisk slideshow script vha. slideshow2.

Det ser sådanne ud i <head>
<?php include('minPHPfil.php'); ?>

<script type="text/javascript">       
    //<![CDATA[
      window.addEvent('domready', function(){
        var data = { 
         
        '1.jpg': { caption: 'en tekst' },
          '2.jpg': { caption: 'A Ceibu tree.' },
          '3.jpg': { caption: 'en tekst.' },
          //'4.jpg': { caption: 'Beer and ice cream.' }
        };


        // Note the use of "linked: true" which tells Slideshow to auto-link all slides to the full-size image.
        var myShow = new Slideshow('show', data, { captions: false, controller: false, delay: 3000, height: 200, hu: 'boks_billeder/', linked: true, width: 200 });
        // Here we create the Lightbox instance.
        // In this case we will use the "close" and "open" callbacks to pause our show while the modal window is visible.
      var box = new Lightbox({
              'onClose': function(){ this.pause(false); }.bind(myShow),
              'onOpen': function(){ this.pause(true); }.bind(myShow)
            });
        });
    //]]>
    </script>


billederne 1 til 4 laves der slideshow af - fint nok - så jeg tænkte at lave et php script som læser i en mappe og laver samme liste, nemlig:






<?php
//minphpfil.php
//config
$dir = "boks_billeder"; //der hvor billederne skal hentes
$caption = "en tekst"; //de som billedteksten er, hvis den vises

$handle = opendir($dir) ;
  while (false !== ($file = readdir($handle)))
      {
          if ($file != "." && $file != "..")
      {
              $filerne .= "'".$file."': { caption: '". $caption ."' } ,";
          }
      }
  closedir($handle);
  //}
 
  $filerne_renset = mb_substr ($filerne,0,strlen($filerne)-1); //fjerner det sidste , da det skal væk!
 
?>




jeg kan sagtens vise php variablen og den ser udmiddelbart rigtig ud hvis jeg laver en echo $filerne_renset;

MEN javascriptet vil bare ikke acceptere det som phpfilen sætter ind i scriptet (i stedet for '1.jpg' : .....)

så skal formatet fra php være specielt for at man "bare" kan sætte det ind i et script på en php / html side???
Avatar billede mbm2016 Nybegynder
07. august 2009 - 10:26 #1
Jeg tror du skal ud i noget Ajax:

Download dette ajax library jeg har lavet: http://www.magnusbm.dk/Ajax.js

Derefter skal du ændre din php fil til følgende:
<?php
//minphpfil.php
//config
$dir = "boks_billeder"; //der hvor billederne skal hentes
$caption = "en tekst"; //de som billedteksten er, hvis den vises

$i = 0;
$handle = opendir($dir) ;
  while (false !== ($file = readdir($handle)))
      {
         
          if ($file != "." && $file != "..")
          {
              if($i == 0)
              {
                  echo "".$file.":".$caption."";
              }else{
                  echo ",".$file.":".$caption."";
              }
          }
          $i++;
      }
  closedir($handle);
  //}
 

?>


I din javascript kode kan du så hente dem ind ved at bruge ajax biblioteket jeg gav dig (O.B.S Husk at importerer Ajax biblioteket ind før din anden javascript kode: typisk imellem dine head tag´s sådan her: <script src="Ajax.js" type="text/javascript"></script>)

Nu kan du så hente filerne sådan her i din javascript kode:

var ajax = new Ajax();
ajax.Start("minphpside.php","GET",true,false,"Ingen",1000,FilerModtaget);

og du kan så modtage dem fra ajax ved at lave den callback funktion jeg definerede "FilerModtaget":
function FilerModtaget()
{
    alert(ajax.Svar.Tekst)
}

Her er så hvordan din javascript kode skal se ud:
<script src="Ajax.js" type="text/javascript">
<script type="text/javascript">       
    //<![CDATA[
    var ajax = new Ajax();
      window.addEvent('domready', function(){
      ajax.Start("minphpside.php","GET",true,false,"Ingen",1000,FilerModtaget);
        var data = { 
        '1.jpg': { caption: 'en tekst' },
          '2.jpg': { caption: 'A Ceibu tree.' },
          '3.jpg': { caption: 'en tekst.' },
          //'4.jpg': { caption: 'Beer and ice cream.' }
        };
       
        function FilerModtaget()
        {
            data = "{";
            var deling = ajax.Svar.Tekst.split(",");
            for(var i = 0;i<deling.length;i++)
            {
                var img = deling[i].split(":")[0];
                var kom = deling[i].split(":")[1];
                if(i == 0)
                {
                    data += '\''+img+'\'' + ': { caption:'+ '\''+kom+'\' }';
                }else{
                    data += ',\''+img+'\'' + ': { caption:'+ '\''+kom+'\' }';
                }
               
            }
            data += "};";
        }

        // Note the use of "linked: true" which tells Slideshow to auto-link all slides to the full-size image.
        var myShow = new Slideshow('show', data, { captions: false, controller: false, delay: 3000, height: 200, hu: 'boks_billeder/', linked: true, width: 200 });
        // Here we create the Lightbox instance.
        // In this case we will use the "close" and "open" callbacks to pause our show while the modal window is visible.
      var box = new Lightbox({
              'onClose': function(){ this.pause(false); }.bind(myShow),
              'onOpen': function(){ this.pause(true); }.bind(myShow)
            });
        });

    //]]>
</script>

Jeg har ikke testet koden men prøv den lige :)
Avatar billede olebole Juniormester
07. august 2009 - 15:11 #2
<ole>

Den fremgangsmåde kan let give problemer, når man ikke forholder sig til de tegn, man sender retur. Brug i stedet PHP's indbyggede JSON-encoder  ;o)

/mvh
</bole>
Avatar billede komputerdk Mester
07. august 2009 - 17:27 #3
hmm, jeg kan ikke få det ajax til at virke :(

json lyder interessant, men de scripts jeg har fundet virker ikke..


jeg fatter hat til javascript - men vil det ændre noget hvis php'en lavede hele javascripten.. eller er der bare et eller andet som echo gør i php som javascript ikke fatter ???
Avatar billede komputerdk Mester
07. august 2009 - 17:50 #4
nå jeg sad og rodede med det igen..

og fik det til at virke..

åbenbart er det i minphpside.php



$filerne .= "'".$file."': { caption: '". $caption ."' } ,";

hvis det ændres til

$filerne .= "'".$file."': { caption: '". $caption ."' } , \n";

dvs. at den laver new line efter

så kan jeg godt sætte den ind i javascriptet og det virker :)

var data = { <?php echo $filerne_renset;  ?>



fandt dog aldrig ud af hvorfor at det hedder

var data = {

og hvorfor der SKAL være linjeskift efter hver linje... ( ??)
Avatar billede olebole Juniormester
07. august 2009 - 19:03 #5
mbm2007 >> Du kan teste, hvad json_encode skriver ud, med denne kode:

<?php
//minphpfil.php
//config
$dir = "boks_billeder"; //der hvor billederne skal hentes
$caption = "en tekst"; //de som billedteksten er, hvis den vises

$oJSON = new stdClass();

$handle = opendir($dir) ;
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        $oJSON->{$file} = $caption;
    }
}
closedir($handle);

print json_encode($oJSON);
?>

Vil du bruge det i en realistisk kontekst, kan koden se sådan ud:

<?php
//minphpfil.php
//config
$dir = "boks_billeder"; //der hvor billederne skal hentes
$caption = "en tekst"; //de som billedteksten er, hvis den vises

$oJSON = new stdClass();

$handle = opendir($dir) ;
while (false !== ($file = readdir($handle))) {
    if ($file != "." && $file != "..") {
        $oJSON->{$file} = $caption;
    }
}
closedir($handle);

$sJSON = json_encode($oJSON);

header("Content-Type: application/json");
header("Content-Length: ".strlen($sJSON));
print $sJSON;
?>

JS/Ajax delen kunne så se ud i stil med:

<script type="text/javascript"> // XMLHttpRequest Wrapper: http://dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php
var sAX="MSXML2.XMLHTTP.6.0 MSXML2.XMLHTTP.3.0 Msxml2.XMLHTTP Microsoft.XMLHTTP";
(function(){var x=window.XMLHttpRequest;if(!x){var o=s=null,a=sAX.split(" ");for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}}window.XMLHttpRequest=x?x:o?function(){return new ActiveXObject(s)}:null;o=null;sAX=undefined})();

var oHttp = null;
function getFiles() {
    if (oHttp) return;
    oHttp = new XMLHttpRequest();
    oHttp.open("post", "minphpfil.php", true);
    oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = fnCallBack;
    oHttp.send(null);
}
function fnCallBack() {
    var oResp = null;
    eval("oResp="+oHttp.responseText);
    oHttp = null;
   
  /*
    Nu er oResp et JavaScript objekt.
    Vi prøver lige at alert'e dets indhold:
  */
    var a = [];
    for (var x in oResp) a.push(x + " => " + oResp[x]);
    alert(a.join("\n"));
}
</script>

- hvor getFiles er metoden, som skal kaldes
Avatar billede komputerdk Mester
28. april 2012 - 19:13 #6
luk
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester