¿Dónde o como guardar las configuraciones de las webs (foros)?

Iniciado por ‭lipman, 16 Mayo 2009, 20:07 PM

0 Miembros y 1 Visitante están viendo este tema.

‭lipman

Quiero saber alguna forma de guardar configuraciones, por ejemplo, de un foro, de una web en general.

Por ejemplo, imaginemos que desde un panel de control puedo controlar como quiero que se ordene una lista de contactos (nombre, apellido, edad)
Entonces, ¿donde o como guardo la manera de ordenarlo?

En principio se me viene a la cabeza usar bases de datos pero si hago esto, para después ordenar la lista tendria que usar un switch de la siguiente forma

Código (php) [Seleccionar]

switch ($formaDeOrdenar) {
    case "Nombre":
        //Ordenar por nombre
        break;
    case "Apellidos":
        //Ordenar por apellidos
        break;
    case "Edad":
        //Ordenar por edad
        break;
    default:
        //otros..

}


Creo que esta manera me ocuparía demasiado código, si por ejemplo tengo muchas posibilidades diferentes, o incluso si tengo que guardar muchas configuraciones diferentes.

Otro método que me habia planteado era el de, directamente al elegir la configuración desde el panel de control, editar un archivo de php añadiendo y eliminando código, pero creo que esta manera es más pesada.

¿Alguna idea?

Anibal784

No se, lo que se me ocurre ahora a mi sería hacer un archivo de configuración bastante sencillo:

TableName = contactos
OrderType = nombre asc

TableName = telefonos
OrderType = celulares desc

o algo así, donde TableName sería el nombre de la tabla y OrderType sería por qué campo de la tabla ordenar y si ascendente o descendente. Luego lo parsearía con algo para que me quedara dentro de un arreglo asociativo, tipo:
Código (php) [Seleccionar]

$config = open_config("archivo_configuracion.conf");

// Voy a ordenar la tabla contacto.
$sql = 'SELECT * FROM agenda ORDER BY '.$config['contactos']['orderType'];

// ejecuto la consulta.

Ahí estaría ordenando la salida de la consulta a la tabla contactos por nombre según mi archivo de configuración. Igual, puede ser de cualquier forma que quieras el archivo y la forma de obtener los datos.
Nota la consulta SQL puede estar mal.
El que llega sin que lo llamen, se va sin que lo echen.

Citar
Vos no la votaste por eso la tenes adentro.
Lo fino no es lo tuyo, y a mi me chupa un huevo, soy argentino y no peronista, y eso es lo que realmente te molesta.

‭lipman

No habia pensado en eso, está muy bien pero me sigue generando el mismo problema:

Voy a ejemplificarlo lo máximo que pueda.

En el index.php es donde se va a generar esa lista (ordenada). Desde panel.php eligiré la manera de ordenar esa lista (con radiobuttons por ejemplo)

Panel de control:
-Ordenar lista:
Nombre   []
Apellidos []
Edad       []

Cuando en el panel seleccione algo, lo guarda y siempre que me vaya al index.php lo ordenará de la manera que yo lo haya guardado. De la misma forma, lo puedo volver a cambiar cuando quiera.

La idea es esa, ordenar una lista, y la forma de ordenar la puedo cambiar a mi antojo pero se tiene que guardar (ahi el problemilla).



Otra cosilla, por ejemplo, en los foros se guardan configuraciones del tipo boleano por ejemplo "Permitir que se ejecute codigo HTML" (no se si esta me lo acabo de inventar xD) y aparece un checkbutton en donde elijo si quiero permitirlo o no.

Esta configuración supongo que se guardará de algún modo, pero a la hora de escribir los posts supongo que no hará lo siguiente:

si (checkbutton = true) entonces
escribir el post con HTML
sino
escribir post sin HTML

La cosa es, dudo mucho que en todas las configuraciones de tipo boleano, haya en cada una una estructura if para comprobarlo, porque sino... pff

¿Alguna idea?

Spider-Net

Los foros suelen guardar toda esa información en una base de datos. Tienen una tabla para la configuración con distintos campos en tu ejemplo tipo ENUM, si o no, o INTEGER 0 ó 1. Así se suelen manejar los booleanos.

Lo más práctico que puedes hacer desde luego es hacer una base de datos y la confiiguración la guardas en una misma tabla de la base de datos. Creo que es lo mejor.

‭lipman

Pero si lo pongo de tipo boleano en una base de datos, como puedo obtener esa configuración? a base de ifs? Por ejemplo (es bastante estúpido pero servirá xD)

