I wanted to add a dropdown list with the profile on creation of profile. I had used override, the dropdown is coming correctly and saved in database also but when editing or viewing it is not making the "dropdown selected ".
Also so many warnings are coming with undefined name, undefined type. I will share my code :-
AdminProfilesController.php
class AdminProfilesController extends AdminProfilesControllerCore
{
public function __construct()
{
$this->bootstrap = true;
$this->context = Context::getContext();
$this->table = 'profile';
$this->className = 'Profile';
$this->multishop_context = Shop::CONTEXT_ALL;
$this->lang = true;
$this->addRowAction('edit');
$this->addRowAction('delete');
$this->addRowActionSkipList('delete', array(1));
// For add a fields via an override of $fields_form, use $fields_form_override
if (is_array($this->fields_form_override) && !empty($this->fields_form_override)) {
$this->fields_form[0]['form']['input'] = array_merge($this->fields_form[0]['form']['input'], $this->fields_form_override);
}
$this->bulk_actions = array(
'delete' => array(
'text' => $this->l('Delete selected'),
'confirm' => $this->l('Delete selected items?'),
'icon' => 'icon-trash'
)
);
$this->fields_list = array(
'id_profile' => array(
'title' => $this->l('ID'),
'align' => 'center',
'class' => 'fixed-width-xs'
),
'name' => array('title' => $this->l('Name'))
);
$this->identifier = 'id_profile';
/* Fetch All Profiles*/
$admin_levels = Profile::adminLevels();
foreach ($admin_levels as $row) {
$values_access[] = array(
'id' => $row['id_admin'],
'name' => $this->l($row['admin_level_name']),
'label' => $this->l($row['admin_level_name']),
'val' => $row['id_admin']
);
}
$this->fields_form = array(
'legend' => array(
'title' => $this->l('Profile'),
'icon' => 'icon-group'
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Name'),
'name' => 'name',
'required' => true,
'lang' => true,
),
),
$this->fields_form_override = array(
array(
'type' => 'select',
'label' => $this->l('Access Levels'),
'name' => 'id_admin',
// 'lang' => true,
'col' => '4',
'options' => array(
'query' => $values_access,
'id' => 'id',
'name' => 'name',
'val' => 'val'
),
),
),
'submit' => array(
'title' => $this->l('Save'),
)
);
$list_profile = array();
foreach (Profile::getProfiles($this->context->language->id) as $profil) {
$list_profile[] = array('value' => $profil['id_profile'], 'name' => $profil['name']);
}
parent::__construct();
}
}
In Classes folder
Profile.php
class Profile extends ProfileCore
{
/** @var string Name */
public $name;
public $id_admin;
/**
* @see ObjectModel::$definition
*/
public static $definition = array(
'table' => 'profile',
'primary' => 'id_profile',
'multilang' => true,
'fields' => array(
/* Lang fields */
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
'id_admin' => array('type' => self::TYPE_INT, 'lang' => true)
),
);
/** Fetching Admin Access Levels */
public static function adminLevels()
{
$access_level = Db::getInstance()->ExecuteS('SELECT * FROM '._DB_PREFIX_.'admin_levels');
return $access_level;
}
}
Can anyone help me to sort out this. I am using prestashop 1.6
profile structure is same as default. profile_lang structure changes
Column Type
id_lang int(10) unsigned
id_profile int(10) unsigned
name varchar(128)
id_admin int(11)