Ver Mensaje Individual
  #24  
Antiguo 04-09-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.141
Reputación: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ea. Pues ya es posible que este usuario puñetero (que está tardando en decirme algo bonito) vea siempre la descripción de los enlaces de Loturak. Ya está añadida esa opción,... y creo que no sería complejo añadir otras, pero, me temo que no tan "sencillamente" como esta que digo, a lo menos no en todos los casos. Se han dejado no pocos cabos sueltos.

Sin embargo, puede que lo que ha salido de este Hilo sea la base de la que partir. Es decir, como digo, parece que la cosa marcha bien. Piénsese que los usuarios de Loturak no notarán cambio alguno, esto es, los enlaces se verán como hasta ahora, porque la opción por defecto es no mostrar la descripción de estos de primeras, pero, ya pueden hacer que esto no sea así.

Por ejemplo, me llama la atención que Loturak cuenta con 85 usuarios, pero, la tabla de opciones cuenta con un registro: mis propias opciones. Sin embargo, como digo, no tendré que "rellenar" la tabla de opciones para el resto de usuarios, puesto que, siempre se tomará la medida "por defecto" en caso de que las opciones de un usuario no existan.

¿Y cuando existirán? Evidentemente, cuando el usuario eche un vistazo a sus opciones (en el apartado correspondiente) y decida "aplicar los cambios".

La clase que estoy utilizando ahora mismo es tal que así, empero, he subido la misma al Servidor para que el puñetero usuario que he mencionado (y quien quiera) pueda ver cómo queda el asunto. Evidentemente el código fuente que se ha implicado en todo esto (sorprendentemente sencillo) hay que repasarlo mejor.

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;";    
    
$contenido $bdatos->Variable($consultaSql);
    
    if(
$contenido)
    {
      
$this->opciones unserialize($bdatos->Variable($consultaSql));      
    }
      
    return;
  }

  
/**
   * Guardamos las opciones del usuario.
   */
  
function Guardar()
  {
    global 
$bdatos;
    
$contenido serialize($this->opciones);
    
    
$consultaSQL "SELECT opcion_contenido FROM opciones 
     WHERE opcion_id_usuario = '
{$this->idUsuario}' LIMIT 1;";    
    
$resultado $bdatos->Resultados($consultaSQL); 
    
    if(
$resultado)
    {
      
$consultaSQL "UPDATE opciones SET opcion_contenido = '$contenido'
       WHERE opcion_id_usuario = '
{$this->idUsuario}' LIMIT 1;";
       
$bdatos->Resultados($consultaSQL);       
    }
    else 
    {
      
$contenido $bdatos->Escapar(serialize($this->opciones));
      
$consultaSQL "INSERT INTO opciones (opcion_id_usuario,opcion_contenido)
       VALUES('
{$this->idUsuario}', '$contenido');";
      
$bdatos->Resultados($consultaSQL);             
    }
    
    return;    
  }
  
  
/**
   * 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(!
$this->Existe($clave))
      return 
$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;    
    return;    
  }  
  
  
/**
   * Actualiza las opciones del usuario.
   */
  
function Actualizar()
  {
    
$this->Guardar();
    return;    
  }
  
// class Opciones

?>
Como he dicho antes, esta clase se instancia en un objeto cuya referencia se guarda en una variable privada de la clase "Usuarios" conque contamos en Loturak. ¡Muchas gracias a todos otra vez, de no haber sido por vosotros seguramente no hubiera hecho nada y tendría a Ro... al puñetero diciéndome que qué pasa, que si no sé programar o qué!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita