php-Array in Flash laden

Bunny1502

Mitglied
Hallo!

Ich habe zwar schon ähnliche Themen gefunden, aber die konnten mir leider nicht wirklich weiterhelfen.

Ich habe folgendes php-Script, welches den Inhalt des Ordners 'bilder' ( jpg.Dateien) in einem Array speichert:
PHP:
<?php

$files = array();
$path  = 'bilder';
    
if ( dir($path) && is_readable($path) )
{
    $handle = @opendir($path);
    while ( false !== ( $file = @readdir($handle) ) )
    {
        if ( $file != "." && $file != ".." )
        {
            if ( is_file($path .'/'. $file) )
            {
                if ( strstr( strtolower($file), '.jpg' ) || strstr( strtolower($file), '.jpeg' ) )
                    array_push($files, $file);
            }
        }
    }
    sort($files);
}
else
{
    $msg = '<b>Es ist ein Fehler aufgetreten und das Script wurde angehalten.</b><br /><br />';
    die($msg);
}
?>
Das Script als solches funktioiert auch, aber:
Nun möchte ich mittels Flash auf das erste Element dieses Array zugreifen und es in einen Movieclip (Instanzname mc) laden.
Dazu habe ich mir im ersten Frame meines Flash-Dokuments folgendes überlegt:
PHP:
jpgListe = new LoadVars();
jpgListe.sendAndLoad("jpgLister.php", jpgListe, "POST");
var picture = jpgListe.files[0];
_root.mc.loadMovie("bilder/picture");
_root.mc._x = 0;
_root.mc._y = 0
Das funktioniert so nicht, da ich bisher noch nie ein php-Script an Flash übergeben hab, weiß ich mir auch nicht wirklich zu helfen.
Ich hoffe aber, dass dies einer von euch kann!

Gruß,
Bunny1502
 
Hi,

1. Dein PHP-Script muss den Inhalt des Array (Schlüssel und Werte) Im Klartext ausgeben - entweder als url-kodierte Kette der Form
Code:
key1=wert1&key2=wert2&key3=wert3
, oder als xml-Bau - z.B. so:
Code:
<file name="foo.txt" />
<file name="bar.txt" />
<file name="sonstwas.txt" />

2. Dein LoadVars-Objekt (bei einem xml-Baum nimmt man statt dessen das XML-Objekt) muss über eine Ereignisfunktion "onLoad" verfügen, die aufgerufen wird, sobald die Daten zur Verfügung stehen.

3. Soll das Array als Member eines MC angelegt werden, der per loadMovie eingeladen wird, so musst Du vorher darauf warten, dass dieser Clip komplett geladen ist. Einfacher wäre es in Deinem Fall wohl, den Aufruf des php-Script direkt von geladenen MC aus durchzuführen:
Code:
var dateien = new Array();
jpgListe = new LoadVars();

jpgListe.onLoad = function() {
    for (var i in this) {
        if (typeof(this[i]) == "string") {
            dateien.push(this[i]);
        }
    }
    // Ab hier ist das Array "dateien" gefüllt.
}

jpgListe.sendAndLoad("jpgLister.php", jpgListe, "POST");
Wenn Du mit LoadVars arbeitest, musst Du darauf achten, dass jedes Element im Array einen eindeutigen Schlüssel erhält. Du zählst also php-Seitig am besten eine Laufvariable hoch, so dass Dein Script in etwa so etwas ausgibt:
Code:
file1=foo.jpg&file2=bar.jpg&file3=sonstwas.gif

Gruß
.
 
Noch mal eine Frage:
Wenn die Werte in folgender Form ausgegeben werden:
Code:
key1=wert1&key2=wert2&key3=wert3
Was steht dann in Flash im Array 'dateien', jeweils an Position dateien[0], dateien[1] usw., wenn das Array 'dateien' gefüllt ist?
wert1? oder key1=wert1?

Gruß,
Bunny1502
 
Hallo,

schon möglichst nur der wert1. key1 ist ja bloss der Name der Variable.


Wenn das hier gilt

Code:
key1=wert1&key2=wert2&key3=wert3

sollte das hier eigentlich funktionieren:

Code:
jpgListe = new LoadVars();

jpgListe.onLoad = function() {
    trace (this.key1);
    //OUTPUT:
    //wert1
}

jpgListe.sendAndLoad("jpgLister.php", jpgListe, "POST");

gruss
 
Mein Problem ist eben jetzt, dass ich nicht weiß wie ich die jeweiligen Datein/ Bilder anzeigen kann.
Angenommen key1=bild.jpg

Dann kann ich ja nicht einfach sagen:
" mc.loadMovie("Ordner/"+dateien[0]); "

irgendwie steh ich gerade etwas auf dem Schlauch....
 
Hallo,

wenn du so vorgehst, wie Tobi es dir beschrieben hat, d.h. durchnummerierte Variablen von PHP zurückgeben und dann im onLoad-Handler in ein Array abfüllen, sollte es aber eigentlich genauso funktionieren ;).

Ich wollte dir mit obigem Beispiel nur zeigen, wie der String "key1=wert1" interpretiert wird. Tut mir leid, wenn dich das verwirrt hat.

gruss
 
Zuletzt bearbeitet:
Nein, du hast mich nicht verwirrt.
Das Prinzip wie das Array gefüllt wird versteh ich, nur schaffe ich jetzt nicht die entsprechenden Dateien anzuzeigen. Im Array befinden sich ja jetzt die Dateinamen der jpg's die im Ordners der von php ausgelesen wurde liegen. Diese würde ich jetzt gerne z.B. mit loadMovie() oder so in einen MovieClip laden.
Doch das funktioniert nicht, ich denke, weil ich es nicht schaffe den entspechenden Pfad richtig anzugeben. Der Ordner der ausgelesen wird befindet sich im gleichen Verzeichnis wie *.fla bzw.*swf und *php und die Namen der einzelnen Dateinen sind ja in dem Array gespeichert.
In der Richtung: mc.loadMovie("Ordnername"+Array[0]); usw..
Wie kann ich das jetzt machen?

Gruß,

Conni1502
 
Hallo,

nun...eigentlich genau so.

Mal angenommen im Array "dateien" ist bei Index = 0, also in dateien[0] der String "mein_bild.jpg" gespeichert. Das Bild mit dem Dateinamen "mein_bild.jpg" befindet sich in in einem Ordner, der heisst "bilder" und befindet sich im selben Verzeichnis wie die *.fla.

Nun solltest du eigentlich etwa wie folgt das Bild laden können:
Code:
this.loadMovie ("bilder/" + dateien[0]);

//bzw

loadMovie ("bilder/" + dateien[0], this);

Hast du dir den Array-Inhalt mal ausgeben lassen (mit trace)? Wenn ja, was ist dabei herausgekommen? Was wird bei dir angegeben, wenn du dir den Variablen-Typ von dateien[0] ausgeben lässt, etwa so:
Code:
trace (typeof(dateien[0]));

gruss
 

Neue Beiträge

Zurück