在 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