Jump to content

[solucionado]¿como añadir un selector multiselect en formulario de configuración, que guarde y recupere bien los datos?


gusman126

Recommended Posts

Hola a todos.

Estoy haciendo un modulo el cual se debe poder seleccionar de un select multiple, las caracteristicas asociadas

array (                        
                    'type' => 'select', 
                    'label' => $this->l('Features:'), 
                    'desc' => $this->l('Elije la caracteristica para mostrar la barra'),
                    'name' => 'PROGRESSBARFEATURE_IDS_FEATURE', 
                    'id' => 'PROGRESSBARFEATURE_IDS_FEATURE',
                   
                    'required' => false,     
                    'multiple' => true,    
                    'options' => array(    
                    'query' => self::feats(), 
                    'id' => 'optionValue',  
                    'name' => 'optionDisplay' 
                    )                  
                    ),

image.png.6de5714def91d67e442d2466123bd327.png

Consigo que se guarde la informacion en la base de datos usando el 

$str = implode(';',Tools::getValue('PROGRESSBARFEATURE_IDS_FEATURE'));
Configuration::updateValue('PROGRESSBARFEATURE_IDS_FEATURE', $str);

El problema que tengo es que me da error al recuperar la información y volverla a añadir al selector

Puedo hacerlo por javascript , y que se queden seleccionados ,

$features = Configuration::get('PROGRESSBARFEATURE_IDS_FEATURE');
        
        $this->context->smarty->assign('features', $features);
features = '{$features}';
splitValues = features.split(';');
    multi = document.getElementById('PROGRESSBARFEATURE_IDS_FEATURE');    
    multi.value = null;    
    multiLen = multi.options.length;    
    for (var i = 0; i < multiLen; i++) {      
        if (splitValues.indexOf(multi.options[i].value) >= 0) {
            multi.options[i].selected = true;      }    
        }
    }); 

 

pero el propio sistema de prestashop, no me selecciona y por lo tanto da un error

Undefined index: PROGRESSBARFEATURE_IDS_FEATURE[]

 

Alguna ayuda???

He mirado otros modulos que lo hacen, pero en versiones de PS 1.6

No me sirve el controlador de adminwharehouse porque en el 1.7 no existe

he probado a poner en el nombre del campo [] , tampoco

Edited by gusman126 (see edit history)
Link to comment
Share on other sites

Bueno después de ver, y revisar el foro había una respuesta que funciona

El nombre debe tener []

'name' => 'PROGRESSBARFEATURE_IDS_FEATURE[]', 

en la funtion postProcess()

Configuration::updateValue('PROGRESSBARFEATURE_IDS_FEATURE', implode(';',Tools::getValue('PROGRESSBARFEATURE_IDS_FEATURE')));

 

y luego para que no de error al leer los datos y que los muestre

en function renderForm()

añadir casi al final despues de $helper->tpl_vars .....

$helper->tpl_vars['fields_value']['PROGRESSBARFEATURE_IDS_FEATURE[]'] = explode(';', Configuration::get('PROGRESSBARFEATURE_IDS_FEATURE'));

Si por casualidad da error al guardar o no guarda bien, añadimos "'" al principio y al final para que este dentro de ' 

$helper->tpl_vars['fields_value']['PROGRESSBARFEATURE_IDS_FEATURE[]'] = explode(';',"'". Configuration::get('PROGRESSBARFEATURE_IDS_FEATURE')."'");

 

por supuesto el codigo java se elimina

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...