Hi,
I have read prestashops' docs and searched the internet and couldn't find the answer.
The prestashop tutorial on making a custom module shows how to change one value in module configuration menu. I am trying to make a <selection multiple="multiple"> type form to select
multiple items from it and store them in a variable (DC_CATEGORIES) for later use.
Unfortunately I am unable to accomplish this.
Here is my code
public function getContent()
{
$output = null;
if (Tools::isSubmit('submit'.$this->name))
{
$my_module_name = array();
$my_module_name = unserialize(base64_decode(Tools::getValue('DC_CATEGORIES')));
if (!$my_module_name || empty($my_module_name))
$output .= $this->displayError( $this->l('Invalid Configuration value'.$my_module_name) );
else
{
Configuration::updateValue('DC_CATEGORIES', base64_encode(serialize($my_module_name)));
$output .= $this->displayConfirmation($this->l('Settings updated'));
}
}
return $output.$this->displayForm();
}
public function displayForm()
{
// Get default Language
$default_lang = (int)Configuration::get('PS_LANG_DEFAULT');
$categoriesData = Category::getCategories( 0, true, false );
$categories = array();
foreach($categoriesData as $category)
{
array_push($categories, array(
'id_option' => $category['id_category'],
'name' => $category['name']
));
}
// Init Fields form array
$fields_form[0]['form'] = array(
'legend' => array(
'title' => $this->l('Settings')
),
'input' => array(
array(
'type' => 'select',
'label' => $this->l('Set Categories'),
'name' => 'DC_CATEGORIES',
'multiple' => 'multiple',
'options' => array(
'query' => $categories,
'id' => 'id_option',
'name' => 'name'
)
)
),
'submit' => array(
'title' => $this->l('Save'),
'class' => 'button'
)
);
$helper = new HelperForm();
// Module, token and currentIndex
$helper->module = $this;
$helper->name_controller = $this->name;
$helper->token = Tools::getAdminTokenLite('AdminModules');
$helper->currentIndex = AdminController::$currentIndex.'&configure='.$this->name;
// Language
$helper->default_form_language = $default_lang;
$helper->allow_employee_form_lang = $default_lang;
// Title and toolbar
$helper->title = $this->displayName;
$helper->show_toolbar = true; // false -> remove toolbar
$helper->toolbar_scroll = true; // yes - > Toolbar is always visible on the top of the screen.
$helper->submit_action = 'submit'.$this->name;
$helper->toolbar_btn = array(
'save' =>
array(
'desc' => $this->l('Save'),
'href' => AdminController::$currentIndex.'&configure='.$this->name.'&save'.$this->name.
'&token='.Tools::getAdminTokenLite('AdminModules'),
),
'back' => array(
'href' => AdminController::$currentIndex.'&token='.Tools::getAdminTokenLite('AdminModules'),
'desc' => $this->l('Back to list')
)
);
// Load current value
$helper->fields_value['DC_CATEGORIES'] = Configuration::get('DC_CATEGORIES');
return $helper->generateForm($fields_form);
}
I tryed using base64_encode/decode because otherwise I would get the 'Error at offset' error
(http://davidwalsh.name/php-serialize-unserialize-issues)
Thanks in advance.