我想在创建个人资料时添加一个带有个人资料的下拉列表。我曾经使用过覆盖,下拉列表正确地存储并保存在数据库中,但是当编辑或查看它时没有选择“下拉列表”。
还有很多警告带有未定义的名称,未定义的类型。我将分享我的代码: -
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();
}
}
在Classes文件夹中
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;
}
}
任何人都可以帮我解决这个问题。我正在使用prestashop 1.6
配置文件结构与默认配置相同。 profile_lang结构发生了变化
列类型
id_lang int(10)unsigned
id_profile int(10)unsigned
name varchar(128)
id_admin int(11)
答案 0 :(得分:1)
尝试使用:
$this->fields_form_override = array(
array(
'type' => 'select',
'label' => $this->l('Access Levels'),
'name' => 'id_admin_level',
'lang' => true,
'col' => '4',
'options' => array(
'query' => $values_access,
'id' => 'id',
'name' => 'name',
'val' => 'val'
),
),
);
如果你检查它的使用位置:
// 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-> fields_form [0] ['form'] ['input']合并,因此$ this-> fields_form_override需要采用相同的格式。
另一种解决方案是将名称更改为$this->fields_form_override
至$this->fields_form
,而不是parent::__construct();
使用AdminController::__construct()
绕过(忽略)AdminProfile构造函数。