在Prestashop中向客户组添加新字段

时间:2015-08-07 08:24:05

标签: php prestashop prestashop-1.6

我正在尝试向Prestashop 1.6中的客户群添加自定义字段,可从管理区域进行编辑。我尝试了各种解决方案,但最有效的方法是本指南中描述的方法:http://nemops.com/extending-prestashop-objects/。我在阅读之前也做了同样的事情,但看起来这个人就是这样做的。

我所做的基本上是在ps_group表中添加一个新列,使其不为空(所有组都必须使用新字段)。

然后,在文件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以在管理区域中添加新字段,因此它是可编辑的。在方法renderForm()中,我添加了'input'数组$this->fields_form的新子项。我的修改如下:

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'
    )
),

我知道同样命名数据库列和字段会导致保存此字段中的值,就像其余字段一样。但它不会发生。当我编辑组,进行一些更改并保存时,窗口顶部会出现以下错误,附近有感叹号:

Property Group->provinces is empty

然而,POST表单正确发送,我的数据传递得很好,就像其他字段一样。

这里有什么我想念的吗?我认为这些是向任何对象添加新字段的必要步骤(产品除外,其工作方式不同)。

我的代码在某些时候是错的吗?或者,如何向客户组添加新字段?

非常感谢:)

1 个答案:

答案 0 :(得分:2)

您缺少的是在$provinces中添加属性classes/Group.php,请参阅以下示例:

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(

此外,您可以在下面找到几种优化代码的方法:

  • 如果可能,使用Integer作为省值,这样更安全,更容易使用。您需要相应地更新代码(定义,数据库,表单)。
  • 不要直接修改PrestaShop核心的文件。这将阻止PrestaShop的任何进一步更新,应该避免。您可以使用PrestaShop站点根目录中的override文件夹轻松覆盖核心行为,然后controllers然后admin。在那里,创建一个新文件AdminGroupsController.php,因为这是您要编辑的内容。在此文件中,您可以通过创建新类来覆盖AdminGroupsController行为;在你的情况下:

     class AdminGroupsController extends AdminGroupsControllerCore
     {
         /* Your code here */
     }
    

然后复制/粘贴并编辑您需要编辑的方法。这也是您应该添加属性$provinces的地方。

保存修改后,请不要忘记删除位于PrestaShop网站根目录的class_index.php文件夹中的文件cache