Avatar billede janbn Nybegynder
26. juni 2006 - 12:24 Der er 19 kommentarer og
1 løsning

Flash XML niveauer

Hej
Det vil være SUPER, hvis nogen kan hjælpe mig videre med dette ønske.
Udgangspunktet er denne tutorial:
http://www.kirupa.com/developer/mx2004/xml_flash_photogallery.htm

Jeg vil gerne ændre den således at der kommer et teksfeltt mere til - og nu kommer problemet: lave xml´en i flere niveauer således at jeg kan conecte til xml´en fra én fla fil og få billedserien (der tæller rigtigt op) fra niveau1. I en anden fla fil kan jeg få billedserien fra niveau2 etc. Jeg vil gerne opnå at samle så meget content som muligt i samme xml fil og stadig have fordel af optællingsfunktionen i denne tutorial. Er det forståeligt?

Jeg gør noget forkert for det virker ikke.

Her er mit AS:
function loadXML(loaded) {
    if (loaded) {
        xmlNode = this.firstChild;
        image = [];
        description = [];
        testtext = [];
        total = xmlNode.childNodes.length;
        for (i=0; i<total; i++) {
            image[i] = xmlNode.childNodes[i].childNodes[0].childNodes[0].firstChild.nodeValue;
            description[i] = xmlNode.childNodes[i].childNodes[0].childNodes[1].firstChild.nodeValue;
            testtext[i] = xmlNode.childNodes[i].childNodes[0].childNodes[2].firstChild.nodeValue;
        }
        firstImage();
    } else {
        content = "file not loaded!";
    }
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("images2.xml");
/////////////////////////////////////
listen = new Object();
listen.onKeyDown = function() {
    if (Key.getCode() == Key.LEFT) {
        prevImage();
    } else if (Key.getCode() == Key.RIGHT) {
        nextImage();
    }
};
Key.addListener(listen);
previous_btn.onRelease = function() {
    prevImage();
};
next_btn.onRelease = function() {
    nextImage();
};
/////////////////////////////////////
p = 0;
this.onEnterFrame = function() {
    filesize = picture.getBytesTotal();
    loaded = picture.getBytesLoaded();
    preloader._visible = true;
    if (loaded != filesize) {
        preloader.preload_bar._xscale = 100*loaded/filesize;
    } else {
        preloader._visible = false;
        if (picture._alpha<100) {
            picture._alpha += 10;
        }
    }
};
function nextImage() {
    if (p<(total-1)) {
        p++;
        if (loaded == filesize) {
            picture._alpha = 0;
            picture.loadMovie(image[p], 1);
            desc_txt.text = description[p];
            til_text.text = testtext[p];
            picture_num();
        }
    }
}
function prevImage() {
    if (p>0) {
        p--;
        picture._alpha = 0;
        picture.loadMovie(image[p], 1);
        desc_txt.text = description[p];
        til_text.text = testtext[p];
        picture_num();
    }
}
function firstImage() {
    if (loaded == filesize) {
        picture._alpha = 0;
        picture.loadMovie(image[0], 1);
        desc_txt.text = description[0];
        til_text.text = testtext[0];
        picture_num();
    }
}
function picture_num() {
    current_pos = p+1;
    pos_txt.text = current_pos+" / "+total;
}


Og her er XML´en:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<content>
<niv1>
    <emne>
        <image>pict1.jpg</image>
        <head>os1</head>
    <text>Lorem ipsum 1 </text>
    </emne>
    <emne>
        <image>pict2.jpg</image>
        <head>os2</head>
    <text>Lorem ipsum 2 </text>
    </emne>
   
    <niv1>
   
    <niv2>
    <emne>
        <image>pict3.jpg</image>
        <head>ny os</head>
    <text>Lorem ipsum 1 </text>
    </emne>
    <emne>
        <image>pict4.jpg</image>
        <head>ny os2</head>
    <text>Lorem ipsum 2 </text>
    </emne>
   
    <niv2>
</content>

Eller er der en  anden og smartere måde? Please....
Avatar billede janbn Nybegynder
28. juni 2006 - 13:52 #1
Slet ingen bud....?
Avatar billede tedar Nybegynder
28. juni 2006 - 16:51 #2
Hmm det ser ud som om at der er fejl i din xml fil.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<content>
<niv1>
    <emne>
        <image>pict1.jpg</image>
        <head>os1</head>
        <text>Lorem ipsum 1 </text>
    </emne>
    <emne>
        <image>pict2.jpg</image>
        <head>os2</head>
        <text>Lorem ipsum 2 </text>
    </emne>
</niv1>
<niv2>
    <emne>
        <image>pict3.jpg</image>
        <head>ny os</head>
        <text>Lorem ipsum 1 </text>
    </emne>
    <emne>
        <image>pict4.jpg</image>
        <head>ny os2</head>
        <text>Lorem ipsum 2 </text>
    </emne>
</niv2>
</content>
Avatar billede janbn Nybegynder
28. juni 2006 - 19:24 #3
Hej tedar!
Okay, det har du ret i. Men det er desværre ikke dér løsningen ligger....
Avatar billede tedar Nybegynder
29. juni 2006 - 12:49 #4
jeg bliver lige nodt til at høre hvad det reelle problem er :) får du ikke loaded alle dine fil beskrivelser ind eller?

