Autor Zpráva
RobertH
Profil
Zdravim,

pokoušim se o dynamický flashový banner s pomocí XML, data se mi načítaj, ale můj problém tkví v tom, že se mi animace zastaví na 1 framu a neproběhne mi celá jak bych potřeboval.

ActionScript:
//Create the XML Object
myXML = new XML()
myXML.ignoreWhite = true
//Load XML file
myXML.load("akce.xml")
//Make a reference to current timeline
myXML.ref = this
// Parse XML and fetch
myXML.onLoad = function(succes){
	if(succes){
		var root = this.firstChild
		nodes = root.childNodes
		for(var i=0; i<nodes.length; i++) {		
			this.ref["Title_txt"+i].text = nodes[i].attributes.name
			subnodes = nodes[i].childNodes
			this.ref["Comments_txt"+i].text = subnodes[0].firstChild.toString()
			this.ref["holder_mc"+i].loadMovie(subnodes[1].firstChild.toString())
		}
	} else trace("Error loading XML document")
}
stop()


A XML:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE banner SYSTEM "http://1.im.cz/dtd/dynamicbanner.dtd">

<banner>

<title name="-55%">
		<comments>1</comments>
		<image>1.jpg</image>
	</title>
	<title name="Test 2">
		<comments>2</comments>
		<image>2.jpg</image>
	</title>
	<title name="Test 2">
		<comments>3</comments>
		<image>3.jpg</image>
	</title>

</banner>


AS moc nerozumim, tak uvítám každou radu.

Děkuji předem.
:D
Profil *
myXML.onLoad = function(succes){
	if(succes){
	           // uspesne nacteni XML dokumentu 
	           // staci doplnit o play(); nebo goToAndPlay(2); 
	
	} else {
                           trace("Error loading XML document");
                }
}
stop();
:D
Profil *
Oprava: gotoAndPlay(2) a ne goToAndPlay(2);
weroro
Profil
this.stop ();
myXML = new XML ();
myXML.ignoreWhite = true;
myXML.ref = this;
myXML.onLoad = function (succes)
{
	if (succes)
	{
		var root:Object = this.firstChild;
		var nodes:Array = root.childNodes;
		for (var i = 0; i < nodes.length; i++)
		{
			this.ref["Title_txt" + i].text = nodes[i].attributes.name;
			var subnodes:Array = nodes[i].childNodes;
			this.ref["Comments_txt" + i].text = subnodes[0].firstChild.toString ();
			this.ref["holder_mc" + i].loadMovie (subnodes[1].firstChild.toString ());
		}
		_root.play ();
	}
	else
	{
		trace ("Error loading XML document");
	}
};
myXML.load ("akce.xml");

Ešte mám ale dve poznámky:

1.) Nezabudni na koniec animácie (úplne posledný frame) pridať script
_root.gotoAndPlay(2);

pretože v opačnom prípade sa ti bude stále dookola loadovať to isté xml a môže to zblbnúť.

2.) Pokiaľ máš v pláne takto vytvorený banner použiť, musíš si uvedomiť jednu dôležitú vec. FLASH nedokáže (z dôvodu zabezpečenia) načítavať xml súbor z inej domény (pokiaľ mu to nedovolíš). Spomenul som to pre to, lebo ak by si chcel svoj banner umiestniť napr. na môj web a budeš chcieť meniť informácie v ňom, tak xml súbor musí byť na mojom servery s polu s bannerom, čo však pôsobí komplikácie pri aktualizácii dát. Osobne mi nemusí vyhovovať alebo nebudem mať čas stále vymieňať tvoje xml za nejaké nové, aktualizované. Preto to chceš asi urobiť tak, že banner bude na mojom servery a xml na tvojom servery, to ti však fungovať nebude. Buď bude potrebné povoliť domain policy alebo si vytvoriť malý php súbor, ktorý bude pribalený spolu s bannerom na mojom servery. flash zavolá PHP, php načíta dáta (xml) z inej (tvojej) domény a vypíše ich do flashu.
RobertH
Profil
weroro:
Super, díky moc, takhe to funguje bez problému. Ale docela si mě zarazil s tim, že mi to nenačte xml z mýho serveru, když bude banner na jinym. Tušim co tim PHP myslíš, ale vůbec nevim jak to zapsat. Myslíš, že by si mi moh hodit ňákou ukázku?

