Otra vez yo... Ahora el tema es que intento cargar datos de una DB con PHP, y luego transformarlos a XML para poder cargarlos en un componente Tree...
El codigo es asi:
El (enorme) servicio AMFPHP
ArmarXML.php
Código :
<?php
include "C:/offlinedocs/db_vars.php";
class ArmarXml
{
function ArmarXml(){
$this->methodTable = array(
"baseFunction" => array(
"description" => "Carga los EPICCOS en un array",
"access" => "remote",
"arguments" => array()
),
"GenerarXML" => array(
"description" => "Genera XML en base a la estructura ingresada",
"access" => "remote",
"arguments" => array(
"estructura")//Estructura de la DB...
),
"Detallar" => array(
"description" => "Escribe el contenido XML en el archivo...",
"access" => "remote",
"arguments" => array(
"estructura")//Estructura de la DB...
),
"TomarNombres" => array(
"description" => "Arma un array con los nombres correspondientes a las Id's del array ingresado'",
"access" => "remote",
"arguments" => array(
"tabla",//Tabla en la que se quiere buscar...
"id_s")//Estructura de la DB...
),
"TomarPisos" => array(
"description" => "Carga los pisos en un array",
"access" => "remote",
"arguments" => array()
),
"TomarEpiccos" => array(
"description" => "Carga los EPICCOS en un array",
"access" => "remote",
"arguments" => array(
"Id_piso")//Id_piso de los EPICCOS a cargar...
),
"TomarRooms" => array(
"description" => "Carga las Habitaciones en un array",
"access" => "remote",
"arguments" => array(
"Id_epícco")//Id_epiccos de las Habitaciones a cargar...
),
"TomarSector" => array(
"description" => "Carga los Sectores en un array",
"access" => "remote",
"arguments" => array(
"Id_room")//Id_room de los Sectores a cargar...
),
"TomarDevice" => array(
"description" => "Carga los Dispositivos en un array",
"access" => "remote",
"arguments" => array(
"Id_sector")//Id_sector de los Dispositivos a cargar...
)
);
}
//Funcion a la que recurre Flash
function baseFunction(){
mysql_select_db($db_name,$conn);
$respuesta = $pisos = TomarPisos();
$nombres = TomarNombres($pisos, 1);
//Voy tomando piso por piso los valores de las demas tablas...
for($i=0; $i<= end($pisos) ; $i++){
$respuesta[$i] = $epiccos = TomarEpiccos($pisos[$i]);
$nombres[$i] = TomarNombres($epiccos, 2);
for($j == 0; $j <= end($epiccos); $j++){
$respuesta[$i][$j] = $habitaciones = TomarRooms($epiccos[$j]);
$nombres[$i][$j] = TomarNombres($habitaciones, 3);
for($k == 0; $k <= end($habitaciones); $k++){
$respuesta[$i][$j][$k] = $sectores = TomarSector($habitaciones[$k]
);
$nombres[$i][$j][$k] = TomarNombres($sectores, 4);
for($l == 0; $l <= end($sectores); $l++){
$respuesta[$i][$j][$k][$l] = $devices = TomarDevice($sectores[$l]);
$nombres[$i][$j][$k][$l] = TomarNombres($devices, 5);
//Tomo la cantidad de posiciones de $devices
}
}
}
}
session_start();
$_SESSION["estructura_db"] = $respuesta;
$_SESSION["estructura_names"] = $nombres;
$xml = GenerarXML($nombres);
if(Detallar($xml)){
$mensaje = 1;
}
else{
$mensaje = 0;
}
mysql_close($conn);
return $mensaje;
}
//Funcion que genera la variable con el XML...
//Se ingresa la estructura
function GenerarXML($estructura){
$respuesta = xmlrpc_encode($estructura);
return $respuesta;
}
//Funcion que escribe el XML en el documento a leer...
//Se ingresa la estructura convertida a XML...
function Detallar($estructura){
if(file_put_content($XML_file, $estructura)){
$respuesta = 1;
}
else{
$respuesta = 0;
}
return $respuesta;
}
//Funcion que toma los nombres respectivos de cada Id del array ingresado...
//Se ingresa el array con las Id's y un identificador de tabla...'
function TomarNombres($id_s, $tabla){
switch($tabla){
case 1:
$campo = "piso";
$tabla = "pisos";
$Id_tabla = "Id_piso";
break;
case 2:
$campo = "ip_epicco";
$tabla = "epiccos";
$Id_tabla = "Id_epicco";
break;
case 3:
$campo = "habitacion";
$tabla = "habitacion";
$Id_tabla = "Id_habitacion";
break;
case 4:
$campo = "sector";
$tabla = "sector";
$Id_tabla = "Id_sector";
break;
case 5:
$campo = "dispositivo";
$tabla = "dispositivos";
$Id_tabla = "Id_didpositivos";
break;
}
for($z = 0; z <= end($id_s); $z++){
$ask = "SELECT '$campo' FROM '$tabla' WHERE '$Id_tabla' = '$id_s[$z]'";
$struct_nombres[$z] = mysql_query($ask);
}
return $struct_nombres;
}
//Funcion que toma las Id's de los pisos...'
function TomarPisos(){
$ask = "SELECT MAX(Id_pisos) FROM pisos";
$respuesta = mysql_fetch_array($ask);
return $respuesta;
}
//Funcion que toma los Id_epicco para el Id_piso indicado...
//Se ingresa el Id_piso del que se quiere obtener los Id_epicco...
function TomarEpiccos($Id_piso){
$ask = "SELECT Id_epiccos FROM epiccos WHERE piso = '$Id_piso'";
$respuesta = mysql_fetch_array($ask);
return $respuesta;
}
//Funcion que toma los Ids de habitacion para el epicco ingresado...
//Se ingresa el Id_epicco del que se quiere obtener los Id_piso...
function TomarRooms($Id_epicco){
$ask = "SELECT Id_habitacion FROM habitaciones WHERE epicco = '$Id_epicco'";
$respuesta = mysql_fetch_array($ask);
return $respuesta;
}
//Funcion que toma los Ids de sector para la habitacion ingresada...
//Se ingresa el Id_habitacion del que se quiere obtener los Id_habitacion...
function TomarSector($Id_room){
$ask = "SELECT Id_sector FROM sectores WHERE habitacion = '$Id_room'";
$respuesta = mysql_fetch_array($ask);
return $respuesta;
}
//Funcion que toma los Ids de dispositivo para el sector ingresado...
//Se ingresa el Id_sector del que se quiere obtener los Id_dispositivo...
function TomarDevice($Id_sector){
$ask = "SELECT Id_device FROM dispositivos WHERE sector = '$Id_sector'";
$respuesta = mysql_fetch_array($ask);
return $respuesta;
}
}
?>
Y el AS de mi pelicula...
Código :
//Importo las librerias de Remoting
import mx.remoting.NetServices;
import mx.remoting.Connection;
//Creo el objeto que va a recibir la respuesta del servicio AMFPHP
GenerarXML = new Object();
GenerarXML.baseFunction_Result = function(respuesta){
trace("aca estoy");
if(respuesta){
cargarXML();
}
else{
trace("ERROR!!");
}
}
GenerarXML.onStatus = function(respuesta){
trace("El error es: " + respuesta);
}
//Defino la coneccion con AMFPHP
mx.remoting.debug.NetDebug.initialize();
NetServices.setDefaultGatewayUrl("http://localhost/flashservices/gateway.php");
conn = NetServices.createGatewayConnection();
serv = conn.getService("ArmarXml", GenerarXML);
serv.baseFunction();
//Funcion que carga el XML
function cargarXML(){
trace("Hola!");
//Cargamos el XML
xmlTree = new XML();
xmlTree.ignoreWhite = true;
xmlTree.onLoad = function (success){
if (success){
llenarTree();
}
else{
trace("No se pudo cargar el XML");
}
}
xmlTree.load("localhost/XML/database.xml");
};
function llenarTree(){
//Atacheamos el componente
attachMovie("Tree", "miArbol", 1);
//Propiedades
miArbol.setSize(200, 300);
miArbol.setStyle("openEasing", mx.transitions.easing.Back.easeOut);
//Llenamos el menu
miArbol.dataProvider = xmlTree;
//Eventos
miArbol.addEventListener("change", alSeleccionar);
}
alSeleccionar = new Object();
alSeleccionar.change = function(evento) {
var seleccion = evento.target.selectedNode;
//Si es una carpeta...
if (miArbol.getIsBranch(seleccion)){
//La cerramos si esta abierta
if (miArbol.getIsOpen(seleccion)){
miArbol.setIsOpen(seleccion, false, true);
}
//La abrimos si esta cerrada
else{
miArbol.setIsOpen(seleccion, true, true);
}
}
//Si es un vínculo...
else{
getURL(seleccion.attributes.dirurl, "_blank");
}
}
stop();
La verdad no se que pueda estar mal, porque lo vengo revisando hace un dia y medio... espero que alguien me sepa decir de algun error...
Muchas gracias desde ya!!
Pablo