I så fald vil er det sådan her du skal loade.

[code]
function loadXML(loaded) {
    if (loaded) {
        xmlNode = this.firstChild;
        image = [];
        description = [];
        testtext = [];
        total = xmlNode.childNodes.length;
    k=0;
        for (i=0; i<total; i++) {
            for (j=0;j<xmlNode.childNodes[i].childNodes.length;j++) {
                image[k] = xmlNode.childNodes[i].childNodes[j].childNodes[0].firstChild.nodeValue;
                description[k] = xmlNode.childNodes[i].childNodes[j].childNodes[1].firstChild.nodeValue;
                testtext[k] = xmlNode.childNodes[i].childNodes[j].childNodes[2].firstChild.nodeValue;
                k++;
            }
        }
        firstImage();
    } else {
        content = "file not loaded!";
    }
}
[/code]
Avatar billede janbn Nybegynder
29. juni 2006 - 13:13 #5
Det reelle problem er:
jeg vil gerne kunne knytte en billedserie til 1.fla hvor den henter de emner/billeder der står i xml-filen under niv1 Og tæller det rigtige antal. I en anden fil 2.fla skal man kunne hente de emner/billeder der står beskrevet under niv2....Altså: at man kan knytte en række forskellige fla filer an til samme xml fil. Sprogversionering/opdatering etc. kan foretages i én fil (xml). Er det klart?
Foreløbig tak for indsatsen, har du et bud på det ud fra det jeg nu beskriver?
Avatar billede tedar Nybegynder
29. juni 2006 - 13:31 #6
Ahh, ok - så skal vi have defineret en pointer af en slags, så vi kan hente det rigtige niveau ud.

prøv det her - der skulle du gerne kun få de picture info som der ligger i niveau 1

#### CODE ####

