XML importieren mit ActionScript 3

Zuerst benötigt man die XML-Datei, deren Pfad wir in einer Variable speichern:

var xml_file:String = "http://www.test.com/test.xml";

Als nächstes erstellen wir das URLLoader-Objekt, um das XML zu laden:

var xml_loader:URLLoader = new URLLoader();
xml_loader.load(new URLRequest(xml_file));

Jetzt legen wir 2 leere Arrays an, um die Attribute der XML-Elemente zu speichern:

var xml_name:Array = new Array();
var xml_typ:Array = new Array();

Damit das XML erst dann verarbeitet wird, wenn die Datei vollständig geladen ist, müssen wir mit Hilfe eines eventListeners das entsprechende Ereignis (COMPLETE) abfangen:

//Nach Ende des Ladeprozesses (eventListener lauscht darauf) wird xml verarbeitet
xml_loader.addEventListener(Event.COMPLETE,parseXML);

Wenn COMPLETE eingetreten ist soll also parseXML ausgeführt werden. Im Beispiel gehen wir von einer XML-Datei mit folgenden Elementen aus:

<wurzel name="wurzelX" type="wurzelX" />

function parseXML(evt:Event)
{
	var xml_file:XML = new XML(evt.target.data); //XML-daten einlesen
	xml_file.ignoreWhitespace = true;

	for (var k:int = 0;k < xml_file.wurzel.length();k++)
	{
		xml_name.push(xml_file.wurzel[k].@name);
		xml_typ.push(xml_file.wurzel[k].@typ);
	}
}

Formular Eingaben mit Javascript prüfen

Angenommen man hat ein einfaches Formular mit Name, Strasse und Mailadresse. Dann kann man mit folgendem Script die Eingabe prüfen, so dass das Formular erst dann gesendet wird, wenn die Eingaben korrekt sind:

function checkInput()
{
	var fehler = "";
	var TF = document.forms.testformular;
	var mail = TF.email.value;

	//prüfen ob Name leer ist
	if(TF.name.value == "")
	{
		fehler += "Sie muessen einen Firmennamen angeben";
	}

	//prüfen ob strasse leer ist
	if(TF.strasse.value == "")
	{
		fehler += "\nSie muessen die Strasse angeben";
	}

	//prüfen ob Mail leer ist
	if(f.email.value == "")
	{
		fehler += "\nSie muessen eine E-Mail Adresse angeben";
	}

	//prüfen ob Mail ein @ enthält
	if(mail.indexOf("@") == -1||mail.indexOf(".") == -1 )
	{
		fehler += "\nSie muessen eine gueltige E-Mail Adresse angeben";
	}

	if (fehler != "")
	{
		var fehlertext = "Folgende Fehler sind aufgetreten:\n";
		fehlertext += fehler
		alert(fehlertext)
		return false
	}
	
return true
}

Das ganze bindet man dann folgendermaßen ins Formular ein:

<form name="testformular" onSubmit="return checkInput()" method="POST" action="test.php">

Lösungsansatz: Problem Höhe & Breite bei Rotation in Flash

Wenn man einen MovieClip rotiert, schnellt man schnell fest, dass, liest man nun seine Höhe aus, diese nicht mehr diesselbe ist, wie vor der Rotation. Flash liest nun hier die Höhe der Diagonale aus. Bei einem rechteckigen /dreieckigen MovielClip kann man sich hier zur Umrechnung des Satzes des Pythagoras bedienen, um aus der Höhe der Diagonale wieder die richtigen Längen/Höhenangabe zu berechnen. Es sei hier lediglich auf Wikipedia verwiesen:

http://de.wikipedia.org/wiki/Satz_des_Pythagoras

Farbe eines Movie Clips mit AS3 ändern

Wenn man die Farbe eines bestehenden MovieClips mit Actionscript 3 ändern möchte, geht man so vor:

Folgenden MovieClip wollen wir ändern:

mc_color

Hierzu erstellen wir ein ColorTransform-Objekt, welches die Farbinfo unseres Clips enthält:

var color_trans:ColorTransform = mc_color.transform.colorTransform;

