Jump to content

Guardar y Cargar array en configuración módulo.


Recommended Posts

Buenas.

 

Estoy desarrollando un módulo para una tienda prestashop que estoy montando. Aunque tengo conocimientos de programación html y php me está resultando un poco duro acostumbrarme a la metodología de prestashop.

 

Más o menos voy arreglando aunque me está costando horrores encontrar documentación o soluciones claras.

 

El tema en el que me he atascado y que no consigo salir es el siguiente.

 

En la inicialización de un módulo, genero un array que almaceno en la configuración del módulo pasándolo a json.

Configuration::updateValue('COMINGSOON_BACKGROUNDS', Tools::jsonEncode($FondosPantalla));

Esto lo hace bien y consultando la base de datos con phpmyadmin tengo la siguiente cadena almacenada:

[{"key":2,"name":"01.jpg","active":true},{"key":3,"name":"02.jpg","active":true},{"key":4,"name":"03.jpg","active":true},{"key":5,"name":"04.jpg","active":true},{"key":6,"name":"05.jpg","active":true},{"key":7,"name":"PruebaUpload.png","active":true},{"key":8,"name":"bg-img-1.jpg","active":true},{"key":9,"name":"bg-img-2.jpg","active":true},{"key":10,"name":"bg-img-3.jpg","active":true},{"key":11,"name":"bg-img-4.jpg","active":true},{"key":12,"name":"bg-img-5.jpg","active":true}]

Ahora viene el problema. Intentar recuperar este json y volverlo a convertir en un array.

 

Por lo que entendí de lo que he leido tendría que hacerlo de la siguiente manera:

$FondosPantalla = Tools::jsonDecode(Configuration::get('COMINGSOON_BACKGROUNDS'), true);

Pero no me funciona. Intentando averiguar que está fallando se me ocurrio insertar lo siguiente:

$temp = Configuration::get('COMINGSOON_BACKGROUNDS');
echo $temp;
die;

Y cual es mi sorpresa que me imprime "12" ....

 

¿No tendría que imprimir la cadena almacenada en la configuración? ¿Por qué no lo hace?

 

¿Que estoy haciendo mal?

 

¿Hay alguna otra manera facil de almacenar y recuperar el array?

 

Muchas gracias

 

Un saludo

Link to comment
Share on other sites

No se muy bien lo que quieres hacer, quizás seria mas conveniente que lo hicieras con

Configuration::updateValue('COMINGSOON_BACKGROUNDS', serialize(FondosPantalla));
Tools::unSerialize(Configuration::get('COMINGSOON_BACKGROUNDS'))
Link to comment
Share on other sites

 

No se muy bien lo que quieres hacer, quizás seria mas conveniente que lo hicieras con

Configuration::updateValue('COMINGSOON_BACKGROUNDS', serialize(FondosPantalla));
Tools::unSerialize(Configuration::get('COMINGSOON_BACKGROUNDS'))

Gracias por responder.

 

El módulo que estoy haciendo genera una página de "próximamente" personalizada para mostrar en el modo mantenimiento de prestashop. Básicamente para poner algo bonito mientras estás construyendo el sitio.

 

Lo que intento almacenar es un array con los nombres de los fondos de pantalla disponibles para mostrar. Este array lo uso en el form de configuración para seleccionar el/los fondos a mostrar (se van rotando en bucle con transiciones cada x segundos). Ahora mismo lo hago con un "select" utilizando helper_form, pero tengo en mente hacerlo con un helper_list (eso me esta dando otros problemas que si no logro solucionar planteare más adelante).

 

El array se genera correctamente y necesito guardarlo con las modificaciones que hace el usuario.

Entiendo que la única manera que tengo de almacenar el array es convertirlo a algo que pueda ser usado por los métodos Configuration::updateValue y ::get, con lo que o tenemos json o serialize.

 

En ambos casos me pasa lo mismo. Lo guarda correctamente (veo la clave generada en la tabla de sql con los valores que corresponden).

 

Pero al intentar cargar de nuevo el array no soy capaz. Se guarda bien pero no se carga de nuevo.

 

Acabo de probar con serialize y al guardar veo la siguiente cadena en sql:

a:11:{i:0;a:3:{s:3:"key";i:2;s:4:"name";s:6:"01.jpg";s:6:"active";b:1;}i:1;a:3:{s:3:"key";i:3;s:4:"name";s:6:"02.jpg";s:6:"active";b:1;}i:2;a:3:{s:3:"key";i:4;s:4:"name";s:6:"03.jpg";s:6:"active";b:1;}i:3;a:3:{s:3:"key";i:5;s:4:"name";s:6:"04.jpg";s:6:"active";b:1;}i:4;a:3:{s:3:"key";i:6;s:4:"name";s:6:"05.jpg";s:6:"active";b:1;}i:5;a:3:{s:3:"key";i:7;s:4:"name";s:16:"PruebaUpload.png";s:6:"active";b:1;}i:6;a:3:{s:3:"key";i:8;s:4:"name";s:12:"bg-img-1.jpg";s:6:"active";b:1;}i:7;a:3:{s:3:"key";i:9;s:4:"name";s:12:"bg-img-2.jpg";s:6:"active";b:1;}i:8;a:3:{s:3:"key";i:10;s:4:"name";s:12:"bg-img-3.jpg";s:6:"active";b:1;}i:9;a:3:{s:3:"key";i:11;s:4:"name";s:12:"bg-img-4.jpg";s:6:"active";b:1;}i:10;a:3:{s:3:"key";i:12;s:4:"name";s:12:"bg-img-5.jpg";s:6:"active";b:1;[spam-filter]

Entiendo que estará bien guardada. Asi como el json se leerlo a pelo esto ya me cuesta más.

 

Pero si entiendo bien, esto que está guardado, al igual que si fuera un json es una cadena de texto no ???

 

Pues con esta cadena guardada en la base de datos, si hago lo siguiente (lo hago en function __construct() para asegurarme de que es lo primero que se ejecuta):

$temp = Configuration::get('COMINGSOON_BACKGROUNDS');
echo $temp;
die;

Imprime por pantalla "12"... el numero 12. Sin más.

 

Me estoy volviendo loco o no se que pasa. He revisado el código dos veces y no sobrescribo la variable en ningún sitio. En la BD esta la cadena larga que puse y el echo lo ejecuto antes de ninguna otra cosa.

 

No se que pasa.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...