function loadXML(loaded) {
    if (loaded) {
        image = [];
        description = [];
        testtext = [];
        xmlNode = this.firstChild;
        total = xmlNode.childNodes.length;
        for (i=0; i<total; i++) {
                if(xmlNode.childNodes[i].attributes["niveau"] == "1") {
                    image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
                    description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
                    testtext[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
                }
        }
        firstImage();
    } else {
        content = "file not loaded!";
    }
}

#### XML #####
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<content>
    <emne niveau="1">
        <image>pict1.jpg</image>
        <head>os1</head>
        <text>Lorem ipsum 1 </text>
    </emne>
    <emne niveau="1">
        <image>pict2.jpg</image>
        <head>os2</head>
        <text>Lorem ipsum 2 </text>
    </emne>
    <emne niveau="2">
        <image>pict3.jpg</image>
        <head>ny os</head>
        <text>Lorem ipsum 1 </text>
    </emne>
    <emne niveau="3">
        <image>pict4.jpg</image>
        <head>ny os2</head>
        <text>Lorem ipsum 2 </text>
    </emne>
</content>
Avatar billede janbn Nybegynder
29. juni 2006 - 13:52 #7
Godt forsøgt! Men desværre, den tæller 1/4 - og skulle vel tælle 1/2 ?
Avatar billede tedar Nybegynder
29. juni 2006 - 14:15 #8
der havde lige sneget sig en fejl ind i xml'en.

### XML ###

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<content>
    <emne niveau="1">
        <image>pict1.jpg</image>
        <head>os1</head>
        <text>Lorem ipsum 1 </text>
    </emne>
    <emne niveau="1">
        <image>pict2.jpg</image>
        <head>os2</head>
        <text>Lorem ipsum 2 </text>
    </emne>
    <emne niveau="2">
        <image>pict3.jpg</image>
        <head>ny os</head>
        <text>Lorem ipsum 1 </text>
    </emne>
    <emne niveau="2">
        <image>pict4.jpg</image>
        <head>ny os2</head>
        <text>Lorem ipsum 2 </text>
    </emne>
</content>
Avatar billede janbn Nybegynder
29. juni 2006 - 16:42 #9
øhhh...den tælle godtnok stadig 1/4:-(
Avatar billede tedar Nybegynder
29. juni 2006 - 16:48 #10
ja, den tæller igennem alle sammen, men - if(xmlNode.childNodes[i].attributes["niveau"] == "1") ligge kun de billeder der har niveau sat ind i dine arrays.
Avatar billede janbn Nybegynder
29. juni 2006 - 17:25 #11
måske gør jeg noget forkert? Men den tæller 1/4 og siger "undefined" ved billed/text 3 og 4. Mit ønske er jo at den kun tæller 2 i dette tilfælde....
Avatar billede tedar Nybegynder
29. juni 2006 - 17:36 #12
vi fanger jo også kun de to første - det beder vi scriptet om her if(xmlNode.childNodes[i].attributes["niveau"] == 1) - altså dem der er på niveau 1.

når billederne skal hentes til din anden movie skal vi have fat i if(xmlNode.childNodes[i].attributes["niveau"] == 2) og så fremdeles.
Avatar billede janbn Nybegynder
29. juni 2006 - 17:50 #13
ja....men (ikke for at være besværlig)...det dur jo ikke at tælleren siger at der er 4 billeder og når man når til nummer 3 kommer der en fejl:-(
pointen er at den skal sige at der er 2 billeder...fra en anden fla fil skal man så hente dem fra niveau 2 og her vil tælleren så også (i dette tilfælde) sige 2 billeder (2 andre).
Avatar billede tedar Nybegynder
30. juni 2006 - 00:49 #14
well, så laver vi da bare en subtotal, som henter ind hvor mange billeder der er blevet lagt i images. Så burde den være klaret.

function loadXML(loaded) {
    if (loaded) {
        image = [];
        description = [];
        testtext = [];
        xmlNode = this.firstChild;
        subtotal = xmlNode.childNodes.length;
        total = 0;
        for (i=0; i<subtotal; i++) {
                if(xmlNode.childNodes[i].attributes["niveau"] == "1") {
                    total++;
                    image[i] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
                    description[i] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
                    testtext[i] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
                }
        }
        firstImage();
    } else {
        content = "file not loaded!";
    }
}
Avatar billede janbn Nybegynder
30. juni 2006 - 04:53 #15
wow! flot! nu fungerer det perfekt i niveau1 - jeg mangler bare lige at få styr på hvor meget jeg skal rette i scriptet for at få niveau2 med i en anden fil, det er åbentbart ikke nok at ændre:
if(xmlNode.childNodes[i].attributes["niveau"] == "2")
Avatar billede tedar Nybegynder
30. juni 2006 - 09:12 #16
Når jeg kører det her, så loader den fint de to noder med niveau="2", hvilke fejl får du?
Avatar billede janbn Nybegynder
30. juni 2006 - 21:09 #17
jeg får "undefined" i head og text felterne og den loader ikke billedet.....men tæller rigtigt
Avatar billede tedar Nybegynder
01. juli 2006 - 00:57 #18
min fejl, havde glemt at skifte fra i til total som counter i dine arrays, men den her fungere.

function loadXML(loaded) {
    if (loaded) {
        image = [];
        description = [];
        testtext = [];
        xmlNode = this.firstChild;
        subtotal = xmlNode.childNodes.length;
        total = 0;
        for (i=0; i<subtotal; i++) {
                if(xmlNode.childNodes[i].attributes["niveau"] == "2") {
                    image[total] = xmlNode.childNodes[i].childNodes[0].firstChild.nodeValue;
                    description[total] = xmlNode.childNodes[i].childNodes[1].firstChild.nodeValue;
                    testtext[total] = xmlNode.childNodes[i].childNodes[2].firstChild.nodeValue;
                    total++;
                }
        }
        firstImage();
    } else {
        content = "file not loaded!";
    }
}
Avatar billede janbn Nybegynder
01. juli 2006 - 08:56 #19
Hej tedar
Det virker! Jeg er meget taknemmelig for din hjælp - det er bare SUPER. Rigtig flot.
Nu er det jo en lille feature der giver en lang række nye muligheder. Nu kan jeg loade små fla´er ind i en hovedfil  - og disse fodres igen fra samme xml -> nemt at opdatere, sprogversionere etc.
Håber jeg kan hjælpe dig en dag  - næppe med AS;-)
Fortsat god sommer
Avatar billede tedar Nybegynder
01. juli 2006 - 10:03 #20
i lige måde :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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