Dann geben wir den neuen Farbwert an:

color_trans.color=0xff6600;

Und wenden ihn auf den MovieClip an:

mc_color.transform.colorTransform = color_trans;

MovieClip mittig ausrichten AS3

Wenn man einen MovieClip mittig ausrichten möchte, so benötigt man als erstes die Breite & Höhe des Containers in dem sich der MovieClip befindet, so zum Beispiel ein Clip namens ‚mc_container‘, sofern der Clip auf der Hauptzeitleiste liegt. Der Clip der mittig ausgerichtet werden soll, heißt im Beispiel „mc_mitte“. So wird er ausgerichtet:

Von der Breite/Höhe des umgebenden Containers wird die Breite/Höhe des Clips abgezogen so, dass man die Breite/Höhe des überbleibenden Randes hat, der nun noch auf beide Seite aufgeteilt werden muss, also durch 2 geteilt werden muss:

mc_mitte.x = mc_container.width - mc_mitte.width / 2
mc_mitte.y = mc_container.height - mc_mitte.height/ 2

Mit PHP XML – Ausgabe für Actionscript 3 erzeugen

Will man dynamische Daten in Flash mittels AS3 verarbeiten, so bietet sich der XML-Import an. PHP bietet einfachste Möglichkeiten, eine XML-Ausgabe zu erzeugen. Folgendermaßen erzeugen Sie eine XML-Datei mittels PHP für die Verarbeitung mit Actionscript 3.

Die Datei selbst benennen sie z.B.mit xml_output.php. Nun müssen sie den Dateityp mittels folgender Anweisung festlegen:

header("Content-Type: text/xml");

Nun geben sie bereits die ersten XML-Elemente aus. Ob sie die Daten aus einer Datenbank holen oder aus irgendeiner anderen Quelle beziehen, sei egal. Im vorliegenden Falle werden die Daten aus einer MYSQL-DB geholt und in einer Schleife verarbeitet:

echo "<?xml version='1.0' encoding='ISO-8859-1' ?>". "\n";
echo "<wurzel>";

while ($row = mysql_fetch_assoc($result_of_db_query))
{
	echo "<element>".$row['elemente']."</element>";
}

echo "</wurzel>";

Das soll es aus PHP-Sicht gewesen sein. Als zu importierende Datei steht nun die xml_output.php für Flash zur Verfügung.

AJAX – Request erstellen und testen

Mit folgendem Code kann man einen XMLHTTP-Request erstellen, der auch im alten Internet Explorer greift:

//XMLHTTPREQUEST
function getRequest()
{
	if (window.XMLHttpRequest)
	{
		//Code für Firefox – XMLHttpRequest ist nicht als ActiveX eingebunden
		return new XMLHttpRequest();
	}
	else
	{
		if(window.ActiveXObject)
		{
			//XMLHTTP als ActiveX im Internet Explorer ab 6
			return new ActiveXObject("Msxml2.XMLHTTP");
		}
		else
		{
			return null;
		}
	}
}

Contenido Navigation als XML exportieren

Um die Contenido-Navigation als XML auszugeben, wird zuerst eine Klasse xmlnav angelegt und mit einer Datenbankverbindungsfunktion versehen, weils für das Beispiel einfach praktisch ist:

class xmlnav
{
	function connect()
	{
		include "config.inc.php"; //enthält nur Datenbanklogin
		$this->dbuser = $DBUSER;
		$this->dbpass = $DBPASS;
		$this->dbhost = $DBHOST;
		$this->dbname = $DBNAME;

		$dbh = mysql_pconnect($this->dbhost,$this->dbuser,$this->dbpass);

		if(!is_resource($dbh))
		{
			echo "Es gab einen schwerwiegenden Fehler. Bitte versuchen Sie es sp&auml;ter wieder";
		}
		else
		{
			mysql_select_db($this->dbname,$dbh);
			return $dbh;
		}
	}
}

Danach braucht es Funktionen die die Tabelle mit der Navi auslesen und daraus XML erstellen:

/*
Funktion zur Rückgabe der
URL-Namen aus der Tabelle con_art_lang
Feld = urlname;
*/