Esta es la base de datos y sus valores:

Bold    0
Italic   0
Under  0

Tengo un texto en la página principal: "Hola mundo"

Desde el panel de control tengo 3 checkbox:

Bold    []
Italic   []
Under  []

Tras marcar los que yo quiera y pulsar un botón, irá a la base de datos y pondrá si quiero activarlo o no (1)

Entonces, imaginemos que he marcado el de bold y el de under.

¿Cómo hago para que el texto de la página principal me aparezca en negrita y subrayado? No se me ocurre como, porque si hago esto:

si (bold = 1) entonces
texto = <b>$texto</b>
sino si (italic = 1) entonces
texto = <i>$texto</i>
sino si (under = 1) entonces
texto = <u>$texto</u>
sino
texto = $texto

Pero claro, esto no me deja la posibilidad de hacer combinaciones. Y usando el switch tengo el mismo problema >.<

Alguna idea?

Spider-Net

#5
Claro, tal y como has dicho,tu accedes a la base de datos y compruebas el valor y según ese valor aplicas la etiqueta html que sea.

Si lo haces con un if y elseif no va, pero hazlo con un if debajo de otro, así si que funcionaría, porque lo harías de la siguiente forma:

$texto contiene el texto vale? ahora entras en una serie de if's

if(bold==1){
$texto="<b>".$texto."</b>";
}

if(under==1){
$texto="<u>".$texto."</u>";
}

Eso funcionaría perfectamente el resultado sería un texto negrita y subrayado. Por qué?

Pues si hacemos un ejemplo por ejemplo:

$texto="hola que tal";

Entramos a los if's y están ambos activados así que en el bold la cadena $texto contiene:
"<b>hola que tal</b>";

después entra en el siguiente if y está activado también, pues sería:
"<u><b>hola que tal</b></u>";

Resultado?

Hola que tal


Por lo tanto está bien aplicada esa lógica y debería de funcionar bien, pruebalo y ya nos cuentas.

Yo personalmente me haría una función en php a la que se le pase como parámetro el texto y que automáticamente le aplique los estilos correspondientes dependiendo de las opciones marcadas (si subrayado o no, si negrita o no, si italica o no etc) y así simplemente llamas a esa función que aplicará los estilos y dejará el texto formateado sin mayor complicaciones.


Saludos.

‭lipman

Si es verdad.. no caí en eso >.< xD

Como dije, lo del texto es un mero ejemplo, lo que queria saber era si podria leer esas configuraciones boleanas de otra forma que no fuese con un if, pero veo que es la mejor forma ^^

Un saludo y graciass  ;D

Syphroot

#7
Al parecer ya lo tienes resuelto, pero se me ocurren algunas ideas...

Supongamos tu tabla esta asi:


elementboldunderitalic
enfasis001
titulo110
enfasis2100

Y aqui lo interesante, haces una consulta SQL por un elemento que te indica como aplicar los formatos

Código (sql) [Seleccionar]

SELECT bold, under, italic FROM nombre_tabla WHERE element = 'titulo';


Despues, obtenemos el resultado en un array asociativo. En el siguiente codigo, ese array se llama $resultado_db.

En la variable $r tienes el texto al que aplicar formato:

Código (php) [Seleccionar]

$r = "Cadena por aplicar formato";
$formatos = array
(
'bold' => '<b>*</b>',
'under' => '<u>*</u>',
'italic' => '<i>*</i>'
);
foreach($formatos as $atributo => $html)
{
if($resultado_db[$atributo] == 1)
$r = str_replace('*', $r, $html);
}


En resumen, lo que hace ese codigo es recorrer el array de formatos y si del resultado obtenido de la consulta SQL tiene un "1" en algun campo (que estan en los indices del array formatos) sustituye el "*" del valor del array por el texto original en la variable $r, asignandolo a la misma variable $r para asi aplicar multiples formatos.

Un tip, incluso en vez de poner como esta el "under" en el array de formatos, puedes usar CSS y otros elementos:

Código (php) [Seleccionar]
'under' => '<span class="subrayado">*</span>'

Es algo que se me ocurrio al momento  ;) espero pueda servir

Edito: Si tu cadena original contiene un "*", entonces puedes escoger un patron que practicamente no vaya a existir para evitar sustituciones donde no van

‭lipman

Muchas gracias Syphroot  ;D

En el tema del diseño, si que usaré CSS, que es lo más cómod ^^ Pero este era un simple ejemplo para entender como aplicar algunas configuraciones y me servirá todo

Muchas gracais de nuevo ^^