在 Prestashop 中向客户组添加新字段
Add new field to Customer Group in Prestashop
我正在尝试将自定义字段添加到 Prestashop 1.6 中的客户组,来自管理区域的 editable。我尝试了各种解决方案,但最有效的方法是本指南中描述的方法:http://nemops.com/extending-prestashop-objects/。在阅读它之前我也这样做过,但似乎这个人是这样工作的。
基本上,我所做的是在 ps_group
table 中添加一个新列,使其不为空(新字段对所有组都是强制性的)。
然后,在文件 classes/Group.php
中,我编辑了 $definition
数组。 (我知道我不应该编辑核心。一旦我检查它是否有效,我将把所有这些外部化)。
public static $definition = array(
'table' => 'group',
'primary' => 'id_group',
'multilang' => true,
'fields' => array(
'reduction' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'),
'price_display_method' => array('type' => self::TYPE_INT, 'validate' => 'isPriceDisplayMethod', 'required' => true),
'show_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'provinces' => array('type' => self::TYPE_STRING, 'required' => true, 'size' => 200),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
),
);
'provinces'
键是我加的
然后我编辑文件 controllers/admin/AdminGroupsController.php
以在管理区域添加新字段,因此它是 editable。在方法 renderForm()
中,我添加了 $this->fields_form
数组的 'input'
的新子项。我的修改如下:
array(
'type' => 'select',
'label' => $this->l('Provinces'),
'name' => 'provinces',
'required' => 'true',
'col' => 3,
'hint' => $this->l('The provinces belonging to this customer group.'),
'options' => array(
'query' => array(
array(
'id_method' => '1',
'name' => 'Option 1'
),
array(
'id_method' => '2',
'name' => 'Option 2'
)
),
'id' => 'id_method',
'name' => 'name'
)
),
我知道,将数据库列和字段命名为相同名称将导致保存此字段中的值,就像其他字段一样。但它不会发生。当我编辑该组,进行一些更改并保存时,以下错误出现在 window 的顶部,靠近感叹号:
Property Group->provinces is empty
尽管如此,POST 表格已正确发送,我的数据也顺利通过,就像其他字段一样。
我在这里遗漏了什么吗?我认为这些是向 any 对象添加新字段的所有必要步骤(产品除外,其工作方式不同)。
我的代码在某些时候是错误的吗?否则,如何向客户组添加新字段?
非常感谢:)
您缺少的是在 classes/Group.php
中添加 属性 $provinces
,请参见下面的示例:
class GroupCore extends ObjectModel
{
public $id;
/** @var string Lastname */
public $name;
/** @var string Reduction */
public $reduction;
/** @var int Price display method (tax inc/tax exc) */
public $price_display_method;
/** @var bool Show prices */
public $show_prices = 1;
/** @var string Object creation date */
public $date_add;
/** @var string Object last modification date */
public $date_upd;
/** @var string Province */
public $provinces;
/**
* @see ObjectModel::$definition
*/
public static $definition = array(
此外,您还可以找到以下几种优化代码的方法:
- 尽可能使用整数作为省份值,这样更安全也更容易使用。您将需要相应地更新您的代码(定义、数据库、表单)。
不要直接修改 PrestaShop 核心文件。 这将阻止 PrestaShop 的任何进一步更新,应该避免。您可以通过使用 PrestaShop 站点根目录中的 override
文件夹然后 controllers
然后 admin
轻松覆盖核心行为。在那里,创建一个新文件 AdminGroupsController.php
,因为这是您要编辑的文件。在此文件中,您可以通过创建一个新的 class 来覆盖 AdminGroupsController
行为;在你的情况下:
class AdminGroupsController extends AdminGroupsControllerCore
{
/* Your code here */
}
然后copy/paste并编辑您需要编辑的方法。这也是您应该添加 属性 $provinces
的地方。
保存修改后,请不要忘记删除 PrestaShop 网站根目录 cache
文件夹中的文件 class_index.php
。
我正在尝试将自定义字段添加到 Prestashop 1.6 中的客户组,来自管理区域的 editable。我尝试了各种解决方案,但最有效的方法是本指南中描述的方法:http://nemops.com/extending-prestashop-objects/。在阅读它之前我也这样做过,但似乎这个人是这样工作的。
基本上,我所做的是在 ps_group
table 中添加一个新列,使其不为空(新字段对所有组都是强制性的)。
然后,在文件 classes/Group.php
中,我编辑了 $definition
数组。 (我知道我不应该编辑核心。一旦我检查它是否有效,我将把所有这些外部化)。
public static $definition = array(
'table' => 'group',
'primary' => 'id_group',
'multilang' => true,
'fields' => array(
'reduction' => array('type' => self::TYPE_FLOAT, 'validate' => 'isFloat'),
'price_display_method' => array('type' => self::TYPE_INT, 'validate' => 'isPriceDisplayMethod', 'required' => true),
'show_prices' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'provinces' => array('type' => self::TYPE_STRING, 'required' => true, 'size' => 200),
// Lang fields
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 32),
),
);
'provinces'
键是我加的
然后我编辑文件 controllers/admin/AdminGroupsController.php
以在管理区域添加新字段,因此它是 editable。在方法 renderForm()
中,我添加了 $this->fields_form
数组的 'input'
的新子项。我的修改如下:
array(
'type' => 'select',
'label' => $this->l('Provinces'),
'name' => 'provinces',
'required' => 'true',
'col' => 3,
'hint' => $this->l('The provinces belonging to this customer group.'),
'options' => array(
'query' => array(
array(
'id_method' => '1',
'name' => 'Option 1'
),
array(
'id_method' => '2',
'name' => 'Option 2'
)
),
'id' => 'id_method',
'name' => 'name'
)
),
我知道,将数据库列和字段命名为相同名称将导致保存此字段中的值,就像其他字段一样。但它不会发生。当我编辑该组,进行一些更改并保存时,以下错误出现在 window 的顶部,靠近感叹号:
Property Group->provinces is empty
尽管如此,POST 表格已正确发送,我的数据也顺利通过,就像其他字段一样。
我在这里遗漏了什么吗?我认为这些是向 any 对象添加新字段的所有必要步骤(产品除外,其工作方式不同)。
我的代码在某些时候是错误的吗?否则,如何向客户组添加新字段?
非常感谢:)
您缺少的是在 classes/Group.php
中添加 属性 $provinces
,请参见下面的示例:
class GroupCore extends ObjectModel
{
public $id;
/** @var string Lastname */
public $name;
/** @var string Reduction */
public $reduction;
/** @var int Price display method (tax inc/tax exc) */
public $price_display_method;
/** @var bool Show prices */
public $show_prices = 1;
/** @var string Object creation date */
public $date_add;
/** @var string Object last modification date */
public $date_upd;
/** @var string Province */
public $provinces;
/**
* @see ObjectModel::$definition
*/
public static $definition = array(
此外,您还可以找到以下几种优化代码的方法:
- 尽可能使用整数作为省份值,这样更安全也更容易使用。您将需要相应地更新您的代码(定义、数据库、表单)。
不要直接修改 PrestaShop 核心文件。 这将阻止 PrestaShop 的任何进一步更新,应该避免。您可以通过使用 PrestaShop 站点根目录中的
override
文件夹然后controllers
然后admin
轻松覆盖核心行为。在那里,创建一个新文件AdminGroupsController.php
,因为这是您要编辑的文件。在此文件中,您可以通过创建一个新的 class 来覆盖AdminGroupsController
行为;在你的情况下:class AdminGroupsController extends AdminGroupsControllerCore { /* Your code here */ }
然后copy/paste并编辑您需要编辑的方法。这也是您应该添加 属性 $provinces
的地方。
保存修改后,请不要忘记删除 PrestaShop 网站根目录 cache
文件夹中的文件 class_index.php
。