function get_urlname()
{
	$arrUrlname = array(); //Array zum Auffangen der urlnamen

	$query = "SELECT * FROM con_art_lang";
	$result = mysql_query($query,$this->connect());

	while($row = mysql_fetch_assoc($result))
	{
		array_push($arrUrlname,$row["urlname"]);
	}

	return $arrUrlname; //Rückgabe des Arrays mit den urlnamen
}


/*
Funktion zur Erstellung des xml-Files mit der
URL-Namen-Navigation.
*/


function create_xml_from_urlname()
{
	$arrUrlnameFromFunction = $this->get_urlname(); //Array zum Speichern der urlnamen aus der Rückgabe der o.s. Funktion

	echo "<xmlnav>";

	foreach($arrUrlnameFromFunction as $value)
	{
		//Kleinschreibung
		$value = strtolower($value);

		//Startseite erkennen
		if(eregi("artseite",$value))
		{
			$value = "/";
		}
		
		echo "<nav name='$value' />";
	}

	echo "</xmlnav>";

}

Die ganze Klasse sieht dann so aus:


/*
* Created on 29.01.2007
*
* To change the template for this generated file go to
* Window – Preferences – PHPeclipse – PHP – Code Templates
*/


class xmlnav
{
	function connect()
	{
		include "config.inc.php";
		$this->dbuser = $DBUSER;
		$this->dbpass = $DBPASS;
		$this->dbhost = $DBHOST;
		$this->dbname = $DBNAME;

		$dbh = mysql_pconnect($this->dbhost,$this->dbuser,$this->dbpass);

		if(!is_resource($dbh))
		{
			echo "Es gab einen schwerwiegenden Fehler. Bitte versuchen Sie es später wieder";
		}
		else
		{
			mysql_select_db($this->dbname,$dbh);
			return $dbh;
		}
	}

	
	/*
	Funktion zur Rückgabe der
	URL-Namen aus der Tabelle con_art_lang
	Feld = urlname;
	*/
	

	function get_urlname()
	{
		$arrUrlname = array(); //Array zum Auffangen der urlnamen

		$query = "SELECT * FROM con_art_lang";
		$result = mysql_query($query,$this->connect());

		while($row = mysql_fetch_assoc($result))
		{
			array_push($arrUrlname,$row["urlname"]);
		}

		return $arrUrlname; //Rückgabe des Arrays mit den urlnamen
	}

	
	/*
	Funktion zur Erstellung des xml-Files mit der
	URL-Namen-Navigation.
	*/
	

	function create_xml_from_urlname()
	{
		$arrUrlnameFromFunction = $this->get_urlname(); //Array zum Speichern der urlnamen aus der Rückgabe der o.s. Funktion
		
		echo "<xmlnav>";

		foreach($arrUrlnameFromFunction as $value)
		{
			//Kleinschreibung
			$value = strtolower($value);

			//Startseite erkennen
			if(eregi(‚artseite‘,$value))
			{
				$value = "/";
			}
			
			echo "<nav name='$value' />";
		}

	echo "</xmlnav>";

	}
}

Jetzt beötigen wir lediglich noch eine PHP-Datei, welche die Klasse includiert und PHP zurückgibt:

header("Content-Type: text/xml");
echo "<?xml version='1.0' ?>". "\n";
include "class.xmlnav.php";
$xmlnav = new xmlnav();

$xmlnav -> create_xml_from_urlname();

Diese Datei kann nun als XML-Quelle verwendet werden.

Datenbankverbindung aufbauen

Folgende Funktion liefert ein Handle auf eine Datenbankverbindung zurück:

function connect()
{
	$DB_HOST = "hostname";
	$DB_NAME = "datenbankname";
	$DB_USER = "dbuser";
	$DB_PASS = "pass";

	//Datenbank -> Verbindung aufbauen
	$link_id = mysql_connect($DB_HOST,$DB_USER,$DB_PASS);
	if(!mysql_select_db($DB_NAME,$link_id))
	{
		echo "Connection Error";
	}
	else
	{
		return $link_id;
	}
}