En muchas ocasiones cuando se nos encarga una aplicación dinámica en flash siempre hay un problema al momento de que el cliente cambie los valores de configuración de dicha aplicación mucho mas cuando este ultimo no quiere pagar por una interfaz de configuración =).
Para nosotros como desarrolladores no es nada del otro mundo poder cambiar los valores de un XML pero esto cambia cuando el cliente final sera el encargado de modificar dicho archivo. Cuando decimos XML se quedan con cara de ‘ehhh? Y eso con que se come’, repito si el cliente no quiere pagar por una interfaz de administración y quiere poder cambiar algunos valores de la aplicación lo mejor es que se le de un archivo de configuración en texto plano.
Ustedes pensaran que para ello podemos usar loadVars con las variables declaradas, el problema, de nuevo desde el punto de vista del cliente final es complicado ya que este debe tener un formato y ademas de que no podemos poner comentarios en el.
Jugando por ahí con Python me encontré con el modulo Config que carga y parsea un archivo de configuración estándar. A que me refiero con archivo de configuración estándar?
El típico archivo que utilizan los programas en linux, por ejemplo apache. Si nunca han visto este tipo de archivos así es como se ve.
###########################################
### This is a sample of a Config file config.txt
### Author: Enrique Chavez aka Tmeister
### Site: http:www.tmeister.dev
### Date: Oct, 14 2006
###########################################
###########################################
### The images path
###########################################
pathImages path/to/folder/
###########################################
### The gallery’s name
###########################################
GalleryName this is my test gallery
###########################################
### Your Firstname
###########################################
firstname = Enrique
###########################################
###Your Lastname
###########################################
lastname Chavez
###########################################
###Your Nick =)
###########################################
nick Tmeister
# End File
Bueno, He creado una sencilla clase que se encarga de parsear este tipo de archivos pudiendo acceder a los valores de las variables de una forma simple.
Tomando como ejemplo el archivo de configuración anterior, lo único que tenemos que hacer en nuestra clase o Fla es algo así..
[as]
import org.utils.Config
import mx.utils.Delegate
class myApp extends MovieClip
{
private var config : Config;
function myApp ()
{
}
function onLoad ()
{
config = new Config (“config.txt”);
config.addEventListener (“fault”, Delegate.create (this, onFault));
config.addEventListener (“complete”, Delegate.create (this, onComplete));
}
private function onComplete (obj : Object)
{
trace (config.read (“pathImages”))
for (var i in config.list)
{
trace (‘key: ‘ + i + ‘, value: ‘ + config.list [i]);
}
}
private function onFault (obj : Object)
{
for (var i in obj) trace (‘key: ‘ + i + ‘, value: ‘ + obj [i]);
}
}
[/as]
Con esto obtenemos algo así:
path/to/folder/
key: nick, value: Tmeister
key: lastname, value: Chavez
key: firstname, value: Enrique
key: GalleryName, value: this is my test gallery
key: pathImages, value: path/to/folder/
Como pueden ver al instaciar la clase se le pasa como parámetro el path del archivo de configuración. Esta clase cuenta con 2 dispatchs, fault y complete los nombres son mas que descriptivos cierto? 🙂
Por ultimo hay 2 métodos
read que regresa el valor de la variable que se pasa como parámetro y
list que regresa un objeto con todas las variables del archivo de configuración
Por ultimo la clase Config
[as]
import mx.events.EventDispatcher;
import mx.utils.Delegate
[Event(“complete”)]
[Event(“fault”)]
class org.utils.Config
{
private var cfgFile : String
private var cfg_lv : LoadVars
public var addEventListener : Function
private var dispatchEvent : Function;
private var token : Object
public var configList : Object
public function Config (getFile : String)
{
EventDispatcher.initialize (this);
cfgFile = getFile;
loadConfig ();
}
private function loadConfig ()
{
cfg_lv = new LoadVars ();
cfg_lv.load (cfgFile);
cfg_lv.onLoad = Delegate.create (this, parseCfg);
}
private function parseCfg (ok)
{
if ( ! ok)
{
dispatchEvent (
{
type : “fault”, msg : “Cant load file ” + cfgFile
});
return
}
var data : String = unescape (cfg_lv.toString ())
data = data.split (“=&onLoad=[type Function]”).join (“”)
data = data.split (“&onLoad=[type Function]”).join (“”)
var lines : Array = data.split (“n”)
var count : Number = 0;
token = {
};
configList = {
}
while (lines [count])
{
var actualLine = lines [count ++]
var firstCharacter : String = escape (actualLine.substr (0, 1));
if (firstCharacter != “%23” && firstCharacter != “%0D” && firstCharacter != ” “)
{
var finalLine = actualLine.split (“r”).join (“”)
var values : Array = finalLine.split (” “);
var finalValue : String = “”;
for (var i : Number = 1; i < values.length; i ++)
{
finalValue += values [i] + " ";
}
finalValue = finalValue.substr (0, - 1)
token [values [0]] = finalValue
configList [values [0]] = finalValue
}
}
dispatchEvent (
{
type : "complete"
});
}
public function read (variable : String) : String
{
return token [variable]
}
public function get list () : Object
{
return configList;
}
}
[/as]
Los archivos Fuente. http://tmeister.dev/archivos/config.zip
Estoy totalmente convencido que la mejor manera para manejar nuestras configuraciones en Flash sigue y seguirá siendo un archivo XML, pero para aquellos necesiten un archivo de texto plano que sirva como archivo de configuración simple con comentarios para los clientes necios jeje esta clase puede ser de utilidad.
Saludos!!
Leave a Reply