A ještě přemejšlim, jestli bude takto banner akceptovat třeba Seznam.cz? Máš s tim zkušenost?
Abych se netrápil s něčim co pak nepude použít.
weroro
Profil
this.stop ();
var adresa_k_xml:String = "http://www.tvojastranka.cz/akce.xml";
var myXML:XML = new XML ();
myXML.ignoreWhite = true;
myXML.ref = this;
myXML.onLoad = function (succes)
{
	if (succes)
	{
		var root:Object = this.firstChild;
		var nodes:Array = root.childNodes;
		for (var i = 0; i < nodes.length; i++)
		{
			this.ref["Title_txt" + i].text = nodes[i].attributes.name;
			var subnodes:Array = nodes[i].childNodes;
			this.ref["Comments_txt" + i].text = subnodes[0].firstChild.toString ();
			this.ref["holder_mc" + i].loadMovie (subnodes[1].firstChild.toString ());
		}
		_root.play ();
	}
	else
	{
		trace ("Error loading XML document");
	}
};
myXML.load ("load_xml.php?xmlpath=" + adresa_k_xml);

PHP súbor s názvom load_xml.php, bude vyzerať takto:
<?php
$xml = $_GET['xmlpath'];
readfile($xml);
?>

SWF súbor a PHP súbor musia byť v rovnakom priečinku. SWF banner zavolá PHP súbor s parametrom, ktorým zadá PHP scriptu aby načítal xml súbor zo zadanej adresy. Tak to môžeš mať XML umiestnený kdekoľvek :)
RobertH
Profil
Díky, ale bohužel mi to tak nefunguje...
Zřídil jsme si dva hostingy na webzdarma. Na jeden jsem dal SWF + PHP a na druhý XML s obrázky, místo "http://www.tvojastranka.cz/akce.xml" v AS jsem reálnou adresu k XML a bohužel nic.
weroro
Profil
Teoreticky moze byt chyba v PHP skus to takto:
<?php
$xml = $_GET['xmlpath'];
$obsah = file_get_contents ($xml);
echo $obsah;
?>
RobertH
Profil
Tak bohužel ani takhle to nefunguje.
:D
Profil *
A jsou cesty k externím datům (obrázky a pod.) v XML napsány absolutně, nebo načítáte pouze jenom řetězce (text)?
RobertH
Profil
Měl jsem je napsané pouze jako text, ale i když sem je přepsal na absolutní, tak pořád nic.

Dávám sem odkaz na celou složku, kdyby se chtělo někomu na to mrknout, jelikož já sem už bezradnej.
RobertH
Profil
Zkoušim testovat různý návaznosti na sebe atd. viz níže:

1) PHP
Když zadám adresu http://mojedomena.cz/load_xml.php?xmlpath=http://mojedomena.cz/xml/akce.xml tak se XML načte (takže PHP funguje).

2) FLASH
Když testuju flash přímo ve flashi (Test scene), tak v output okně mi to vypíše, že nemůže najít URL (file://...) cože je jasný, když se to spouští z localu, ale aspoň je vidět, že funguje i AS.
Pokud zadám místo
myXML.load ("load_xml.php?xmlpath=" + adresa_k_xml);
přímou adresu k XML
myXML.load ("http://mojedomena.cz/xml/akce.xml);
, tak to v Test scene funguje, ale na webu samozřemě ne protože to nejede přes ten PHP script (přes kterej to teda taky nefunguje).

Vážně už nevim čím by to mohlo bejt, zkoušim všechno možný, ale nevim si s tim rady.

Uměl by mi někdo poradit?
RobertH
Profil
Tak záhada vyřešena, vykašlal jsem se na celý PHP skript a udělal jsem to přes crossdomain.xml a vše funguje jak má.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0