Hola,
Cita:
|
Empezado por Román
Yo no creo que sea necesario actualizar nada. Por ello mencioné lo de valores por defecto. Cuando un usuario se conecte, al momento de deserializar, el objeto OpcionesUsuario tendrá más propiedades, pero éstas tendran valores por defecto. Cuando guardes las opciones ya guardarás todas ellas pues lo que habrás actualizado será el método Save del objeto.
|
Me pierdo un poco en el tema de la inicialización de las opciones. En lo que "he caído" es en que acaso no sea preciso serializar todo el objeto, sino que bastaría con hacerlo con el Array que guarde las opciones, propiamente. Esto es posible porque PHP no sólo serializa Objetos (ignoro ahora mismo si un Array lo es en PHP, pero, me parece que no), sino, variables de tipo "mixed"... y Arrays, por ejemplo.
Cita:
|
Empezado por Maeyanes
Ahora, como sería? Como usuario inicio sesión, la aplicación lee las opciones de la base de datos ("deserializa" el objeto), hago algún cambio de estas opciones, trabajo con la aplicación y finalizo la sesión, la aplicación aquí guarda las opciones (o puede guardarlas desde que aplico los cambios a estas opciones).
|
Exacto. Las opciones por defecto siempre serán las mismas hasta que el usuario las cambie... en el apartado de opciones de la aplicación. Efectivamente, tendrá que "aplicar los cambios", puesto que, por las características de una aplicación de este tipo, no es posible guardar las opciones "cuando el usuario salga de la aplicación", pongamos por caso.
Pero, de todos modos, los programas no tienen porqué guardar las opciones al salir, aunque ahora me doy cuenta de que esto lo he hecho alguna que otra vez... hombre, tal vez algunas opciones han de guardarse al salir, como la posición de un formulario en pantalla, pero, buena parte de las opciones se "tocarán" en el apartado de opciones, se editarán y se guardarán desde ahí cuando el usuario lo precise.
Cita:
|
Empezado por Maeyanes
Dado lo anterior, ¿en que momento se podría agregar una opción nueva? Esto lo pregunto por que no se exactamente como funciona la serialización de objetos en PHP. A lo que voy, si creo el objeto con un arreglo de X elementos, al "deserializar" este objeto conteniendo X - 1 elementos, ¿se pierde el elemento extra con el que inicialicé el arreglo o solo se sobreescriben los que ya existían?
|
Si serializas un objeto que contiene diez "propiedades" al deserializar será eso lo que recuperes. Ahora... cómo añades opciones... pues supongo que "todo a la vez". Esto es, supongamos un Plugin que necesitara añadir un par de opciones de usuario... cuando esto se llevara a cabo habría se añadirían las opciones al Array correspondiente, y, efectivamente, habría en ese mismo punto que actualizar la base de datos, es decir, para que en sucesivas ocasiones la nueva opción estuviera disponible.
No he podido resistir y he escrito este poco de código en un momento como aquél que dice (no lo he probado ni nada) y lo expongo aquí porque creo que puede dar alguna idea de cómo llevar a cabo el tema, haciéndolo como venimos diciendo:
Código PHP:
<?php
class Opciones
{
var $idUsuario = 0;
var $opciones = null;
function Opciones($idUsuario)
{
$this->opciones = array();
$this->idUsuario = $idUsuario;
$this->Cargar();
}
/**
* Cargamos las opciones del usuario.
*/
function Cargar()
{
global $bdatos;
$consultaSql = "SELECT opcion_contenido FROM opciones
WHERE opcion_id_usuario = '{$this->idUsuario}' LIMIT 1;";
$this->opciones = unserialize($bdatos->Variable($consultaSql));
}
/**
* Guardamos las opciones del usuario.
*/
function Guardar()
{
global $bdatos;
$contenido = serialize($this->opciones);
$consultaSQL = "UPDATE opciones SET opcion_contenido = '$contenido'
WHERE opcion_id_usuario = '{$this->idUsuario}' LIMIT 1;";
}
/**
* Averiguamos si existe una opción de usuario en concreto.
*
* @param string $clave
* @return boolean
*/
function Existe($clave)
{
return array_key_exists($clave, $this->opciones);
}
/**
* Leemos el valor de una opción. Si esta no existe retornamos el valor
* por defecto que se especifique en el parámetro correspondiente.
*
* Nota: esos "mixed", ¿qué pasa con ellos?
*
* @param string $clave
* @param mixed $valorPorDefecto
* @return mixed
*/
function Leer($clave, $valorPorDefecto = '')
{
if(!isset($this->opciones[strtolower($clave)]))
return $valorPorDefecto;
else
return $this->opciones[strtolower($clave)];
}
/**
* Escribimos el valor de una opción del usuario.
*
* Nota: Otra vez el "mixed" sale a relucir...
*
* @param string $clave
* @param mixed $valor
*/
function Escribir($clave, $valor)
{
$this->opciones[strtolower($clave)] = $valor;
$this->Actualizar();
}
/**
* Actualiza las opciones del usuario.
*/
function Actualizar()
{
$this->Guardar();
}
} // class Opciones
?>
Por supuesto el código anterior no está ni probado, ni "concluído" ni nada de nada... pero puede dar alguna idea, espero. En caso de dudas aquí estamos. ¡Y otra vez muchas gracias a todos muchachos!
