Events dynamisch aus XML ausladen + anordnen

Flashtim

Grünschnabel
Hallöchen erstmal, ich hab ein Problemchen, und nachdem mir in einem anderem Forum keiner helfen konnte, probier ichs mal hier:

Das Problem:

Siehe: http://www.das-mirage.de/ auf dem Menüpunkt "Events"!


Diese Liste ist momentan statisch.
Die Events sollen jedoch dynamisch aus einer XML ausgelesen werden und sich je nach Datum natürlich ändern.

Wie schaffe ich es also mehreren Movieclips die richtigen Texte zu senden und die dann auch richtig anzuordnen?

Achja, das ganze muss aber nachher noch genauso aussehen wie im Moment!

Mir fehlt leider jeglicher Ansatz, danke an alle, die versuchen zu helfen.

Flashtim

edit: och neee, sry für den vertipper beim titel
 
Zuletzt bearbeitet:
Hi und willkommen im Forum,

da mir nicht ganz klar ist, worin genau Dein Problem besteht, würde ich Dich bitten, noch einmal genauer zu beschreiben, wo es hängt.

Generell böte sich z.B. folgendes XML-Format an:
XML:
<event date="01.01.2008">
  <title>Event-Titel</title>
  <base>Base</base>
  <studio>Studio</studio>
</event>
Nach dem Einladen instanzierst Du für jedes <event>-Tag einen MovieClip, dem Du die Daten in den Untertags <title>, <base> und <studio> übergibst.

Gruß
.
 
Zuletzt bearbeitet von einem Moderator:
Sorry, also hab hier ne Fla angehängt die den momentanen Stand der Eventsabteilung zeigt,
das ganze soll aber eben nachher nicht statisch sein, sondern aus ner XML ausgelesen werden.

die XML sieht bisher so aus:

Code:
<events>
 <events datum="29-01-2008">
  <text><font color="#ff0000">DESPERATE WIVES</font><br><b>DIE NACHT DER LADIES</b><br><font color="#ff0000">STUDIO:</font> ALLES WAS SPASS MACHT<br>MUSIK VON ABBA BIS ZAPPA</text>
 </event>

...


usw.

Anhang anzeigen events.fla
 
Bitte kein Threadpushing - ist hier in etwa so beliebt wie Windpocken. ;)

Ich fertige Dir gerne ein exemplarisches Beispiel an, allerdings habe ich neben dem Forum noch mehr zu tun - kann also sein, dass ich mich erst morgen oder am Wochenende damit melde, da es hier nicht mit 3-4 Zeilen getan ist.

Gruß
.
 
Hi,

im Anhang findest Du ein Beispiel zum Einladen von Daten aus einer XML-Datei, dynamischen Instanzieren und Skalieren von Event-Containern und zum Anordnen derselben.

Gruß
.
 

Anhänge

ah, erstmal vielen dank für deine arbeit, nur eine sache, mit der ich immer noch nich klarkomme ist, dass der erste eintrag im flash der eintrag passend zum datum ist.

bisher steht bei mir eben wenn ich die swf öffne der 2.1.2008 dran ( find ich übrigens komisch, dass er mir den 1.1. nich anzeigt ) aber wie schaff ich es, dass anstatt dem eben zum beispiel der 12.1. dransteht und die anderen dann dahinter in der richtigen reihenfolge kommen
 
Hi,

Ändere den Code im MC "events" folgendermaßen um (das Problem mit der Anzeige des ersten Eintrags wurde ebenfalls behoben; ich hatte vergessen, ihn einzublenden. ;)):
Code:
var events = new Array();

var maxw = bgnd._width - ct._x * 2;

var maxh = bgnd._height - ct._y * 2;

var loaded = 0;

var gap = 10;

var xm = new XML();

xm.ignoreWhite = true;

xm.onLoad = function() {
	parse(this.childNodes);
}

xm.load("events.xml");

function parse(obj) {
	for (var i=0; i<obj.length; i++) {
		events[i] = ct.attachMovie("event", "event" + i, i);
		events[i]._date = obj[i].attributes.date;
		events[i].realDate = getRealDate(events[i]._date); // Datumsobjekt generieren
		events[i].owner = this;
		var evt = obj[i].childNodes;
		for (var h=0; h<evt.length; h++) {
			events[i]["_" + evt[h].nodeName.toLowerCase()] = evt[h].firstChild.nodeValue;
		}
	}
	events.sort(byRealDate); // Events aufsteigend nach Datum sortieren
	spliceElapsed(); // Vergangene entfernen
}

function getRealDate(str) {
	var parts = str.split(".");
	var day = parseInt(parts[0], 10);
	var month = parseInt(parts[1], 10) - 1;
	var year = parseInt(parts[2], 10);
	var date = new Date(year, month, day);
	return date;
}

function byRealDate(o1, o2) {
	if (o1.realDate > o2.realDate) {
		return 1;
	} else if (o1.realDate < o2.realDate) {
		return -1;
	} else {
		return 0;
	}
}

function spliceElapsed() {
	var now = new Date();
	now.setHours(0);
	now.setMinutes(0);
	now.setSeconds(0);
	now.setMilliseconds(0);
	while (events[0].realDate.valueOf() < now) {
		events.splice(0, 1);
	}
}

function nextLoaded() {
	loaded ++;
	if (loaded >= events.length) reArrange();
}

function reArrange() {
	var prev = {x:0, y:Math.round(events[0]._height + gap)};
	events[0].go();
	for (var i=1; i<events.length; i++) {
		events[i]._x = prev.x;
		events[i]._y = prev.y;
		events[i].go();
		if (events[i]._y + events[i]._height > maxh) {
			prev.x += Math.round(events[i]._width + gap);
			prev.y = Math.round(events[i]._height + gap);
			events[i]._x = prev.x;
			events[i]._y = 0;
		} else {
			prev.y += Math.round(events[i]._height + gap);
		}
	}
}

Gruß
.
 
Vielen Vielen Dank, hab formatiert und konnte dedhalb shcon länger nich mehr reinschauen.

Wirklich top, löst FAST alle meine probleme, ich hab nur ein einziges, mit dem ich nicht zurechtkomme:

die XML datei, die ich bekommen habe beinhaltet html tags und diese werden beim einlesen einfach als neue punkte betrachtet, hab schon das ganze forum durchsucht und einiges ausprobiert, hat aber alles nicht geklappt bisher...

hier mal, wie das ganze in der xml aussieht:

HTML:
<events datum="14-02-2008">
  <text><font color="#ff0000">DESPERATE WIVES</font><br><b>DIE NACHT DER LADIES</b><br><font color="#ff0000">STUDIO:</font> ALLES WAS SPASS MACHT<br>MUSIK VON ABBA BIS ZAPPA</text>
  <flyervorschau>events/flyer/30-01-2008_k.jpg</flyervorschau>
  <flyer>events/flyer/30-01-2008_g.jpg</flyer>
 </event>
 
Hi,

mein Beispiel ist auch nicht dafür gedacht, mit Deiner XML-Datei zu arbeiten (aus Deinem Eingangsposting ging nicht hervor, dass diese Dateien nicht geändert werden können).

Dein Format lässt sich schon alleine deshalb nicht parsen, weil es nicht den xml-Konventionen entspricht (b-Tags werden z.B. nicht explizit geschlossen).

Wenn Du den gesamten Inhalt des <text>-Tags in CDATA-Bereiche packst (und damit vom Parsing ausschließt), solltest Du die Datei einlesen können.

Gruß
.
 
Zurück